既存のクラスターで AWS KMS を使用して Kubernetes シークレットを暗号化する
シークレット暗号化
-
対称
-
データの暗号化と復号が可能
-
クラスターと同じ AWS リージョンに作成
-
KMS キーが別のアカウントで作成された場合、IAM プリンシパルには、その KMS キーへのアクセス権が必要となります。
詳細については、「AWS キーマネジメントサービス開発者ガイド」の「他のアカウントの IAM プリンシパルが KMS キーを使用することを許可する」を参照してください。
警告
一度有効化したシークレット暗号化は無効化できません。このアクションを元に戻すことはできません。
- eksctl
-
暗号化は次の 2 つの方法のいずれかで有効にできます。
-
1 つのコマンドでクラスターに暗号化を追加します。
シークレットを自動的に再暗号化するには、次のコマンドを実行します。
eksctl utils enable-secrets-encryption \ --cluster my-cluster \ --key-arn arn:aws:kms:region-code:account:key/key
シークレットの自動的な再暗号化をオプトアウトするには、次のコマンドを実行します。
eksctl utils enable-secrets-encryption --cluster my-cluster \ --key-arn arn:aws:kms:region-code:account:key/key \ --encrypt-existing-secrets=false
-
kms-cluster.yaml
ファイルを使用してクラスターに暗号化を追加します。apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code secretsEncryption: keyARN: arn:aws:kms:region-code:account:key/key
シークレットに自動的な再暗号化をさせるには、次のコマンドを実行します。
eksctl utils enable-secrets-encryption -f kms-cluster.yaml
シークレットの自動的な再暗号化をオプトアウトするには、次のコマンドを実行します。
eksctl utils enable-secrets-encryption -f kms-cluster.yaml --encrypt-existing-secrets=false
-
- AWS Management Console
-
-
Amazon EKS コンソール
を開きます。 -
KMS 暗号化を追加するクラスターを選択します。
-
[Overview] (概要) タブを選択します (これはデフォルトで選択されています)。
-
[Secrets encryption] (シークレットの暗号化) セクションまでスクロールダウンし、[Enable] (有効化) ボタンを選択します。
-
ドロップダウンリストからキーを選択し、[Enable] (有効化) ボタンを選択します。キーが一覧表示されていない場合は、最初にキーを作成する必要があります。詳細については、「キーの作成」を参照してください。
-
[Confirm] (確認) ボタンを選択して、指定したキーを使用します。
-
- AWS CLI
-
-
次の AWS CLI コマンドを使用して、シークレット暗号化
設定をクラスターに関連付けます。 example values
は実際に使用する値に置き換えます。aws eks associate-encryption-config \ --cluster-name my-cluster \ --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"arn:aws:kms:region-code:account:key/key"}}]'
出力例は次のとおりです。
{ "update": { "id": "3141b835-8103-423a-8e68-12c2521ffa4d", "status": "InProgress", "type": "AssociateEncryptionConfig", "params": [ { "type": "EncryptionConfig", "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]" } ], "createdAt": 1613754188.734, "errors": [] } }
-
次のコマンドを使用すると、暗号化更新のステータスをモニタリングできます。前の出力で返された特定の
cluster name
とupdate ID
を使用します。Successful
ステータスが表示されると、更新は完了です。aws eks describe-update \ --region region-code \ --name my-cluster \ --update-id 3141b835-8103-423a-8e68-12c2521ffa4d
出力例は次のとおりです。
{ "update": { "id": "3141b835-8103-423a-8e68-12c2521ffa4d", "status": "Successful", "type": "AssociateEncryptionConfig", "params": [ { "type": "EncryptionConfig", "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]" } ], "createdAt": 1613754188.734>, "errors": [] } }
-
クラスターで暗号化が有効になっていることを確認するには、
describe-cluster
コマンドを実行します。レスポンスの内容は、文字列EncryptionConfig
です。aws eks describe-cluster --region region-code --name my-cluster
-
クラスターで暗号化を有効にしたら、既存のすべてのシークレットを新しいキーで暗号化する必要があります。
注記
eksctl
を使用する場合、シークレットを自動的に再暗号化することをオプトアウトした場合にのみ、次のコマンドを実行する必要があります。
kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - kms-encryption-timestamp="time value"
警告
既存のクラスターでシークレット暗号化
注記
create-key
コマンドでは、デフォルトで対称暗号化 KMS キーが作成されます。この際には、アカウントのルート管理者に AWS KMS アクションとリソースへのアクセスを許可する、キーポリシーが使用されます。アクセス許可の範囲を絞り込む場合は、create-cluster
API を呼び出すプリンシパルのポリシーで、kms:DescribeKey
および kms:CreateGrant
アクションが許可されていることを確認します。
KMS エンベロープ暗号化を使用するクラスターの場合、kms:CreateGrant
アクセス許可が必要です。条件 kms:GrantIsForAWSResource
は、CreateCluster アクションでサポートされていないため、CreateCluster を実行するユーザーの kms:CreateGrant
アクセス許可を制御する KMS ポリシーで使用しないでください。