Amazon Elastic Kubernetes Service でのSecrets Manager のシークレットの使用 - AWS Secrets Manager

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

Amazon Elastic Kubernetes Service でのSecrets Manager のシークレットの使用

シークレットマネージャーのシークレットと、パラメータストアのパラメーターをAmazon EKSポッドを使用する場合は、AWSのシークレットおよび設定プロバイダー (ASCP)Kubernetes シークレットストア CSI ドライバー。ASCP は Amazon Elastic Kubernetes Service (Amazon EKS) 1.17+ で動作します。

ASCP を使用すると、シークレットマネージャーでシークレットを保存および管理し、Amazon EKS で実行されているワークロードを通じてシークレットを取得できます。IAM ロールとポリシーを使用して、シークレットへのアクセスをクラスター内の特定の Kubernetes ポッドに制限できます。ASCP は Pod ID を取得し、IAM ロールの ID を交換します。ASCP は Pod の IAM ロールを引き受け、そのロールに対して承認されたシークレットマネージャーからシークレットを取得できます。

シークレットにSecrets Manager の自動ローテーションを使用する場合は、シークレットストア CSI ドライバーのローテーション調整機能を使用して、Secrets Manager から最新のシークレットを取得することもできます。詳細については、「」を参照してください。マウントされたコンテンツと同期されたKubernetesの秘密の自動回転

ASCP を使用する方法については、「」を参照してください。チュートリアル: Kubernetes ポッドにシークレットを作成してマウントする

ASCP のインストール

ASCP は GitHub で入手できます。秘密-ストア-CSI-プロバイダー-awsリポジトリを作成します。リポジトリには、シークレットを作成してマウントするためのYAMLファイルの例も含まれています。最初に Kubernetes 秘密ストア CSI ドライバーをインストールし、ASCP をインストールします。

ASCP をインストールするには

  1. シークレットストアCSIドライバをインストールするには、次のコマンドを実行します。完全なインストール手順については、」インストールシークレットストアCSIドライバブックで。

    helm repo add secrets-store-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/master/charts helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
  2. ASCP をインストールするには、GitHub リポジトリのデプロイメントディレクトリにある YAML ファイルを使用します。

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml

ステップ 1: アクセスコントロールを設定する

シークレットマネージャーで Kubernes ポッドにシークレットへのアクセス権を付与するには、まず、Pod がアクセスする必要があるシークレットへのアクセスを制限するポリシーを作成します。シークレットマネージャーでシークレットにアクセスするには、ポリシーにsecretsmanager:GetSecretValueおよびsecretsmanager:DescribeSecretアクセス許可。パラメータストアのパラメータにアクセスするには、ポリシーにssm:GetParameters。次に、サービスアカウントの IAM ロールポリシーをアタッチします。

ASCP は Pod ID を取得し、それを IAM ロールと交換します。ASCP は Pod の IAM ロールを引き受け、許可したシークレットへのアクセス権を付与します。他のコンテナは、IAM ロールにも関連付けない限り、シークレットにアクセスできません。

ポリシーの作成の詳細については、「」を参照してください。ID ベースのポリシー

ASCP を使用する方法については、「」を参照してください。チュートリアル: Kubernetes ポッドにシークレットを作成してマウントする

ステップ 2: Amazon EKS で秘密をマウントする

Amazon EKS でシークレットをファイルシステム上のファイルであるかのように表示するには、SecretProviderClassシークレットに関する情報と Kubernetes ポッドでの表示方法を含む YAML ファイル。

-SecretProviderClassは、参照する Kubernetes ポッドと同じ名前空間にある必要があります。

ASCP を使用する方法については、「」を参照してください。チュートリアル: Kubernetes ポッドにシークレットを作成してマウントする

SecretProviderClass

-SecretProviderClassYAML は以下の形式になります。

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: name: <NAME> spec: provider: aws parameters:
パラメータ

マウントリクエストの詳細が含まれます。

objects

マウントするシークレットのYAML宣言を含む文字列。次に示すように、YAML 複数行の文字列またはパイプ (|) 文字を使用することをお勧めします。Example

objectName

取得するシークレットまたはパラメータの名前。指定しない限り、これは Kubernetes ポッド内のシークレットのファイル名になります。objectAlias

  • Secrets Manager の場合、シークレットのフレンドリーネームまたは完全な ARN のいずれかです。ARN を使用する場合は、を省略できます。objectType

  • パラメータストアの場合、Name、完全な ARN ではなく、パラメータの

objectType

Secrets Manager の ARN をobjectNamesecretsmanager または ssmparameter とすることができます。

オブジェクトエイリアス

(オプション)Kubernetes ポッド内のシークレットのファイル名。このフィールドを指定しなかった場合、objectNameがファイル名として表示されます。

ObjectVersion

(オプション)シークレットのバージョン ID またはパラメータのバージョン番号。このフィールドは、シークレットを更新するたびに更新する必要があるため、使用しないことをお勧めします。デフォルトでは、最新バージョンが使用されます。パラメータストアパラメータの場合は、objectVersionまたはobjectVersionLabel(両方ではありません).

オブジェクトバージョンラベル

(オプション) バージョンのエイリアス。デフォルトは、最新バージョンである AWSCURRENT です。詳細については、「ステージングラベル」を参照してください。パラメータストアパラメータの場合は、objectVersionまたはobjectVersionLabel(両方ではありません).

リージョン

(オプション) AWS リージョン シークレットまたはパラメータの。このフィールドを使用しない場合、ASCP はノード上のアノテーションからリージョンを検索します。このルックアップでは、マウントリクエストにオーバーヘッドが追加されるため、大量の Pod を使用するクラスターには Region を指定することをお勧めします。

パス変換

(オプション)ファイル名(objectNameまたはobjectAlias) には、Linux のスラッシュ (/) などのパス区切り文字が含まれています。シークレット名またはパラメータ名にパス区切り文字が含まれている場合、ASCP はその名前でマウントされたファイルを作成できません。代わりに、パス区切り文字をこのフィールドに入力することで、別の文字に置き換えることができます。このフィールドを使用しない場合、デフォルトはアンダースコア (_) になります。たとえば、My/Path/SecretとしてマウントするMy_Path_Secret

文字の置換を防ぐには、文字列False

Example

以下の設定例で、SecretProviderClass次の 4 つのリソースを使用します。

  1. 完全な ARN によって指定されたシークレット。

  2. フレンドリ名で指定されたシークレット。

  3. シークレットの特定のバージョン。

  4. パラメータストアパラメータ。

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-1:[111122223333]:secret:MySecret-00AABB" - objectName: "MySecret2" objectType: "secretsmanager" - objectName: "MySecret3" objectType: "secretsmanager" objectVersionLabel: "AWSCURRENT" - objectName: "MyConfigValue" objectType: "ssmparameter"