Trident Protect AppVaultオブジェクトを使用してバケットを管理する
Trident Protectのバケットカスタムリソース(CR)は、AppVaultとして知られています。AppVaultオブジェクトは、ストレージバケットの宣言的なKubernetesワークフロー表現です。AppVault CRには、バックアップ、Snapshot、リストア処理、SnapMirrorレプリケーションなどの保護処理でバケットを使用するために必要な設定が含まれています。管理者のみがAppVaultsを作成できます。
アプリケーションでデータ保護操作を実行するときは、AppVault CRを手動またはコマンドラインから作成する必要があります。AppVault CRは環境に固有のものであり、このページの例をAppVault CRを作成する際のガイドとして使用できます。
|
|
AppVault CRがTrident Protectがインストールされているクラスタ上にあることを確認してください。AppVault CRが存在しないか、アクセスできない場合は、コマンドラインにエラーが表示されます。 |
AppVault認証とパスワードを設定
AppVault CRを作成する前に、AppVaultと選択したデータムーバーがプロバイダおよび関連リソースで認証できることを確認してください。
データムーバーリポジトリのパスワード
CRやTrident Protect CLIプラグインを使用してAppVaultオブジェクトを作成する際、ResticおよびKopia暗号化用のカスタムパスワードを含むKubernetesシークレットを指定できます。シークレットを指定しない場合、Trident Protectはデフォルトのパスワードを使用します。
-
AppVault CR を手動で作成する場合は、spec.dataMoverPasswordSecretRef フィールドを使用してシークレットを指定します。
-
Trident Protect CLIを使用してAppVaultオブジェクトを作成する場合は、 `--data-mover-password-secret-ref`引数を使用してシークレットを指定します。
データムーバーリポジトリのパスワードシークレットを作成する
次の例を使用して、パスワードシークレットを作成します。AppVaultオブジェクトを作成する際、Trident Protectにこのシークレットを使用してデータムーバーリポジトリで認証するように指示できます。
|
|
|
---
apiVersion: v1
data:
KOPIA_PASSWORD: <base64-encoded-password>
RESTIC_PASSWORD: <base64-encoded-password>
kind: Secret
metadata:
name: my-optional-data-mover-secret
namespace: trident-protect
type: Opaque
kubectl create secret generic my-optional-data-mover-secret \
--from-literal=KOPIA_PASSWORD=<plain-text-password> \
--from-literal=RESTIC_PASSWORD=<plain-text-password> \
-n trident-protect
S3 互換ストレージの IAM 権限
Trident Protectを使用してAmazon S3、Generic S3、 "StorageGrid S3"、または "ONTAP S3"などのS3互換ストレージにアクセスする場合は、指定するユーザクレデンシャルにバケットへのアクセスに必要な権限があることを確認する必要があります。次に、Trident Protectでアクセスするために必要な最小限の権限を付与するポリシーの例を示します。このポリシーは、S3互換バケットポリシーを管理するユーザに適用できます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": "*"
}
]
}
Amazon S3 ポリシーの詳細については、 "Amazon S3 ドキュメント"の例を参照してください。
Amazon S3(AWS)認証用のEKS Pod Identity
Trident Protect は、Kopia データ ムーバー操作用の EKS Pod Identity をサポートします。この機能により、Kubernetes シークレットに AWS 認証情報を保存せずに、S3 バケットへの安全なアクセスが可能になります。
Trident Protect を使用した EKS Pod Identity の要件
EKS Pod Identity を Trident Protect で使用する前に、次の点を確認してください:
-
EKS クラスタで Pod Identity が有効になっています。
-
必要な S3 バケット権限を持つ IAM ロールを作成しました。詳細については、"S3 互換ストレージの IAM 権限"を参照してください。
-
IAM ロールは次の Trident Protect サービス アカウントに関連付けられています:
-
<trident-protect>-controller-manager -
<trident-protect>-resource-backup -
<trident-protect>-resource-restore -
<trident-protect>-resource-delete
-
Pod Identity を有効にして IAM ロールをサービスアカウントに関連付ける詳細な手順については、 "AWS EKS Pod Identity のドキュメント"を参照してください。
AppVault設定 EKS Pod Identityを使用する場合は、明示的なクレデンシャルの代わりに `useIAM: true`フラグを使用してAppVault CRを設定します:
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: eks-protect-vault
namespace: trident-protect
spec:
providerType: AWS
providerConfig:
s3:
bucketName: trident-protect-aws
endpoint: s3.example.com
useIAM: true
AppVault クラウド プロバイダ向けのキー生成例
AppVault CR を定義する際には、IAM 認証を使用していない限り、プロバイダによってホストされているリソースにアクセスするための認証情報を含める必要があります。認証情報のキーを生成する方法は、プロバイダによって異なります。以下は、いくつかのプロバイダのコマンドライン キー生成の例です。次の例を使用して、各クラウド プロバイダの認証情報のキーを作成できます。
kubectl create secret generic <secret-name> \
--from-file=credentials=<mycreds-file.json> \
-n trident-protect
kubectl create secret generic <secret-name> \
--from-literal=accessKeyID=<objectstorage-accesskey> \
--from-literal=secretAccessKey=<amazon-s3-trident-protect-src-bucket-secret> \
-n trident-protect
kubectl create secret generic <secret-name> \
--from-literal=accountKey=<secret-name> \
-n trident-protect
kubectl create secret generic <secret-name> \
--from-literal=accessKeyID=<objectstorage-accesskey> \
--from-literal=secretAccessKey=<generic-s3-trident-protect-src-bucket-secret> \
-n trident-protect
kubectl create secret generic <secret-name> \
--from-literal=accessKeyID=<objectstorage-accesskey> \
--from-literal=secretAccessKey=<ontap-s3-trident-protect-src-bucket-secret> \
-n trident-protect
kubectl create secret generic <secret-name> \
--from-literal=accessKeyID=<objectstorage-accesskey> \
--from-literal=secretAccessKey=<storagegrid-s3-trident-protect-src-bucket-secret> \
-n trident-protect
AppVault 作成例
以下は、各プロバイダーの AppVault 定義の例です。
AppVault CR の例
以下のCRの例を使用して、各クラウド プロバイダのAppVaultオブジェクトを作成できます。
|
|
|
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: gcp-trident-protect-src-bucket
namespace: trident-protect
spec:
dataMoverPasswordSecretRef: my-optional-data-mover-secret
providerType: GCP
providerConfig:
gcp:
bucketName: trident-protect-src-bucket
projectID: project-id
providerCredentials:
credentials:
valueFromSecret:
key: credentials
name: gcp-trident-protect-src-bucket-secret
---
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: amazon-s3-trident-protect-src-bucket
namespace: trident-protect
spec:
dataMoverPasswordSecretRef: my-optional-data-mover-secret
providerType: AWS
providerConfig:
s3:
bucketName: trident-protect-src-bucket
endpoint: s3.example.com
proxyURL: http://10.1.1.1:3128
providerCredentials:
accessKeyID:
valueFromSecret:
key: accessKeyID
name: s3-secret
secretAccessKey:
valueFromSecret:
key: secretAccessKey
name: s3-secret
sessionToken:
valueFromSecret:
key: sessionToken
name: s3-secret
|
|
Kopia データムーバーで Pod Identity を使用している EKS 環境の場合、 providerCredentials セクションを削除し、代わりに s3 設定の下に useIAM: true を追加できます。
|
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: azure-trident-protect-src-bucket
namespace: trident-protect
spec:
dataMoverPasswordSecretRef: my-optional-data-mover-secret
providerType: Azure
providerConfig:
azure:
accountName: account-name
bucketName: trident-protect-src-bucket
providerCredentials:
accountKey:
valueFromSecret:
key: accountKey
name: azure-trident-protect-src-bucket-secret
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: generic-s3-trident-protect-src-bucket
namespace: trident-protect
spec:
dataMoverPasswordSecretRef: my-optional-data-mover-secret
providerType: GenericS3
providerConfig:
s3:
bucketName: trident-protect-src-bucket
endpoint: s3.example.com
proxyURL: http://10.1.1.1:3128
providerCredentials:
accessKeyID:
valueFromSecret:
key: accessKeyID
name: s3-secret
secretAccessKey:
valueFromSecret:
key: secretAccessKey
name: s3-secret
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: ontap-s3-trident-protect-src-bucket
namespace: trident-protect
spec:
dataMoverPasswordSecretRef: my-optional-data-mover-secret
providerType: OntapS3
providerConfig:
s3:
bucketName: trident-protect-src-bucket
endpoint: s3.example.com
proxyURL: http://10.1.1.1:3128
providerCredentials:
accessKeyID:
valueFromSecret:
key: accessKeyID
name: s3-secret
secretAccessKey:
valueFromSecret:
key: secretAccessKey
name: s3-secret
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: storagegrid-s3-trident-protect-src-bucket
namespace: trident-protect
spec:
dataMoverPasswordSecretRef: my-optional-data-mover-secret
providerType: StorageGridS3
providerConfig:
s3:
bucketName: trident-protect-src-bucket
endpoint: s3.example.com
proxyURL: http://10.1.1.1:3128
providerCredentials:
accessKeyID:
valueFromSecret:
key: accessKeyID
name: s3-secret
secretAccessKey:
valueFromSecret:
key: secretAccessKey
name: s3-secret
Trident Protect CLI を使用したAppVault作成例
次の CLI コマンド例を使用して、各プロバイダーの AppVault CR を作成できます。
|
|
|
tridentctl-protect create vault GCP <vault-name> \
--bucket <mybucket> \
--project <my-gcp-project> \
--secret <secret-name>/credentials \
--data-mover-password-secret-ref <my-optional-data-mover-secret> \
-n trident-protect
tridentctl-protect create vault AWS <vault-name> \
--bucket <bucket-name> \
--secret <secret-name> \
--endpoint <s3-endpoint> \
--data-mover-password-secret-ref <my-optional-data-mover-secret> \
-n trident-protect
tridentctl-protect create vault Azure <vault-name> \
--account <account-name> \
--bucket <bucket-name> \
--secret <secret-name> \
--data-mover-password-secret-ref <my-optional-data-mover-secret> \
-n trident-protect
tridentctl-protect create vault GenericS3 <vault-name> \
--bucket <bucket-name> \
--secret <secret-name> \
--endpoint <s3-endpoint> \
--data-mover-password-secret-ref <my-optional-data-mover-secret> \
-n trident-protect
tridentctl-protect create vault OntapS3 <vault-name> \
--bucket <bucket-name> \
--secret <secret-name> \
--endpoint <s3-endpoint> \
--data-mover-password-secret-ref <my-optional-data-mover-secret> \
-n trident-protect
tridentctl-protect create vault StorageGridS3 <vault-name> \
--bucket <bucket-name> \
--secret <secret-name> \
--endpoint <s3-endpoint> \
--data-mover-password-secret-ref <my-optional-data-mover-secret> \
-n trident-protect
サポートされている `providerConfig.s3`設定オプション
S3 プロバイダの構成オプションについては、次の表を参照してください:
| パラメータ | 概要 | デフォルト | 例 |
|---|---|---|---|
|
SSL/TLS 証明書の検証を無効にします。 |
false |
"true"、"false" |
|
S3 エンドポイントとの安全な HTTPS 通信を有効にします。 |
true |
"true"、"false" |
|
S3 に接続するために使用されるプロキシ サーバの URL を指定します。 |
なし |
|
|
SSL/TLS 検証用のカスタム ルート CA 証明書を提供します。 |
なし |
"CN=MyCustomCA" |
|
S3 バケットにアクセスするための IAM 認証を有効にします。EKS Pod Identity に適用可能です。 |
false |
true、false |
AppVault 情報を表示します
Trident Protect CLI プラグインを使用して、クラスタ上に作成した AppVault オブジェクトに関する情報を表示できます。
-
AppVaultオブジェクトの内容を表示します:
tridentctl-protect get appvaultcontent gcp-vault \ --show-resources all \ -n trident-protect出力例:
+-------------+-------+----------+-----------------------------+---------------------------+ | CLUSTER | APP | TYPE | NAME | TIMESTAMP | +-------------+-------+----------+-----------------------------+---------------------------+ | | mysql | snapshot | mysnap | 2024-08-09 21:02:11 (UTC) | | production1 | mysql | snapshot | hourly-e7db6-20240815180300 | 2024-08-15 18:03:06 (UTC) | | production1 | mysql | snapshot | hourly-e7db6-20240815190300 | 2024-08-15 19:03:06 (UTC) | | production1 | mysql | snapshot | hourly-e7db6-20240815200300 | 2024-08-15 20:03:06 (UTC) | | production1 | mysql | backup | hourly-e7db6-20240815180300 | 2024-08-15 18:04:25 (UTC) | | production1 | mysql | backup | hourly-e7db6-20240815190300 | 2024-08-15 19:03:30 (UTC) | | production1 | mysql | backup | hourly-e7db6-20240815200300 | 2024-08-15 20:04:21 (UTC) | | production1 | mysql | backup | mybackup5 | 2024-08-09 22:25:13 (UTC) | | | mysql | backup | mybackup | 2024-08-09 21:02:52 (UTC) | +-------------+-------+----------+-----------------------------+---------------------------+
-
オプションで、各リソースのAppVaultPathを表示するには、フラグ `--show-paths`を使用します。
表の最初の列のクラスタ名は、Trident Protect Helm のインストール時にクラスタ名が指定された場合にのみ使用できます。例:
--set clusterName=production1。
AppVault を削除します
AppVault オブジェクトはいつでも削除できます。
|
|
AppVault オブジェクトを削除する前に、AppVault CR 内の `finalizers`キーを削除しないでください。削除すると、AppVault バケット内に残留データが残り、クラスター内にリソースが孤立する可能性があります。 |
削除するAppVaultで使用されているすべてのスナップショットとバックアップCRが削除されていることを確認してください。
-
AppVaultオブジェクトを削除します。 `appvault-name`を削除するAppVaultオブジェクトの名前に置き換えます:
kubectl delete appvault <appvault-name> \ -n trident-protect
-
AppVaultオブジェクトを削除します。 `appvault-name`を削除するAppVaultオブジェクトの名前に置き換えます:
tridentctl-protect delete appvault <appvault-name> \ -n trident-protect