EKS の暗号化キー設定の確認

EKS の既定の暗号化と、カスタマーマネージド KMS キーの要件を区別してください。

説明

EKS は、すべてのクラスターで etcd データを保存するディスクを暗号化します。Kubernetes 1.28 以降では、AWS 所有のキーによるエンベロープ暗号化も、すべての Kubernetes API データに既定で適用されます。EncryptionConfig がないだけで、クラスターのデータが平文で保存されるとは判断できません。

キーのポリシーとライフサイクルを自分で管理する必要がある場合は、カスタマーマネージド KMS キーを設定します。ノードや EBS ボリューム内のデータの暗号化は別の設定です。

想定される影響

カスタマーマネージドキーが必要な環境では、既定のキーだけでは組織のキー管理要件を満たせない場合があります。一方、使用中のキーを削除したり必要な権限を取り消したりすると、クラスターの稼働とデータへのアクセスが停止するおそれがあります。暗号化は Kubernetes のアクセス制御の代わりにはなりません。

対処方法

クラスターのバージョンと実際の暗号化状態を確認してください。カスタマーマネージドキーが必要な場合は、同じリージョンの適切な対称 KMS キーと権限を用意し、EncryptionConfig に Provider.KeyArn と Resources: [secrets] を指定してください。Kubernetes 1.28 以降では、このリソース一覧にかかわらずすべての API データがエンベロープ暗号化されます。既存クラスターでは対応する更新手順と変更セットを確認し、キーの無効化・削除を制限してください。

例

現在サポートされている Kubernetes バージョン、クラスターロール、セキュリティグループ、異なるアベイラビリティーゾーンのサブネットを指定します。最初の例も Kubernetes 1.28 以降では既定のエンベロープ暗号化を使用します。二つ目は、組織の要件に応じてカスタマーマネージドキーを指定する例です。

AWS 所有のキーを使用

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  KubernetesVersion:
    Type: String
  ClusterRoleArn:
    Type: String
  ClusterSecurityGroups:
    Type: List<AWS::EC2::SecurityGroup::Id>
  ClusterSubnets:
    Type: List<AWS::EC2::Subnet::Id>
Resources:
  MyEKSClusterA:
    Type: AWS::EKS::Cluster
    Properties:
      Name: dev
      Version: !Ref KubernetesVersion
      RoleArn: !Ref ClusterRoleArn
      ResourcesVpcConfig:
        SecurityGroupIds: !Ref ClusterSecurityGroups
        SubnetIds: !Ref ClusterSubnets

カスタマーマネージドキーを指定

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  EncryptionKeyArn:
    Type: String
  KubernetesVersion:
    Type: String
  ClusterRoleArn:
    Type: String
  ClusterSecurityGroups:
    Type: List<AWS::EC2::SecurityGroup::Id>
  ClusterSubnets:
    Type: List<AWS::EC2::Subnet::Id>
Resources:
  MyEKSClusterA:
    Type: AWS::EKS::Cluster
    Properties:
      Name: dev
      Version: !Ref KubernetesVersion
      RoleArn: !Ref ClusterRoleArn
      ResourcesVpcConfig:
        SecurityGroupIds: !Ref ClusterSecurityGroups
        SubnetIds: !Ref ClusterSubnets
      EncryptionConfig:
        - Provider:
            KeyArn: !Ref EncryptionKeyArn
          Resources:
            - secrets

参考資料