既存のクラスター上でシークレット暗号化を有効にする
シークレット暗号化 を有効にすると、Kubernetes シークレットは選択した AWS KMS key を使用して暗号化されます。KMS キーは、次の条件を満たす必要があります。
詳細については、「AWS Key Management Service デベロッパーガイド」の「他のアカウントの 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
-
https://console.aws.amazon.com/eks/home#/clusters で 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
"
既存のクラスターでシークレット暗号化を有効にし、使用する KMS キーが削除されている場合は、このクラスターを復旧する手段はありません。KMS キーを削除すると、クラスターは永続的にパフォーマンスが低下した状態になります。詳細については、「AWSKMS キーを削除する」を参照してください。
create-key
コマンドでは、デフォルトで対称暗号化 KMS キーが作成されます。この際には、アカウントのルート管理者に AWS KMS アクションとリソースへのアクセスを許可する、キーポリシーが使用されます。アクセス許可の範囲を絞り込む場合は、create-cluster
API を呼び出すプリンシパルのポリシーで、kms:DescribeKey
および kms:CreateGrant
アクションが許可されていることを確認します。
KMS エンベロープ暗号化を使用するクラスターの場合、kms:CreateGrant
アクセス許可が必要です。条件 kms:GrantIsForAWSResource
は、CreateCluster アクションでサポートされていないため、CreateCluster を実行するユーザーの kms:CreateGrant
アクセス許可を制御する KMS ポリシーで使用しないでください。