

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

# Amazon Elastic Kubernetes Service で AWS Secrets Manager シークレットを使用する
<a name="integrate_eks"></a>

 AWS Secrets Manager (ASCP) からのシークレットを Amazon EKS Pod にマウントされたファイルとして表示するには、Kubernetes AWS Secrets Store CSI ドライバーの Secrets and Configuration Provider を使用できます。ASCP は、Amazon EC2 ノードグループ.node グループを実行する Amazon Elastic Kubernetes Service 1.17\$1 ではサポートされていません。 AWS Fargate ASCP を使用すると、秘密マネジャー でシークレットを保存および管理し、Amazon EKS で実行されているワークロードからシークレットを取得できます。シークレットに JSON 形式の複数のキー/値ペアが含まれている場合は、Amazon EKS にマウントするキー/値ペアを選択できます。ASCP は JMESPath 構文を使用して、シークレット内のキーと値のペアをクエリします。ASCP はパラメータストアパラメータを使用しても動作します。ASCP には、Amazon EKS による 2 つの認証方法が用意されています。最初のアプローチでは、サービスアカウントの IAM ロール (IRSA) を使用します。2 番目のアプローチでは、Pod Identity を使用します。各アプローチにはそれぞれの利点とユースケースがあります。

## サービスアカウントの IAM ロール (IRSA) を使用した ASCP
<a name="csi_driver_overview"></a>

ASCP with IAM Roles for Service Accounts (IRSA) を使用すると、Amazon EKS Pod のファイル AWS Secrets Manager として からシークレットをマウントできます。このアプローチは、次の場合に適しています。
+ シークレットをポッドのファイルとしてマウントする必要がある。
+ Amazon EC2 ノードグループで Amazon EKS バージョン 1.17 以降を使用している。
+ JSON 形式のシークレットから特定のキーと値のペアを取得する。

詳細については、「[サービスアカウント (IRSA) の IAM ロールで AWS シークレットと設定プロバイダー CSI を使用する](integrating_ascp_irsa.md)」を参照してください。

## Pod Identity を使用した ASCP
<a name="pod_identity_overview"></a>

Pod Identity を使用した ASCP の方法では、セキュリティが強化され、Amazon EKS のシークレットにアクセスするための設定が簡素化されます。このアプローチは、次の場合に役立ちます。
+ ポッドレベルでより詳細にアクセス許可を管理する必要がある。
+ Amazon EKS バージョン 1.24 以降を使用している。
+ パフォーマンスとスケーラビリティを向上させる必要がある。

詳細については、「[Amazon EKS の Pod Identity で AWS シークレットと設定プロバイダー CSI を使用する](ascp-pod-identity-integration.md)」を参照してください。

## 適切なアプローチの選択
<a name="comparison"></a>

IRSA を使用した ASCP と Pod Identity を使用した ASCP のどちらを選択するかを決めるときは、次の要素を考慮します。
+ Amazon EKSversion: Pod Identity には Amazon EKS 1.24 以降が必要ですが、CSI ドライバーは Amazon EKS 1.17 以降で動作します。
+ セキュリティ要件: Pod Identity は、ポッドレベルでのより詳細な制御を提供します。
+ パフォーマンス: 通常、大規模な環境では Pod Identity の方がパフォーマンスが向上します。
+ 複雑さ: Pod Identity には個別のサービスアカウントが必要ないため、設定が簡素化されます。

特定の要件と Amazon EKS 環境に最適な方法を選択します。

# Amazon EKS 用の ASCP をインストールする
<a name="ascp-eks-installation"></a>

このセクションでは、Amazon EKS の AWS シークレットと設定プロバイダーをインストールする方法について説明します。ASCP を使用すると、Secrets Manager のシークレットと のパラメータを Amazon EKS Pods のファイル AWS Systems Manager としてマウントできます。

## 前提条件
<a name="prerequisites"></a>
+ Amazon EKS クラスター
  + Pod Identity 用にバージョン 1.24 以降
  + IRSA 用にバージョン 1.17 以降
+  AWS CLI のインストールと設定
+ kubectl が、Amazon EKS クラスター用にインストールされ、設定されている
+ Helm (バージョン 3.0 以降)

## ASCP をインストールして設定する
<a name="integrating_csi_driver_install"></a>

ASCP は [secrets-store-csi-provider-aws](https://github.com/aws/secrets-store-csi-driver-provider-aws) リポジトリの GitHub で入手できます。リポジトリには、シークレットを作成してマウントするための YAML ファイルの例も含まれています。

インストール中に、FIPS エンドポイントを使用するように ASCP を設定できます。; エンドポイントのリストについては、「[AWS Secrets Manager エンドポイント](asm_access.md#endpoints)」を参照してください。

**ASCP を EKS アドオンとしてインストールするには**

1. のインストール `eksctl` ([インストール手順](https://docs.aws.amazon.com/eks/latest/eksctl/installation.html))

1. 次のコマンドを実行して、[デフォルト設定](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/charts/secrets-store-csi-driver-provider-aws/values.yaml)でアドオンをインストールします。

   ```
   eksctl create addon --cluster <your_cluster> --name aws-secrets-store-csi-driver-provider
   ```

   アドオンを設定する場合は、代わりに次のインストールコマンドを実行します。

   ```
   aws eks create-addon --cluster-name <your_cluster> --addon-name aws-secrets-store-csi-driver-provider --configuration-values 'file://path/to/config.yaml'
   ```

   設定ファイルは、YAML ファイルまたは JSON ファイルです。アドオンの設定スキーマを表示するには:

   1. 次のコマンドを実行し、最新バージョンのアドオンを書き留めます。

      ```
      aws eks describe-addon-versions --addon-name aws-secrets-store-csi-driver-provider
      ```

   1. 次のコマンドを実行してアドオンの設定スキーマを確認し、 を前のステップのバージョン`<version>`に置き換えます。

      ```
      aws eks describe-addon-configuration --addon-name aws-secrets-store-csi-driver-provider --addon-version <version>
      ```

**Helm を使用して ASCP をインストールするには**

1. リポジトリが最新のチャートを指していることを確認するには、`helm repo update.` を使用します。

1. グラフをインストールします。次に `helm install` コマンドの例を示します。

   ```
   helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
   ```

   1. FIPS エンドポイントを使用するには、`--set useFipsEndpoint=true` のフラグを追加します。

   1. スロットリングを設定するには、`--set-json 'k8sThrottlingParams={"qps": "number of queries per second", "burst": "number of queries per second"}'` のフラグを追加します。

   1. Secrets Store CSI ドライバーがクラスターに既にインストールされている場合は、`--set secrets-store-csi-driver.install=false` フラグを追加します。これにより、依存関係としての Secrets Store CSI ドライバーのインストールはスキップされます。

**リポジトリ内の 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
  ```

## インストールを検証する
<a name="verify-ascp-installations"></a>

EKS クラスター、Secrets Store CSI ドライバー、ASCP プラグインのインストールを検証するには、次の手順に従います。

1. EKS クラスターを検証します。

   ```
   eksctl get cluster --name clusterName
   ```

   このコマンドは、クラスターに関する情報を返します。

1. Secrets Store CSI ドライバーのインストールを検証します。

   ```
   kubectl get pods -n kube-system -l app=secrets-store-csi-driver
   ```

   `csi-secrets-store-secrets-store-csi-driver-xxx` のような名前の実行されているポッドが表示されます。

1. ASCP プラグインのインストールを検証します。

------
#### [ YAML installation ]

   ```
   $ kubectl get pods -n kube-system -l app=csi-secrets-store-provider-aws
   ```

   出力例:

   ```
   NAME                                     READY   STATUS    RESTARTS   AGE
   csi-secrets-store-provider-aws-12345      1/1     Running   0          2m
   ```

------
#### [ Helm installation ]

   ```
   $  kubectl get pods -n kube-system -l app=secrets-store-csi-driver-provider-aws
   ```

   出力例:

   ```
   NAME                                              READY   STATUS    RESTARTS   AGE
   secrets-provider-aws-secrets-store-csi-driver-provider-67890       1/1     Running   0          2m
   ```

------

   `Running` 状態のポッドが表示されます。

これらのコマンドを実行した後に、すべてが正しく設定されている場合は、すべてのコンポーネントがエラーなく実行されます。問題が発生した場合は、問題が発生している特定のポッドのログを確認してトラブルシューティングする必要がある場合があります。

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

1. ASCP プロバイダーのログを確認するには、以下を実行します。

   ```
   kubectl logs -n kube-system -l app=csi-secrets-store-provider-aws
   ```

1. `kube-system` 名前空間内のすべてのポッドのステータスを確認します。

   ```
   kubectl -n kube-system get pods
   ```

   ```
   kubectl -n kube-system logs pod/PODID
   ```

   CSI ドライバーと ASCP に関連するすべてのポッドが「Running」状態である必要があります。

1. CSI ドライバーのバージョンを確認します。

   ```
   kubectl get csidriver secrets-store.csi.k8s.io -o yaml
   ```

   このコマンドは、インストールされている CSI ドライバーに関する情報を返します。

## その他のリソース
<a name="additional-resources"></a>

Amazon EKS での ASCP の使用に関する詳細については、次のリソースを参照してください。
+ [Amazon EKS で Pod Identity を使用する](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [GitHub のAWS Secrets Store CSI ドライバー](https://github.com/aws/secrets-store-csi-driver-provider-aws)

# 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
  ```

# サービスアカウント (IRSA) の IAM ロールで AWS シークレットと設定プロバイダー CSI を使用する
<a name="integrating_ascp_irsa"></a>

**Topics**
+ [前提条件](#prerequisites)
+ [アクセス制御を設定する](#integrating_ascp_irsa_access)
+ [マウントするシークレットを特定する](#integrating_ascp_irsa_mount)
+ [トラブルシューティング](#integrating_ascp_irsa_trouble)

## 前提条件
<a name="prerequisites"></a>
+ Amazon EKS クラスター (バージョン 1.17 以降)
+ を介した AWS CLI および Amazon EKS クラスターへのアクセス `kubectl`

## アクセス制御を設定する
<a name="integrating_ascp_irsa_access"></a>

ASCP は Amazon EKS Pod Identity を取得し、IAM ロールと交換します。その IAM ロールの IAM ポリシーでアクセス許可を設定します。ASCP が IAM ロールを引き受けると、認証されたシークレットへのアクセス許可が付与されます。他のコンテナは、IAM ロールに関連付けられていない限り、シークレットにアクセスできません。

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

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

1. クラスター用に IAM OpenID Connect (OIDC) プロバイダーがない場合は作成します。詳細については、「*Amazon EKS ユーザーガイド*」の「[クラスターに IAM OIDC プロバイダーを作成する](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)」を参照してください。

1. [サービスアカウントの IAM ロール](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)を作成して、ポリシーをアタッチします。詳細については、「*Amazon EKS ユーザーガイド*」の「[サービスアカウントの IAM ロールを作成する](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)」を参照してください。

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="integrating_ascp_irsa_mount"></a>

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

### シークレットをファイルとしてマウントする
<a name="mount-secrets"></a>

次の手順は、サンプル YAML ファイル ([ExampleSecretProviderClass.yaml](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/examples/ExampleSecretProviderClass-IRSA.yaml) と [ExampleDeployment.yaml](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/examples/ExampleDeployment-IRSA.yaml)) を使用してシークレットをファイルとしてマウントする方法を示します。

**Amazon EKS でシークレットをマウントするには**

1. `SecretProviderClass` をポッドに適用します。

   ```
   kubectl apply -f ExampleSecretProviderClass.yaml
   ```

1. ポッドをデプロイします。

   ```
   kubectl apply -f ExampleDeployment.yaml
   ```

1. ASCP はファイルをマウントします。

## トラブルシューティング
<a name="integrating_ascp_irsa_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
  ```
+ 

**`SecretProviderClass` CRD がインストールされていることを確認します。**

  ```
  kubectl get crd secretproviderclasses.secrets-store.csi.x-k8s.io
  ```

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

**SecretProviderClass オブジェクトが作成されたことを確認します。**

  ```
  kubectl get secretproviderclass SecretProviderClassName -o yaml
  ```

# AWS シークレットと設定プロバイダーのコード例
<a name="ascp-examples"></a>

## ASCP の認証とアクセスコントロールの例
<a name="ascp-auth-access-examples"></a>

### 例: Amazon EKS Pod Identity サービス (pods.eks.amazonaws.com) がロールを引き受け、セッションにタグを付けることを許可する IAM ポリシー:
<a name="w2aac19c17c18b5b3"></a>

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

****  

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

------

## SecretProviderClass
<a name="ascp-examples-secretproviderclass"></a>

ASCP を使用して Amazon EKS にマウントするシークレットを YAML で記述します。例については「[SecretProviderClass の使用](#ascp-scenarios-secretproviderclass)」を参照してください。

### SecretProviderClass YAML 構造
<a name="w2aac19c17c18c25b5"></a>

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
   name: name
spec:
  provider: aws
  parameters:
    region:
    failoverRegion:
    pathTranslation:
    usePodIdentity:
    preferredAddressType:
    objects:
```

パラメータフィールドには、以下のマウントリクエストの詳細が含まれます。

**リージョン**  
(オプション) シークレット AWS リージョン の 。このフィールドを使用しない場合、ASCP はノード上のアノテーションからリージョンを検索します。この検索では、マウントリクエストにオーバーヘッドが追加されるため、大量のポッドを使用するクラスターでリージョンを指定することをお勧めします。  
同時に `failoverRegion` も指定すると、ASCP は両方のリージョンからシークレットを試行します。どちらかのリージョンが認証の問題などで 4xx エラーを返した場合、ASCP はいずれのシークレットもマウントしません。シークレットが `region` から正常に取得されると、ASCP はそのシークレット値をマウントします。`region` からはシークレットが正常に取得されないものの、`failoverRegion` からは正常に取得された場合、ASCP は取得された方のシークレット値をマウントします。

**failoverRegion**  
(オプション) このフィールドを含めると、ASCP は `region` で定義されているリージョンと、このフィールドで定義されているリージョンからのシークレット取得を試行します。どちらかのリージョンが認証の問題などで 4xx エラーを返した場合、ASCP はいずれのシークレットもマウントしません。シークレットが `region` から正常に取得されると、ASCP はそのシークレット値をマウントします。`region` からはシークレットが正常に取得されないものの、`failoverRegion` からは正常に取得された場合、ASCP は取得された方のシークレット値をマウントします。このフィールドの使用例については、「[マルチリージョンシークレットのフェイルオーバー](#multi-region-failover)」を参照してください。

**pathTranslation**  
(オプション) Amazon EKS のファイル名に、Linux のスラッシュ (/) のようなパス区切り文字が含まれている場合に使用する単一の置換文字。ASCP では、パス区切り文字が含まれているファイルを作成し、マウントすることはできません。代わりに、ASCP はパス区切り文字を別の文字に置き換えます。このフィールドを使用しない場合、置換文字にはアンダースコア (\$1) が使用されます。例えば、`My/Path/Secret` は `My_Path_Secret` としてマウントされます。  
文字の置換を防ぐには、文字列 `False` を入力してください。

**usePodIdentity**  
(オプション) 認証アプローチを決定します。指定しない場合、デフォルトではサービスアカウントの IAM ロール (IRSA) になります。  
+ EKS Pod Identity を使用するには、`"true"`、`"True"`、`"TRUE"`、`"t"`、または `"T"` のいずれかの値を使用します。
+ IRSA を明示的に使用するには、`"false"`、`"False"`、`"FALSE"`、`"f"`、または `"F"`"= のいずれかの値に設定します。

**preferredAddressType**  
(オプション) Pod Identity Agent のエンドポイント通信の優先 IP アドレスタイプを指定します。このフィールドは EKS Pod Identity 機能を使用する場合にのみ適用され、サービスアカウントの IAM ロールを使用する場合は無視されます。値では大文字と小文字は区別されません。次の値を指定できます。  
+ `"ipv4"`、`"IPv4"`、または `"IPV4"` – Pod Identity Agent IPv4 エンドポイントの使用を強制します
+ `"ipv6"`、`"IPv6"`、または `"IPV6"` – Pod Identity Agent IPv6 エンドポイントの使用を強制します
+ 指定なし – 自動エンドポイント選択を使用し、最初に IPv4 エンドポイントを試して、IPv4 が失敗した場合は IPv6 エンドポイントにフォールバックします

**objects**  
マウントするシークレットの YAML 宣言を含む文字列 YAML 複数行の文字列またはパイプ (\$1) 文字を使用することをお勧めします。    
**objectName**  
必須。取得するシークレットまたはパラメータの名前を指定します。Secrets Manager の場合、これは [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html#API_GetSecretValue_RequestParameters](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html#API_GetSecretValue_RequestParameters) パラメータであり、シークレットのわかりやすい名前または完全な ARN のいずれかを使用できます。SSM Parameter Store の場合、これはパラメータの [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html#API_GetParameter_RequestParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html#API_GetParameter_RequestParameters) であり、パラメータの名前または完全な ARN のいずれかを使用できます。  
**objectType**  
`objectName` で Secrets Manager ARN を使用しない場合は必須。`secretsmanager` または `ssmparameter` のいずれかになります。  
**objectAlias**  
(オプション) Amazon EKS ポッド内のシークレットのファイル名。このフィールドを指定しなかった場合、`objectName` がファイル名として表示されます。  
**filePermission**  
(オプション) シークレットをマウントするファイルアクセス許可を指定する 4 桁の 8 進文字列。このフィールドを指定しない場合は、デフォルトで `"0644"` になります。  
**objectVersion**  
(オプション) シークレットのバージョン ID バージョン ID は、シークレットを変更するたびに更新の必要が生じるため、これは推奨されません。デフォルトでは、最新バージョンが使用されます。`failoverRegion` を含めると、このフィールドはプライマリの `objectVersion` になります。  
**objectVersionLabel**  
(オプション) バージョンのエイリアス デフォルトでは、最新バージョン AWSCURRENT になります。詳細については、「[シークレットバージョン](whats-in-a-secret.md#term_version)」を参照してください。`failoverRegion` を含めると、このフィールドはプライマリの `objectVersionLabel` になります。  
**jmesPath**  
(オプション) シークレット内のキーから Amazon EKS にマウントされるファイルへのマッピング このフィールドを使用するには、シークレット値を JSON 形式にする必要があります。このフィールドを使用する場合は、サブフィールド `path` および `objectAlias` を含める必要があります。    
**パス**  
シークレット値の JSON 内のキー/値のペアからのキー フィールドにハイフンが含まれている場合は、一重引用符でエスケープします。例: `path: '"hyphenated-path"'`  
**objectAlias**  
Amazon EKS ポッドにマウントされるファイル名。フィールドにハイフンが含まれている場合は、一重引用符でエスケープします。例: `objectAlias: '"hyphenated-alias"'`  
**filePermission**  
(オプション) シークレットをマウントするファイルアクセス許可を指定する 4 桁の 8 進文字列。このフィールドを指定しない場合、デフォルトで親オブジェクトのファイルアクセス許可になります。  
**failoverObject**  
(オプション) このフィールドを指定した場合、ASCP はプライマリ `objectName` で指定されたシークレットと、`failoverObject`、`objectName` サブフィールドで指定されたシークレットの両方の取得を試行します。どちらかが認証の問題などで 4xx エラーを返した場合、ASCP はいずれのシークレットもマウントしません。シークレットがプライマリ `objectName` から正常に取得されると、ASCP はそのシークレット値のマウントを行います。シークレットが、プライマリ `objectName` からは正常に取得されなかったものの、フェイルオーバー `objectName` からは正常に取得された場合、ASCP はその (取得された) シークレット値をマウントします。このフィールドを含める場合は、フィールド `objectAlias` も含める必要があります。このフィールドの使用例については、「[別のシークレットにフェイルオーバーする](#failover-secret)」を参照してください。  
通常、このフィールドはフェイルオーバーシークレットがレプリカではない場合に使用します。レプリカを指定する際の例については、「[マルチリージョンシークレットのフェイルオーバー](#multi-region-failover)」を参照してください。    
**objectName**  
フェイルオーバーシークレットの名前または完全な ARN ARN を使用する場合、ARN 内のリージョンはフィールド `failoverRegion` と一致する必要があります。  
**objectVersion**  
(オプション) シークレットのバージョン ID プライマリ `objectVersion` と一致している必要があります。バージョン ID は、シークレットを変更するたびに更新の必要が生じるため、これは推奨されません。デフォルトでは、最新バージョンが使用されます。  
**objectVersionLabel**  
(オプション) バージョンのエイリアス デフォルトでは、最新バージョン AWSCURRENT になります。詳細については、「[シークレットバージョン](whats-in-a-secret.md#term_version)」を参照してください。

### Amazon EKS ポッドにシークレットをマウントするための基本的な SecretProviderClass 設定を作成します。
<a name="w2aac19c17c18c25c11"></a>

------
#### [ Pod Identity ]

同じ Amazon EKS クラスターのシークレットを使用する SecretProviderClass:

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-secrets-manager
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "mySecret"
        objectType: "secretsmanager"
    usePodIdentity: "true"
```

------
#### [ IRSA ]

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: deployment-aws-secrets
spec:
  provider: aws
  parameters:
    objects: |
        - objectName: "MySecret"
          objectType: "secretsmanager"
```

------

### SecretProviderClass の使用
<a name="ascp-scenarios-secretproviderclass"></a>

これらの例を使用して、さまざまなシナリオの SecretProviderClass 設定を作成します。

#### 例: 名前または ARN でシークレットをマウントする
<a name="mount-by-name-arn"></a>

この例では、3 つの異なるタイプのシークレットをマウントする方法を示します。
+ 完全な 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:777788889999:secret:MySecret2-d4e5f6"
      - objectName: "MySecret3"
        objectType: "secretsmanager"
      - objectName: "MySecret4"
        objectType: "secretsmanager"
        objectVersionLabel: "AWSCURRENT"
```

#### 例: シークレットからキーと値のペアをマウントする
<a name="mount-key-value-pairs"></a>

この例では、JSON 形式のシークレットから特定のキーと値のペアをマウントする方法を示します。

```
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:777788889999:secret:MySecret-a1b2c3"
        jmesPath: 
            - path: username
              objectAlias: dbusername
            - path: password
              objectAlias: dbpassword
```

#### 例: ファイルアクセス許可でシークレットをマウントする
<a name="mount-by-permission"></a>

この例では、特定のファイルアクセス許可を使用してシークレットをマウントする方法を示します。

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-secrets
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "mySecret"
        objectType: "secretsmanager"
        filePermission: "0600"
        jmesPath: 
            - path: username
              objectAlias: dbusername
              filePermission: "0400"
```

#### 例: フェイルオーバー設定の例
<a name="failover-examples"></a>

これらの例では、シークレットのフェイルオーバーを設定する方法を示します。

##### マルチリージョンシークレットのフェイルオーバー
<a name="multi-region-failover"></a>

この例では、複数のリージョンにレプリケートされたシークレットの自動フェイルオーバーを設定する方法を示します。

```
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"
```

##### 別のシークレットにフェイルオーバーする
<a name="failover-secret"></a>

この例では、(レプリカではない) 別のシークレットへのフェイルオーバーを設定する方法を示します。

```
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:777788889999:secret:MySecret-a1b2c3"
        objectAlias: "MyMountedSecret"
        failoverObject: 
          - objectName: "arn:aws:secretsmanager:us-east-2:777788889999:secret:MyFailoverSecret-d4e5f6"
```

## その他のリソース
<a name="additional-resources"></a>

Amazon EKS での ASCP の使用に関する詳細については、次のリソースを参照してください。
+ [Amazon EKS で Pod Identity を使用する](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [AWS シークレットと設定プロバイダーの使用](https://docs.aws.amazon.com/secretsmanager/latest/userguide/integrating_ascp_csi.html)
+ [GitHub のAWS Secrets Store CSI ドライバー](https://github.com/aws/secrets-store-csi-driver-provider-aws)