AWS Secrets and Configuration Provider CSI をサービスアカウントの IAM ロール (IRSA) と使用する
前提条件
-
Amazon EKS クラスター (バージョン 1.17 以降)
-
kubectlを介した AWS CLI および Amazon EKS クラスターへのアクセス
アクセス制御を設定する
ASCP は Amazon EKS Pod Identity を取得し、IAM ロールと交換します。その IAM ロールの IAM ポリシーでアクセス許可を設定します。ASCP が IAM ロールを引き受けると、承認されたパラメータへのアクセス許可が付与されます。他のコンテナは、IAM ロールに関連付けない限り、パラメータにアクセスできません。
Amazon EKS ポッドに Parameter Store のパラメータへのアクセスを許可するには
-
ポッドがアクセスする必要があるパラメータに
ssm:GetParametersとssm:DescribeParametersのアクセス許可を付与するアクセス許可ポリシーを作成します。 -
クラスター用に IAM OpenID Connect (OIDC) プロバイダーがない場合は作成します。詳細については、「Amazon EKS ユーザーガイド」の「クラスターに IAM OIDC プロバイダーを作成する」を参照してください。
-
サービスアカウントの IAM ロールを作成して、ポリシーをアタッチします。詳細については、「Amazon EKS ユーザーガイド」の「サービスアカウントの IAM ロールを作成する」を参照してください。
-
プライベート Amazon EKS クラスターを使用する場合は、クラスターがある VPC に、AWS STS エンドポイントが存在していることを確認してください。エンドポイントの作成の詳細については、「AWS Identity and Access Management ユーザーガイド」の「インターフェイス VPC エンドポイント」を参照してください。
マウントするパラメータを特定する
ASCP が (ファイルシステム上のファイルとして) Amazon EKS 内にマウントするパラメータを判別するには、SecretProviderClass YAML ファイルを作成します。SecretProviderClass では、マウントするパラメータと、それらのマウントに使用されるファイル名がリストされます。SecretProviderClass は、参照する Amazon EKS ポッドと同じ名前空間にある必要があります。
パラメータをファイルとしてマウントする
次の手順は、サンプル YAML ファイル (ExampleSecretProviderClass.yaml
Amazon EKS でパラメータをマウントするには
-
SecretProviderClassをポッドに適用します。kubectl apply -f ExampleSecretProviderClass.yaml -
ポッドをデプロイします。
kubectl apply -f ExampleDeployment.yaml -
ASCP はファイルをマウントします。
トラブルシューティング
ポッドのデプロイを記述すると、ほとんどのエラーを表示できます。
コンテナのエラーメッセージを表示するには
-
次のコマンドで、ポッド名のリストを取得します。デフォルトの名前空間を使用していない場合は、
-nを使用してください。name-spacekubectl get pods -
次のコマンドでポッドを記述するには、
pod-idに前のステップで見つけたポッドのポッド ID を使用します。デフォルトの名前空間を使用していない場合は、-nを使用してください。nameSpacekubectl describe pod/pod-id
ASCP のエラーを表示するには
-
プロバイダーログで詳細情報を検索するには、次のコマンドで
pod-id用に csi-secrets-store-provider-aws ポッドの ID を使用します。kubectl -n kube-system get pods kubectl -n kube-system logs Pod/pod-id
-
SecretProviderClassCRD がインストールされていることを確認します。kubectl get crd secretproviderclasses.secrets-store.csi.x-k8s.ioこのコマンドは、
SecretProviderClassカスタムリソース定義に関する情報を返します。
-
SecretProviderClass オブジェクトが作成されたことを確認します。
kubectl get secretproviderclassSecretProviderClassName-o yaml