サービスアカウント (IRSA) の IAM ロールで AWS シークレットと設定プロバイダー CSI を使用する - AWS Secrets Manager

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

サービスアカウント (IRSA) の IAM ロールで AWS シークレットと設定プロバイダー CSI を使用する

前提条件

  • Amazon EKS クラスター (バージョン 1.17 以降)

  • を介した AWS CLI および Amazon EKS クラスターへのアクセス kubectl

アクセス制御を設定する

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