翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Elastic Kubernetes Service で AWS Secrets Manager シークレットを使用する
Secrets Manager からのシークレットを Amazon EKS ポッドにマウントされたファイルとして表示するには、Kubernetes AWS Secrets Store CSI ドライバーのシークレットと設定プロバイダー (ASCP) を使用できます。 https://secrets-store-csi-driver.sigs.k8s.io/
プライベート 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 エンドポイントがあることを確認します。エンドポイントの作成の詳細については、「 ユーザーガイド」の「インターフェイス VPC エンドポイントAWS Identity and Access Management 」を参照してください。
ステップ 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 ポッドにシークレットをファイルとしてマウントする
Amazon EKS にシークレットをマウントするには
-
コマンド
SecretProviderClass
を使用して をポッドに適用しますkubectl apply -f ExampleSecretProviderClass.yaml
。 -
コマンド を使用してポッドをデプロイします
kubectl apply -f ExampleDeployment.yaml
。 ASCP はファイルをマウントします。
トラブルシューティング
ポッドデプロイを記述すると、ほとんどのエラーを表示できます。
コンテナのエラーメッセージを表示するには
-
次のコマンドで、ポッド名のリストを取得します。デフォルトの名前空間を使用していない場合は、
-n <NAMESPACE>
を使用してください。kubectl get pods
-
ポッドを記述するには、次のコマンドで、前のステップで見つけたポッドの ポッド ID を使用します (
<PODID>
の場合)。デフォルトの名前空間を使用していない場合は、-n <NAMESPACE>
を使用してください。kubectl describe pod/
<PODID>
ASCP のエラーを表示するには
-
プロバイダーログで詳細情報を確認するには、次のコマンドで、
<PODID>
に csi-secrets-store-provider-aws ポッドの ID を使用します。kubectl -n kube-system get pods kubectl -n kube-system logs pod/
<PODID>