AWS Secrets and Configuration Provider CSI をサービスアカウントの IAM ロール (IRSA) と使用する - AWS Secrets Manager

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 ポッドに Secrets Manager のシークレットへのアクセスを許可するには
  1. ポッドがアクセスする必要があるシークレットに secretsmanager:GetSecretValuesecretsmanager:DescribeSecret のアクセス許可を付与するアクセス許可ポリシーを作成します。ポリシーの例については例: 個々のシークレットを読み、記述するアクセス許可を参照してください。

  2. クラスター用に IAM OpenID Connect (OIDC) プロバイダーがない場合は作成します。詳細については、「Amazon EKS ユーザーガイド」の「クラスターに IAM OIDC プロバイダーを作成する」を参照してください。

  3. サービスアカウントの IAM ロールを作成して、ポリシーをアタッチします。詳細については、「Amazon EKS ユーザーガイド」の「サービスアカウントの IAM ロールを作成する」を参照してください。

  4. プライベート Amazon EKS クラスターを使用する場合は、クラスターがある VPC に、AWS STS エンドポイントが存在していることを確認してください。エンドポイントの作成の詳細については、「AWS Identity and Access Management ユーザーガイド」の「インターフェイス VPC エンドポイント」を参照してください。

マウントするシークレットを特定する

ASCP が (ファイルシステム上のファイルとして) Amazon EKS 内にマウントするシークレットを判別するには、SecretProviderClass YAML ファイルを作成します。SecretProviderClass では、マウントするシークレットと、それらのマウントに使用されるファイル名がリストされます。SecretProviderClass は、参照する Amazon EKS ポッドと同じ名前空間にある必要があります。

シークレットをファイルとしてマウントする

次の手順は、サンプル YAML ファイル (ExampleSecretProviderClass.yamlExampleDeployment.yaml) を使用してシークレットをファイルとしてマウントする方法を示します。

Amazon EKS でシークレットをマウントするには
  1. SecretProviderClass をポッドに適用します。

    kubectl apply -f ExampleSecretProviderClass.yaml
  2. ポッドをデプロイします。

    kubectl apply -f ExampleDeployment.yaml
  3. ASCP はファイルをマウントします。

トラブルシューティング

ポッドのデプロイを記述すると、ほとんどのエラーを表示できます。

コンテナのエラーメッセージを表示するには
  1. 次のコマンドで、ポッド名のリストを取得します。デフォルトの名前空間を使用していない場合は、-n nameSpace を使用してください。

    kubectl get pods
  2. ポッドを記述するには、次のコマンドで、前のステップで見つけたポッドの ポッド 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
  • SecretProviderClass CRD がインストールされていることを確認します。
    kubectl get crd secretproviderclasses.secrets-store.csi.x-k8s.io

    このコマンドは、SecretProviderClass カスタムリソース定義に関する情報を返します。

  • SecretProviderClass オブジェクトが作成されたことを確認します。
    kubectl get secretproviderclass SecretProviderClassName -o yaml