

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

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