ack-secret-manager Kubernetes プラグインをインストールすると、Key Management Service (KMS) から最新のシークレット値を定期的に取得し、Container Service for Kubernetes (ACK) クラスターにキャッシュするよう設定できます。これにより、KMS の動的シークレットをネイティブ Kubernetes シークレットのように使用でき、アプリケーションの開発およびビルドプロセスにおける機密データの漏洩を防ぐことができます。
手順
ack-secret-managerプラグインをインストールします。Container Service for Kubernetes (ACK) クラスターの場合
ACK コンソールにログインし、[Marketplace] で ack-secret-manager を見つけます。
ack-secret-manager ページで、右上の ワンクリックデプロイメント をクリックします。
パネルで、クラスター、名前空間、リリース名 のデフォルト値を保持します。その後、次へ をクリックします。
パラメーター ページでパラメーターを設定し、OK をクリックします。
パラメーター
説明
例
command.backend外部シークレット管理システムのバックエンド。現在、Alibaba Cloud KMS のみがサポートされています。このパラメーターを
alicloud-kmsに設定します。alicloud-kmscommand.regionシークレットを取得するリージョン。
cn-hangzhoucommand.disablePollingKMS バックエンドからの最新のシークレット値の自動同期を無効にするかどうかを指定します。同期を無効にするには、この値を
trueに設定します。デフォルト値:false。falsecommand.pollingIntervalKMS バックエンドからのシークレットの同期間隔。
120sデプロイが成功すると、クラスターの
ack-secret-managerページにリダイレクトされます。[Resources] ページで、次の 6 つの Kubernetes リソースが作成されたことを確認します:ack-secret-manager(ServiceAccount)、externalsecrets.alibabacloud.com(CustomResourceDefinition)、ack-secret-manager(ClusterRole)、ack-secret-manager(ClusterRoleBinding)、ack-secret-manager-auth(ClusterRoleBinding)、およびack-secret-manager(Deployment)。
自己管理型 Kubernetes クラスターの場合は、ack-secret-manager にアクセスしてプラグインをインストールします。
KMS でシークレットを作成します。
すべてのシークレットタイプがサポートされています。詳細については、「汎用シークレットの管理と使用」、「RAMシークレットの管理と使用」、「ApsaraDB RDSシークレットの管理と使用」、または「ECSシークレットの管理と使用」をご参照ください。
ack-secret-managerプラグインに KMS へのアクセス権を付与します。共有 KMS を使用したアクセス
この方法は、KMS インスタンス内のシークレットと、KMS インスタンスにないシークレット (インスタンスを必要としなかった以前のバージョンの KMS で作成されたものを含む) に適しています。
Resource Access Management (RAM) で、カスタムポリシーを作成して KMS シークレットへのアクセス権を付与します。次のコードはポリシーの例です。ビジネス要件に基づいてポリシーをカスタマイズできます。詳細については、「Key Management Serviceのカスタムポリシー」をご参照ください。
{ "Action": [ "kms:GetSecretValue", "kms:Decrypt" ], "Resource": [ "*" ], "Effect": "Allow" }Container Service のワークロードまたは Pod に権限を付与します。
方法
説明
クラスターのワーカーロールに権限を追加
ACK コンソールにログインします。左側メニューで、クラスター を選択します。
対象のクラスターを見つけ、アクション 列の 詳細 をクリックします。
[Cluster Resources] タブで、
KubernetesWorkerRole-******という名前のワーカーロールをクリックします。これにより RAM コンソールにリダイレクトされ、そこでカスタムポリシーをアタッチできます。
サービスアカウント用 RAM ロール (RRSA) を使用した Pod レベルの認可
指定されたサービスアカウント用の RAM ロールを作成し、RAM ロールの信頼ポリシーを設定してから、カスタムポリシーをアタッチします。
KMS インスタンスエンドポイント (
{kmsInstanceId}.cryptoservice.kms.aliyuncs.com) を使用したアクセスこの方法は、KMS インスタンス内のシークレットにのみ適用されます。Virtual Private Cloud (VPC) 内で KMS へのネットワークアクセスを制限したい場合は、このアプローチを推奨します。詳細については、「アプリケーションアクセスポイントの作成」をご参照ください。
説明KMS インスタンスエンドポイントを使用する前に、ワークロードまたは Pod の VPC を KMS インスタンスにバインドしてください。詳細については、「同じリージョン内の複数のVPCからKMSインスタンスにアクセスする」をご参照ください。
ack-secret-managerプラグインで、protocol(KMS へのアクセスプロトコル)、endpoint(アクセスポイント)、client key(認証方法)、SecretName(シークレット名) などのパラメーターを設定します。詳細については、ack-secret-manager のドキュメントをご参照ください。
次のステップ
KMS から取得してクラスターにキャッシュされたシークレットをさらに保護するには、Kubernetes シークレットの保管時の暗号化を有効にします。詳細については、「KMS を使用した保管時の Kubernetes シークレットの暗号化」をご参照ください。
この暗号化機能は、システムシークレットなど、Kubernetes クラスター内の他の静的シークレットも保護します。