翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Elastic Kubernetes Service で AWS Secrets Manager シークレットを使用する
Secrets Manager のシークレットを Amazon EKS のポッドにマウントされたファイルとして表示するには、Kubernetes シークレットストア CSI ドライバー
プライベート Amazon EKS クラスターを使用する場合は、クラスターがある VPC に、Secrets Manager エンドポイントが存在している必要があります。Secrets Store CSI ドライバーは、このエンドポイントを使用して Secrets Manager を呼び出します。VPC エンドポイントの作成については、「VPC エンドポイント」を参照してください。
シークレットに Secrets Manager の自動ローテーションを使用する場合は、 シークレットストア CSI ドライバーのローテーション調整機能を使用して、Secrets Manager から最新のシークレットを取得することもできます。詳細については、「マウントされたコンテンツと同期された Kubernetes シークレットの自動ローテーション
トピック
ステップ 1: アクセス制御を設定する
ASCP は Amazon EKS ポッド ID を取得し、IAM ロールと交換します。その IAM ロールの IAM ポリシーでアクセス許可を設定します。ASCP が IAM ロールを引き受けると、認証されたシークレットへのアクセス許可が付与されます。他のコンテナは、IAM ロールに関連付けられていない限り、シークレットにアクセスできません。
ポッドに関連付けられたリージョンと IAM ロールを検索する ASCP からの呼び出しが Kubernetes によってスロットリングされている場合、ステップ 2 に示すように、helm install
を使用してスロットリングクォータを変更できます。
Amazon EKS ポッドに Secrets Manager のシークレットへのアクセスを許可するには
-
ポッドがアクセスする必要があるシークレットに
secretsmanager:GetSecretValue
とsecretsmanager:DescribeSecret
のアクセス許可を付与するアクセス許可ポリシーを作成します。ポリシーの例については、「例: 個々のシークレットを読み、記述するアクセス許可」を参照してください。 -
クラスター用に IAM OpenID Connect (OIDC) プロバイダーがない場合は作成します。詳細については、「Amazon EKS ユーザーガイド」の「クラスターに IAM OIDC プロバイダーを作成する」を参照してください。
-
サービスアカウントの IAM ロールを作成して、ポリシーをアタッチします。詳細については、「Amazon EKS ユーザーガイド」の「サービスアカウントの IAM ロールを作成する」を参照してください。
-
プライベート Amazon EKS クラスターを使用する場合は、クラスターがある VPC に、AWS STS エンドポイントが存在していることを確認してください。エンドポイントの作成の詳細については、「AWS Identity and Access Management ユーザーガイド」の「インターフェイス VPC エンドポイント」を参照してください。
ステップ 2: ASCP のインストールと設定
ASCP は secrets-store-csi-provider-aws
インストール中に、FIPS エンドポイントを使用するように ASCP を設定できます。; エンドポイントのリストについては、「AWS Secrets Manager エンドポイント」を参照してください。
Helm を使用して ASCP をインストールするには
リポジトリが最新のチャートを指していることを確認するには、
helm repo update.
を使用します。-
Secrets Store CSI ドライバーチャートを追加します。
helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
-
グラフをインストールします。スロットリングを設定するには、
--set-json 'k8sThrottlingParams={"qps": "
のフラグを追加します。<number of queries per second>
", "burst": "<number of queries per second>
"}'helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
-
ASCP チャートを追加します。
helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
-
グラフをインストールします。FIPS エンドポイントを使用するには、
--set useFipsEndpoint=true
のフラグを追加します。helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
リポジトリ内の YAML を使用してインストールするには
次のコマンドを使用します。
helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml
ステップ 3: マウントするシークレットを特定する
ASCP が (ファイルシステム上のファイルとして) Amazon EKS 内にマウントするシークレットを判別するには、SecretProviderClass YAML ファイルを作成します。SecretProviderClass
では、マウントするシークレットと、それらのマウントに使用されるファイル名がリストされます。SecretProviderClass
は、参照する Amazon EKS ポッドと同じ名前空間にある必要があります。
以下の例は、SecretProviderClass
を使用して、マウントするシークレットと、Amazon EKS ポッドにマウントされたファイルの名前を記述する方法を示しています。
例:
例: 名前または ARN でシークレットをマウントする
以下は、Amazon EKS で 3 ファイルをマウントする SecretProviderClass
の例です。
完全な ARN によって指定されたシークレット
名前で指定されたシークレット
シークレットの特定のバージョン
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:
111122223333
:secret:MySecret2-d4e5f6" - objectName: "MySecret3" objectType: "secretsmanager" - objectName: "MySecret4" objectType: "secretsmanager" objectVersionLabel: "AWSCURRENT"
例: シークレットからキーと値のペアをマウントする
以下は、Amazon EKS で 3 ファイルをマウントする SecretProviderClass
の例です。
完全な ARN によって指定されたシークレット
同じシークレットから取得した
username
キー/値のペア同じシークレットから取得した
password
キー/値のペア
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:
111122223333
:secret:MySecret-a1b2c3" jmesPath: - path: username objectAlias: dbusername - path: password objectAlias: dbpassword
例: マルチリージョンシークレットのフェイルオーバーリージョンを定義する
接続停止時あるいはディザスタリカバリ設定において可用性を確保するために、ASCP では自動フェイルオーバー機能により、セカンダリリージョンからシークレットを取得することができます。
次に、複数のリージョンにレプリケートされたシークレットを SecretProviderClass
により取得する例を示します。この例では、ASCP が us-east-1
と us-east-2
の両方からシークレットの取得を試行します。どちらかのリージョンが認証の問題などで 4xx エラーを返した場合、ASCP はいずれのシークレットもマウントしません。シークレットが us-east-1
から正常に取得されると、ASCP はそのシークレット値をマウントします。us-east-1
からはシークレットが正常に取得されないものの、us-east-2
からは正常に取得された場合、ASCP は取得された方のシークレット値をマウントします。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "MySecret"
例: マウントするフェイルオーバーシークレットを選択する
次に、フェイルオーバー時にマウントするシークレットを SecretProviderClass
により指定する例を示します。フェイルオーバーシークレットとレプリカは異なります。この例では、 ASCP が objectName
で指定された 2 つのシークレットの取得を試行します。どちらかが認証の問題などで 4xx エラーを返した場合、ASCP はいずれのシークレットもマウントしません。シークレットが us-east-1
から正常に取得されると、ASCP はそのシークレット値をマウントします。us-east-1
からはシークレットが正常に取得されないものの、us-east-2
からは正常に取得された場合、ASCP は取得された方のシークレット値をマウントします。Amazon EKS にマウントされたファイルには、MyMountedSecret
という名前が付けられています。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "arn:aws:secretsmanager:us-east-1:
111122223333
:secret:MySecret-a1b2c3" objectAlias: "MyMountedSecret" failoverObject: - objectName: "arn:aws:secretsmanager:us-east-2:111122223333
:secret:MyFailoverSecret-d4e5f6"
ステップ 4: Amazon EKS ポッドにシークレットをファイルとしてマウントする
次の手順は、サンプル YAML ファイル (ExampleSecretProviderClass.yaml
Amazon EKS でシークレットをマウントするには
-
コマンド
kubectl apply -f ExampleSecretProviderClass.yaml
を使用してSecretProviderClass
をポッドに適用します。 -
コマンド
kubectl apply -f ExampleDeployment.yaml
を使用して、ポッドをデプロイします。 ASCP はファイルをマウントします。
トラブルシューティング
ポッドデプロイを記述すると、ほとんどのエラーを表示できます。
コンテナのエラーメッセージを表示するには
-
次のコマンドで、ポッド名のリストを取得します。デフォルトの名前空間を使用していない場合は、
-n <NAMESPACE>
を使用してください。kubectl get pods
-
ポッドを記述するには、次のコマンドで、前のステップで見つけたポッドの ポッド ID を使用します (
<PODID>
の場合)。デフォルトの名前空間を使用していない場合は、-n <NAMESPACE>
を使用してください。kubectl describe pod/
<PODID>
ASCP のエラーを表示するには
-
プロバイダーログで詳細情報を検索するには、次のコマンドで
<PODID>
ID を使用してcsi-秘密-ストア-プロバイダー-awsポッドを使用します。kubectl -n kube-system get pods kubectl -n kube-system logs pod/
<PODID>