AWS Secrets and Configuration Provider のコード例
ASCP の認証とアクセスコントロールの例
例: Amazon EKS Pod Identity サービス (pods.eks.amazonaws.com) がロールを引き受け、セッションにタグを付けることを許可する IAM ポリシー:
SecretProviderClass
ASCP を使用して Amazon EKS にマウントするシークレットを YAML で記述します。例については「SecretProviderClass の使用」を参照してください。
SecretProviderClass YAML 構造
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name:namespec: provider: aws parameters: region: failoverRegion: pathTranslation: usePodIdentity: preferredAddressType: objects:
パラメータフィールドには、以下のマウントリクエストの詳細が含まれます。
- region
-
(オプション) シークレットの AWS リージョン このフィールドを使用しない場合、ASCP はノード上の注釈からリージョンを検索します。この検索では、マウントリクエストにオーバーヘッドが追加されるため、大量のポッドを使用するクラスターでリージョンを指定することをお勧めします。
同時に
failoverRegionも指定すると、ASCP は両方のリージョンからシークレットを試行します。どちらかのリージョンが認証の問題などで 4xx エラーを返した場合、ASCP はいずれのシークレットもマウントしません。シークレットがregionから正常に取得されると、ASCP はそのシークレット値をマウントします。regionからはシークレットが正常に取得されないものの、failoverRegionからは正常に取得された場合、ASCP は取得された方のシークレット値をマウントします。 - failoverRegion
-
(オプション) このフィールドを含めると、ASCP は
regionで定義されているリージョンと、このフィールドで定義されているリージョンからのシークレット取得を試行します。どちらかのリージョンが認証の問題などで 4xx エラーを返した場合、ASCP はいずれのシークレットもマウントしません。シークレットがregionから正常に取得されると、ASCP はそのシークレット値をマウントします。regionからはシークレットが正常に取得されないものの、failoverRegionからは正常に取得された場合、ASCP は取得された方のシークレット値をマウントします。このフィールドの使用例については、「マルチリージョンシークレットのフェイルオーバー」を参照してください。 - pathTranslation
-
(オプション) Amazon EKS のファイル名に、Linux のスラッシュ (/) のようなパス区切り文字が含まれている場合に使用する単一の置換文字。ASCP では、パス区切り文字が含まれているファイルを作成し、マウントすることはできません。代わりに、ASCP はパス区切り文字を別の文字に置き換えます。このフィールドを使用しない場合、置換文字にはアンダースコア (_) が使用されます。例えば、
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 複数行の文字列またはパイプ (|) 文字を使用することをお勧めします。
- objectName
-
必須。取得するシークレットまたはパラメータの名前を指定します。Secrets Manager の場合、これは
SecretIdパラメータであり、シークレットのわかりやすい名前または完全な ARN のいずれかを使用できます。SSM Parameter Store の場合、これはパラメータのNameであり、パラメータの名前または完全な ARN のいずれかを使用できます。 - objectType
-
objectNameで Secrets Manager ARN を使用しない場合は必須。secretsmanagerまたはssmparameterのいずれかになります。 - objectAlias
-
(オプション) Amazon EKS ポッド内のシークレットのファイル名。このフィールドを指定しなかった場合、
objectNameがファイル名として表示されます。 - filePermission
-
(オプション) シークレットをマウントするファイルアクセス許可を指定する 4 桁の 8 進文字列。このフィールドを指定しない場合は、デフォルトで
"0644"になります。 - objectVersion
-
(オプション) シークレットのバージョン ID バージョン ID は、シークレットを変更するたびに更新の必要が生じるため、これは推奨されません。デフォルトでは、最新バージョンが使用されます。
failoverRegionを含めると、このフィールドはプライマリのobjectVersionになります。 - objectVersionLabel
-
(オプション) バージョンのエイリアス デフォルトでは、最新バージョン AWSCURRENT になります。詳細については、「シークレットバージョン」を参照してください。
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も含める必要があります。このフィールドの使用例については、「別のシークレットにフェイルオーバーする」を参照してください。通常、このフィールドはフェイルオーバーシークレットがレプリカではない場合に使用します。レプリカを指定する際の例については、「マルチリージョンシークレットのフェイルオーバー」を参照してください。
- objectName
-
フェイルオーバーシークレットの名前または完全な ARN ARN を使用する場合、ARN 内のリージョンはフィールド
failoverRegionと一致する必要があります。 - objectVersion
-
(オプション) シークレットのバージョン ID プライマリ
objectVersionと一致している必要があります。バージョン ID は、シークレットを変更するたびに更新の必要が生じるため、これは推奨されません。デフォルトでは、最新バージョンが使用されます。 - objectVersionLabel
-
(オプション) バージョンのエイリアス デフォルトでは、最新バージョン AWSCURRENT になります。詳細については、「シークレットバージョン」を参照してください。
Amazon EKS ポッドにシークレットをマウントするための基本的な SecretProviderClass 設定を作成します。
SecretProviderClass の使用
これらの例を使用して、さまざまなシナリオの SecretProviderClass 設定を作成します。
例: 名前または ARN でシークレットをマウントする
この例では、3 つの異なるタイプのシークレットをマウントする方法を示します。
-
完全な ARN によって指定されたシークレット
-
名前で指定されたシークレット
-
シークレットの特定のバージョン
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name:aws-secretsspec: 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"
例: シークレットからキーと値のペアをマウントする
この例では、JSON 形式のシークレットから特定のキーと値のペアをマウントする方法を示します。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name:aws-secretsspec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:777788889999:secret:MySecret-a1b2c3" jmesPath: - path: username objectAlias: dbusername - path: password objectAlias: dbpassword
例: ファイルアクセス許可でシークレットをマウントする
この例では、特定のファイルアクセス許可を使用してシークレットをマウントする方法を示します。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name:aws-secretsspec: provider: aws parameters: objects: | - objectName: "mySecret" objectType: "secretsmanager" filePermission: "0600" jmesPath: - path: username objectAlias: dbusername filePermission: "0400"
例: フェイルオーバー設定の例
これらの例では、シークレットのフェイルオーバーを設定する方法を示します。
マルチリージョンシークレットのフェイルオーバー
この例では、複数のリージョンにレプリケートされたシークレットの自動フェイルオーバーを設定する方法を示します。
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name:aws-secretsspec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "MySecret"
別のシークレットにフェイルオーバーする
この例では、(レプリカではない) 別のシークレットへのフェイルオーバーを設定する方法を示します。
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"
その他のリソース
Amazon EKS での ASCP の使用に関する詳細については、次のリソースを参照してください。