説明
Kubernetes の Secret には、トークン、パスワード、証明書などの機密情報が保存されることがあります。EKS は、すべてのクラスターで etcd の保存ディスクを暗号化します。Kubernetes 1.28 以降では、すべての API データが AWS 所有キーによるエンベロープ暗号化で既定で保護されます。そのため、encryption_config がないことだけを根拠に、データが平文で保存されるとは判断できません。
組織でキーポリシーとライフサイクルを直接管理する必要がある場合は、カスタマーマネージド KMS キーを設定してください。この設定は、ノードや EBS ボリュームの暗号化とは別です。
想定される影響
既定のキーだけでは、カスタマーマネージドキーを求める組織の要件を満たせない場合があります。使用中のキーを削除したり、必要な権限を取り消したりすると、クラスターの運用やデータへのアクセスが中断するおそれがあります。暗号化は Kubernetes のアクセス制御の代わりにはなりません。
対処方法
- クラスターのバージョン、実際の暗号化状態、組織のキー管理要件を確認してください。
- カスタマーマネージドキーが必要な場合は、同じリージョンの適切な対称 KMS キーと必要な権限を用意し、
encryption_configにキー ARN とresources = ["secrets"]を指定してください。Kubernetes 1.28 以降では、この一覧に関係なく、すべての API データに既定のエンベロープ暗号化が適用されます。 - 既存のクラスターでは、サポートされる更新手順と Terraform の計画を確認し、キーの無効化や削除を管理してください。
例
暗号化設定だけを示す抜粋です。必要なクラスターロール、VPC、サブネットは別途設定し、キーの変数には実際に使用する KMS キー ARN を指定してください。
既定の暗号化
hcl
resource "aws_eks_cluster" "eks_cluster" {
name = var.cluster_name
}
Kubernetes 1.28 以降では、カスタマーマネージドキーを別途設定しなくても、既定のエンベロープ暗号化が適用されます。
カスタマーマネージドキーの指定
hcl
resource "aws_eks_cluster" "eks_cluster" {
name = var.cluster_name
encryption_config {
resources = ["secrets"]
provider {
key_arn = var.eks_encryption_key_arn
}
}
}
組織で必要なキーを明示しています。キーポリシーとクラスターへのアクセス権限も併せて管理する必要があります。