EKS Auto Mode에서 고객 관리형 KMS 키로 EBS 볼륨 암호화 활성화하기

EKS Auto Mode에서 고객 관리형 KMS 키로 EBS 볼륨 암호화 활성화하기

EKS Auto Mode 인스턴스의 임시 루트 볼륨을 고객 관리형 KMS 키로 암호화할 수 있어요. 이 토픽에서는 EKS Auto Mode로 Amazon EBS 암호화에 고객 관리형 키를 지정할 때 필요한 키 정책을 설정하는 방법을 다뤄요.

출처: 문서

본문

EKS Auto Mode 인스턴스의 임시 루트 볼륨을 고객 관리형 KMS 키로 암호화할 수 있어요.

Amazon EKS Auto Mode는 Kubernetes 클러스터의 암호화된 EBS 볼륨을 관리할 때 다른 AWS 서비스에 권한을 위임하기 위해 서비스 연결 역할(service-linked roles)을 사용해요. 이 토픽에서는 EKS Auto Mode로 Amazon EBS 암호화에 고객 관리형 키를 지정할 때 필요한 키 정책을 설정하는 방법을 설명해요.

고려 사항 (Considerations):

  • EKS Auto Mode는 기본 AWS 관리형 키를 사용해 계정의 암호화된 볼륨을 보호할 때 추가 권한이 필요 없어요.
  • 이 토픽은 임시 볼륨, 즉 EC2 인스턴스의 루트 볼륨 암호화를 다뤄요. 워크로드에 사용되는 데이터 볼륨의 암호화는 Create a storage class 문서를 참고해 주세요.

개요 (Overview)

EKS Auto Mode가 인스턴스를 시작할 때 Amazon EBS 루트 볼륨 암호화에 사용할 수 있는 AWS KMS 키는 다음과 같아요:

  • AWS 관리형 키 (AWS managed key) — Amazon EBS가 생성·소유·관리하는 계정 내 암호화 키예요. 새 계정의 기본 암호화 키이기도 해요.
  • 고객 관리형 키 (Customer managed key) — 직접 생성·소유·관리하는 사용자 지정 암호화 키예요.

참고: 키는 대칭형(symmetric)이어야 해요. Amazon EBS는 비대칭 고객 관리형 키를 지원하지 않아요.

1단계: 키 정책 구성하기 (Configure the key policy)

고객 관리형 키로 암호화된 Amazon EBS 볼륨을 사용해 EKS Auto Mode가 인스턴스를 시작할 수 있도록, KMS 키에는 다음을 허용하는 키 정책이 있어야 해요.

키 정책을 다음과 같은 구조로 구성해 주세요:

참고: 이 정책에는 EKS Auto Mode에 대한 권한만 포함돼 있어요. 다른 ID가 키를 사용하거나 grant를 관리해야 한다면 키 정책에 추가 권한이 필요할 수 있어요.

{
    "Version":"2012-10-17",
    "Id": "MyKeyPolicy",
    "Statement": [
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:role/ClusterServiceRole"
                ]
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:role/ClusterServiceRole"
                ]
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}

123456789012는 실제 AWS 계정 ID로 바꿔 주세요.

키 정책을 구성할 때 다음을 기억해요:

  • ClusterServiceRole이 암호화 작업에 KMS 키를 사용할 수 있는 필요한 IAM 권한을 가져야 해요.
  • kms:GrantIsForAWSResource 조건은 grant가 AWS 서비스에 대해서만 생성될 수 있도록 보장해요.

2단계: 고객 관리형 키로 NodeClass 구성하기 (Configure NodeClass with your customer managed key)

키 정책을 구성한 다음, EKS Auto Mode NodeClass 구성에서 KMS 키를 참조해 주세요:

apiVersion: eks.amazonaws.com/v1
kind: NodeClass
metadata:
  name: my-node-class
spec:
  # Insert existing configuration

  ephemeralStorage:
    size: "80Gi"  # Range: 1-59000Gi or 1-64000G or 1-58Ti or 1-64T
    iops: 3000    # Range: 3000-16000
    throughput: 125  # Range: 125-1000

    # KMS key for encryption
    kmsKeyID: "arn:aws:kms:<region>:<account-id>:key/<key-id>"

플레이스홀더 값을 실제 값으로 바꿔 주세요:

  • <region> — AWS 리전
  • <account-id> — AWS 계정 ID
  • <key-id> — KMS 키 ID

KMS 키는 다음 형식 중 하나로 지정할 수 있어요:

  • KMS Key ID: 1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d
  • KMS Key ARN: arn:aws:kms:us-west-2:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d
  • Key Alias Name: alias/eks-auto-mode-key
  • Key Alias ARN: arn:aws:kms:us-west-2:111122223333:alias/eks-auto-mode-key

kubectl로 NodeClass 구성을 적용해요:

kubectl apply -f nodeclass.yaml
  • Amazon EKS의 Create a Node Class for Amazon EKS
  • AWS Key Management Service 개발자 안내서:
    • 키 정책에서 AWS 서비스에 대한 권한 (Permissions for AWS services in key policies)
    • 키 정책 변경 (Change a key policy)
    • AWS KMS의 Grants (Grants in AWS KMS)

더 알아보기 (Learn more)