Skip to content
Open
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
218b613
PBM-1727 Oracle Cloud Storage
rasika-chivate Jun 11, 2026
cb1ec3d
Update oci-storage.md
rasika-chivate Jun 11, 2026
6780b88
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
b6defbd
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
434ac3f
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
71732c0
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
47d828d
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
826abd4
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
2bc680b
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
7b0c1f2
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
ecd613e
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
3a571ea
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
9306047
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
26df0f5
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
168ac45
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
fd77dbd
Add OCI storage page to docs navigation
Copilot Jun 12, 2026
5b4d548
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
9be198f
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
996f477
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
f52f739
Document OCI config options in reference docs
Copilot Jun 12, 2026
ece2f50
Update oci-storage.md
rasika-chivate Jun 12, 2026
373ceeb
added example
rasika-chivate Jun 12, 2026
6a6c63d
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
e503805
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
897a91e
Remove generated git-committers cache artifact
Copilot Jun 12, 2026
4fdda27
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
7faa675
Align OCI auth list with documented methods
Copilot Jun 12, 2026
125e38c
Update oci-storage.md
rasika-chivate Jun 12, 2026
19b7fe5
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
25cebef
Update oci-storage.md
rasika-chivate Jun 12, 2026
a5b37d1
Merge branch 'PBM-1727-Oracle-Cloud-Storage' of https://github.com/pe…
rasika-chivate Jun 12, 2026
ea2d70b
Create oci-WIF.md
rasika-chivate Jun 12, 2026
493dd3b
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
9c95874
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
f6b89f6
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
c9e3370
Added OCI with WIF section
rasika-chivate Jun 12, 2026
919ba1c
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
c174fdf
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
d051e2a
docs: include okeWorkloadIdentity in OCI credentials type options
Copilot Jun 12, 2026
799a81d
Rename OCI WIF doc filename to lowercase
Copilot Jun 12, 2026
61a5065
Update mkdocs-base.yml
rasika-chivate Jun 12, 2026
46721d3
Merge branch 'PBM-1727-Oracle-Cloud-Storage' of https://github.com/pe…
rasika-chivate Jun 12, 2026
33a709f
Update oci-storage.md
rasika-chivate Jun 12, 2026
a054489
Update oci-storage.md
rasika-chivate Jun 12, 2026
6c49d62
Update mkdocs-base.yml
rasika-chivate Jun 12, 2026
cf2755e
Update oci-storage.md
rasika-chivate Jun 12, 2026
ca57383
Update oci-wif.md
rasika-chivate Jun 12, 2026
1e7ab2c
Update oci-wif.md
rasika-chivate Jun 12, 2026
dede907
Update oci-storage.md
rasika-chivate Jun 12, 2026
022a45b
Update oci-storage.md
rasika-chivate Jun 12, 2026
c6322b8
Update oci-storage.md
rasika-chivate Jun 12, 2026
96ba9e1
Update oci-storage.md
rasika-chivate Jun 12, 2026
bc0f74e
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
3209746
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
a8b30d7
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
f0eb95f
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
3484bf7
Potential fix for pull request finding
rasika-chivate Jun 12, 2026
0bae2c9
Update oci-wif.md
rasika-chivate Jun 12, 2026
d58d307
Update oci-wif.md
rasika-chivate Jun 12, 2026
5de65e6
Update oci-storage.md
rasika-chivate Jun 12, 2026
c07cad8
Update oci-storage.md
rasika-chivate Jun 12, 2026
eae84da
Update oci-storage.md
rasika-chivate Jun 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ styles/
# Allow

!styles/config/vocabularies/Percona/**

# Generated plugin cache
.cache/plugin/git-committers/
172 changes: 172 additions & 0 deletions docs/details/oci-WIF.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# Oracle Cloud Infrastructure (OCI) Object Storage with Workload Identity Authentication

Percona Backup for MongoDB (PBM) supports Workload Identity authentication for Oracle Cloud Infrastructure (OCI) Object Storage. With Workload Identity, PBM can access OCI resources without storing or managing API keys, reducing operational overhead and improving security.

Percona Backup for MongoDB (PBM) supports two Workload Identity authentication types for OCI Object Storage, in addition to the default `userPrincipal`:

| Auth type | When to use |
|---|---|
|`userPrincipal`|PBM is running anywhere — on-premises, on other clouds, or on OCI|
| `instancePrincipal`| PBM is running on a virtual machine inside OCI |
| `okeWorkloadIdentity`| PBM is running inside an OKE enhanced cluster|

## userPrincipal

Choose `userPrincipal` when PBM runs outside OCI, or when you want a single authentication approach that works in any environment. PBM authenticates using an OCI user account and an API signing key.

### Before you begin

You need:

- An OCI user account with access to the target bucket
- An [API signing key pair :octicons-link-external-16:](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm){:target="_blank"} (private key file and its fingerprint)
- The [Oracle Cloud Identifier (OCID) :octicons-link-external-16:](https://docs.oracle.com/en-us/iaas/Content/General/Concepts/identifiers.htm#Oracle){:target="_blank"} of the user and tenancy
- The name of the OCI bucket PBM will use for backups

### Procedure

1. Create an IAM policy
Grant the user permission to manage objects in the target bucket:
```sh
oci iam policy create \
--region "$HOME_REGION" \
--compartment-id "$TENANCY_OCID" \
--name "$USER_POLICY_NAME" \
--description "Allow PBM user to access $BUCKET_NAME" \
--statements "[\"Allow group $USER_GROUP_NAME to manage objects in compartment $COMPARTMENT_NAME where target.bucket.name = '$BUCKET_NAME'\"]"
```

Replace the following variables:

| Variable | Description |
|---|---|
| `HOME_REGION` | Your tenancy's home region (e.g. `us-ashburn-1`) |
| `TENANCY_OCID` | OCID of your OCI tenancy |
| `USER_POLICY_NAME` | A name for the policy (e.g. `pbm-user-policy`) |
| `USER_GROUP_NAME` | The IAM group the PBM user belongs to |
| `COMPARTMENT_NAME` | Name of the compartment containing the bucket |
| `BUCKET_NAME` | Name of the OCI Object Storage bucket |

2. Configure PBM authentication

In your PBM configuration, set the storage type to `oci` and the credentials type to `userPrincipal`. Provide the API signing key private key in PEM format.

```yaml
storage:
type: oci
oci:
region: <bucket_region>
namespace: <namespace>
bucket: <bucket_name>
prefix: <path_prefix>
credentials:
type: userPrincipal
userPrincipal:
tenancy: <tenancy_ocid>
user: <user_ocid>
fingerprint: <key_fingerprint>
privateKey: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
```

## instancePrincipal

Choose `instancePrincipal` when PBM runs directly on an OCI Compute instance. PBM automatically obtains OCI credentials from the instance, eliminating the need for credential files or API keys.

### Before you begin

You need:

- The [Oracle Cloud Identifier (OCID) :octicons-link-external-16:](https://docs.oracle.com/en-us/iaas/Content/General/Concepts/identifiers.htm#Oracle){:target="_blank"} of the OCI Compute instance running PBM
- The name of the OCI bucket PBM will use for backups.

### Procedure

Follow these steps to set up OCI using **`instancePrincipal`:**

1. **Create a dynamic group for the instance**

OCI IAM policies cannot target individual instances directly. You must first add the instance to a dynamic group, then write a policy against that group.

```sh
oci iam dynamic-group create \
--region "$HOME_REGION" \
--compartment-id "$TENANCY_OCID" \
--name "$INSTANCE_DYNAMIC_GROUP_NAME" \
--description "PBM VM instance principal" \
--matching-rule "ANY {instance.id = '$INSTANCE_OCID'}"
```

Replace the following variables:

| Variable | Description |
|---|---|
| `HOME_REGION` | Your tenancy's home region (e.g. `us-ashburn-1`) |
| `TENANCY_OCID` | OCID of your OCI tenancy |
| `INSTANCE_DYNAMIC_GROUP_NAME` | A name for the dynamic group (e.g. `pbm-vm-group`) |
| `INSTANCE_OCID` | OCID of the Compute instance running PBM |

2. **Create an IAM policy**

Grant the dynamic group permission to manage objects in the target bucket:

```sh
export INSTANCE_POLICY_STATEMENT="Allow dynamic-group $INSTANCE_DYNAMIC_GROUP_NAME \
to manage objects in compartment $COMPARTMENT_NAME \
where target.bucket.name = '$BUCKET_NAME'"

oci iam policy create \
--region "$HOME_REGION" \
--compartment-id "$TENANCY_OCID" \
--name "$INSTANCE_POLICY_NAME" \
--description "Allow PBM VM instance principal to access $BUCKET_NAME" \
--statements "[\"$INSTANCE_POLICY_STATEMENT\"]"
```

Replace the following additional variables:

| Variable | Description |
|---|---|
| `COMPARTMENT_NAME` | Name of the compartment containing the bucket |
| `BUCKET_NAME` | Name of the OCI Object Storage bucket |
| `INSTANCE_POLICY_NAME` | A name for the policy (e.g. `pbm-vm-policy`) |

3. **Configure PBM authentication**

In your PBM configuration, set the storage type to `oci` and the credentials type to `instancePrincipal`. No key file or passphrase is needed.

```yaml
storage:
type: oci
oci:
region: <bucket_region>
namespace: <namespace>
bucket: <bucket_name>
prefix: <path_prefix>
credentials:
type: instancePrincipal
```

## okeWorkloadIdentity

Choose `okeWorkloadIdentity` when PBM runs as a workload in an Oracle Kubernetes Engine (OKE) enhanced cluster. The Kubernetes service account token is exchanged for OCI credentials automatically by the OKE Workload Identity service.

!!! note
Your OKE cluster must be an **enhanced cluster** with Workload Identity enabled. Basic clusters do not support this feature.

In your PBM configuration, set the storage type to `oci` and the credentials type to `okeWorkloadIdentity`:

```yaml
storage:
type: oci
oci:
region: <bucket_region>
namespace: <namespace>
bucket: <bucket_name>
prefix: <path_prefix>
credentials:
type: okeWorkloadIdentity
```
For setup instructions, see [Configure OKE Workload Identity for workloads :octicons-link-external-16:](https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contenggrantingworkloadaccesstoresources.htm){:target="_blank"}.
Loading