

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

# Amazon EKS の Pod Identity で AWS シークレットと設定プロバイダー CSI を使用する
<a name="ascp-pod-identity-integration"></a>

 AWS Secrets and Configuration Provider と Pod Identity Agent for Amazon Elastic Kubernetes Service の統合により、Amazon EKS で実行されているアプリケーションのセキュリティが強化され、設定が簡素化され、パフォーマンスが向上します。Pod Identity は、Secrets Manager からシークレットを取得するとき、またはパラメータストアからパラメータを取得するときに、Amazon EKS の IAM AWS Systems Manager 認証を簡素化します。

Amazon EKS Pod Identity によって Amazon EKS インターフェイスを介してアクセス許可を直接設定できるようになるため、Kubernetes アプリケーションの IAM アクセス許可を設定するプロセスが合理化され、ステップ数が減少し、Amazon EKS と IAM サービスを切り替える必要がなくなります。Pod Identity では、信頼ポリシーを更新することなく複数のクラスターで 1 つの IAM ロールを使用でき、より詳細なアクセスコントロールのための[ロールセッションタグ](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html#pod-id-abac-tags)がサポートされます。このアプローチは、ロール間でアクセス許可ポリシーを再利用できるようにすることでポリシー管理を簡素化するだけでなく、一致するタグに基づいて AWS リソースへのアクセスを有効にすることでセキュリティを強化します。

## 仕組み
<a name="how-it-works"></a>

1. Pod Identity はポッドに IAM ロールを割り当てます。

1. ASCP はこのロールを使用して認証します AWS のサービス。

1. 承認されると、ASCP はリクエストされたシークレットを取得し、ポッドで使用できるようにします。

詳細については、「*Amazon EKS ユーザーガイド*」の「[EKS Pod Identity の仕組みを理解する](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-how-it-works.html)」を参照してください。

## 前提条件
<a name="prerequisites"></a>

**重要**  
Pod Identity は、クラウド内の Amazon EKS でのみサポートされています。Amazon EC2 インスタンスの [Amazon EKS Anywhere](https://aws.amazon.com/eks/eks-anywhere/)、[Red Hat OpenShift Service on AWS](https://aws.amazon.com/rosa/)、またはセルフマネージド Kubernetes クラスターではサポートされていません。
+ Amazon EKS クラスター (バージョン 1.24 以降)
+ を介した AWS CLI および Amazon EKS クラスターへのアクセス `kubectl`
+ 2 へのアクセス AWS アカウント (クロスアカウントアクセス用)

## Amazon EKS Pod Identity Agent をインストールする
<a name="install-pod-identity-agent"></a>

クラスターで Pod Identity を使用するには、Amazon EKS Pod Identity Agent アドオンをインストールする必要があります。

**Pod Identity Agent をインストールするには**
+ Pod Identity Agent アドオンをクラスターにインストールします。

  ```
  eksctl create addon \
    --name eks-pod-identity-agent \
    --cluster clusterName \
    --region region
  ```

## Pod Identity を使用して ASCP を設定する
<a name="pod-identity-setup"></a>

1. ポッドがアクセスする必要があるシークレットに `secretsmanager:GetSecretValue` と `secretsmanager:DescribeSecret` のアクセス許可を付与するアクセス許可ポリシーを作成します。ポリシーの例については「[例: 個々のシークレットを読み、記述するアクセス許可](auth-and-access_iam-policies.md#auth-and-access_examples-read-and-describe)」を参照してください。

1. Pod Identity の Amazon EKS サービスプリンシパルが引き受けることができる IAM ロールを作成します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Service": "pods.eks.amazonaws.com"
           },
           "Action": [
             "sts:AssumeRole",
             "sts:TagSession"
           ]
         }
       ]
     }
   ```

------

   IAM ポリシーをロールにアタッチします。

   ```
   aws iam attach-role-policy \
     --role-name MY_ROLE \
     --policy-arn POLICY_ARN
   ```

1. Pod Identity の関連付けを作成します。例については、「*Amazon EKS ユーザーガイド*」の「[Pod Identity の関連付けを作成する](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create)」を参照してください。

1. ポッドにマウントするシークレットを指定する `SecretProviderClass` を作成します。

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleSecretProviderClass-PodIdentity.yaml
   ```

   `SecretProviderClass` における IRSA と Pod Identity の主な違いは、オプションのパラメータ `usePodIdentity` です。これは、認証アプローチを決定するオプションのフィールドです。指定しない場合、デフォルトではサービスアカウントの IAM ロール (IRSA) が使用されます。
   + EKS Pod Identity を使用するには、`"true", "True", "TRUE", "t", "T"` のいずれかの値を使用します。
   + IRSA を明示的に使用するには、`"false", "False", "FALSE", "f", or "F"` のいずれかの値に設定します。

1. `/mnt/secrets-store` の下に、シークレットをマウントするポッドをデプロイします。

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleDeployment-PodIdentity.yaml
   ```

1. プライベート Amazon EKS クラスターを使用する場合は、クラスターがある VPC に AWS STS エンドポイントがあることを確認してください。エンドポイントの作成の詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[インターフェイス VPC エンドポイント](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_interface_vpc_endpoints.html)」を参照してください。

### シークレットのマウントを検証する
<a name="verify-secret-mount"></a>

シークレットが正しくマウントされていることを検証するには、次のコマンドを実行します。

```
kubectl exec -it $(kubectl get pods | awk '/pod-identity-deployment/{print $1}' | head -1) -- cat /mnt/secrets-store/MySecret
```

**Amazon EKS Pod Identity に Secrets Manager のシークレットへのアクセスを許可するには**

1. ポッドがアクセスする必要があるシークレットに `secretsmanager:GetSecretValue` と `secretsmanager:DescribeSecret` のアクセス許可を付与するアクセス許可ポリシーを作成します。ポリシーの例については「[例: 個々のシークレットを読み、記述するアクセス許可](auth-and-access_iam-policies.md#auth-and-access_examples-read-and-describe)」を参照してください。

1. シークレットをまだ作成していない場合は、Secrets Manager でシークレットを作成します。

## トラブルシューティング
<a name="integrating_aspc_pod_trouble"></a>

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

**コンテナのエラーメッセージを表示するには**

1. 次のコマンドで、ポッド名のリストを取得します。デフォルトの名前空間を使用していない場合は、`-n NAMESPACE` を使用してください。

   ```
   kubectl get pods
   ```

1. ポッドを記述するには、次のコマンドで、前のステップで見つけたポッドの ポッド 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
  ```