기존 클러스터에서 AWS KMS를 사용하여 Kubernetes 비밀 암호화 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.

기존 클러스터에서 AWS KMS를 사용하여 Kubernetes 비밀 암호화

비밀 암호화를 사용 설정하는 경우 Kubernetes 비밀은 선택한 AWS KMS key 키를 사용하여 암호화됩니다. KMS 키는 다음 조건을 충족해야 합니다.

  • 대칭

  • 데이터 암호화 및 해독 가능

  • 클러스터와 같은 AWS 리전에 생성됨

  • KMS 키가 다른 계정에서 생성된 경우 IAM 보안 주체는 KMS 키에 액세스할 수 있어야 합니다.

자세한 내용은 AWS Key Management Service 개발자 안내서다른 계정의 IAM 보안 주체가 KMS 키를 사용하도록 허용을 참조하세요.

주의

비밀 암호화를 사용 설정한 후에는 사용 중지할 수 없습니다. 이 작업은 되돌릴 수 없습니다.

eksctl

다음 두 가지 방법으로 암호화를 활성화할 수 있습니다.

  • 단일 명령으로 클러스터에 암호화를 추가합니다.

    비밀을 자동으로 다시 암호화하려면 다음 명령을 실행합니다.

    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
  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. KMS 암호화를 추가하려는 클러스터를 선택합니다.

  3. 개요(Overview) 탭을 선택합니다(기본적으로 선택되어 있습니다).

  4. 아래로 스크롤하여 암호 암호화(Secrets encryption) 단원으로 이동하고 활성화(Enable)를 선택합니다.

  5. 드롭다운 목록에서 키를 선택하고 활성화(Enable) 버튼을 선택합니다. 나열된 키가 없으면 먼저 키를 생성해야 합니다. 자세한 내용은 키 생성을 참조하세요.

  6. 확인(Confirm) 버튼을 선택하고 선택한 키를 사용합니다.

AWS CLI
  1. 다음 AWS CLI 명령을 사용하여 비밀 암호화(secrets encryption) 구성을 클러스터와 연결합니다. 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": []   } }
  2. 다음 명령을 사용하여 암호화 업데이트의 상태를 모니터링할 수 있습니다. 이전 출력에서 반환된 특정 cluster nameupdate 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": []   } }
  3. 클러스터에서 암호화가 활성화되었는지 확인하려면 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 키를 삭제하면 클러스터가 영구적으로 성능 저하 상태가 됩니다. 자세한 내용은 AWS KMS 키를 참조하세요.

참고

기본적으로 create-key 명령은 AWS KMS 작업 및 리소스에 대한 액세스 권한을 계정 루트 관리자에게 부여하는 키 정책으로 대칭 암호화 KMS 키를 생성합니다. 권한을 축소하려면 create-cluster API를 호출할 보안 주체의 정책에서 kms:DescribeKeykms:CreateGrant 작업이 허용되는지 확인합니다.

KMS 봉투 암호화를 사용하는 클러스터의 경우 kms:CreateGrant 권한이 필요합니다. 조건 kms:GrantIsForAWSResource는 CreateCluster 작업에 대해 지원되지 않으며, CreateCluster를 수행하는 사용자에 대한 kms:CreateGrant 권한을 제어하기 위해 KMS 정책을 사용해서는 안 됩니다.