

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon EKS의 암호화 모범 사례
<a name="eks"></a>

[Amazon Elastic Kubernetes Service(Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)를 사용하면 자체 Kubernetes 컨트롤 플레인 또는 노드를 설치하거나 유지 관리할 필요 AWS 없이에서 Kubernetes를 실행할 수 있습니다. Kubernetes에서 **시크릿은 사용자 인증서, 암호, API 키 등의 민감한 정보를 관리하는 데 도움이 됩니다. 기본적으로 이러한 시크릿은 [etcd](https://etcd.io/docs/v3.5/faq/)라는 API 서버의 기본 데이터 스토어에 암호화되지 않은 상태로 저장됩니다. Amazon EKS에서 `etcd` 노드에 대한 Amazon Elastic Block Store(Amazon EBS) 볼륨은 [Amazon EBS 암호화](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)로 암호화됩니다. API 액세스 또는 `etcd`에 대한 액세스 권한이 있는 모든 사용자는 시크릿을 검색하거나 수정할 수 있습니다. 또한 네임스페이스에 포드를 생성할 권한이 있는 사람은 누구나 해당 액세스 권한을 사용하여 네임스페이스에 있는 모든 시크릿을 읽을 수 있습니다. 관리 AWS KMS keys형 키 또는 고객 AWS 관리형 키를 사용하여 Amazon EKS에서 저장 시 이러한 보안 암호를 암호화할 수 있습니다. `etcd`를 사용하는 또 다른 접근 방식은 [AWS Secrets and Config Provider(ASCP)](https://github.com/aws/secrets-store-csi-driver-provider-aws)(GitHub 리포지토리)를 사용하는 것입니다. ASCP는 IAM 및 리소스 기반 정책과 통합되어 클러스터 내 특정 Kubernetes 포드 내에서만 시크릿에 대한 액세스를 제한합니다.

Kubernetes에서 다음 AWS 스토리지 서비스를 사용할 수 있습니다.
+ Amazon EBS의 경우 트리 내 스토리지 드라이버 또는 [Amazon EBS CSI 드라이버](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html)를 사용할 수 있습니다. 둘 다 볼륨 암호화와 고객 관리형 키 제공을 위한 파라미터를 포함합니다.
+ Amazon Elastic File System(Amazon EFS)의 경우 동적 및 정적 프로비저닝을 모두 지원하는 [Amazon EFS CSI 드라이버](https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html)를 사용할 수 있습니다.

이 서비스에 대해 다음 암호화 모범 사례를 고려하세요.
+ 기본적으로 암호화되지 않은 시크릿 객체를 저장하는 `etcd`를 사용하는 경우 시크릿을 보호하려면 다음을 수행하세요.
  + [Encrypt secret data at rest](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/)(쿠버네티스 문서)
  + Kubernetes 보안 암호의 봉투 암호화 AWS KMS 에 사용합니다. 이렇게 하면 고유한 데이터 키로 보안 암호를 암호화할 수 있습니다. 키 암호화 키를 사용하여 AWS KMS 데이터 키를 암호화할 수 있습니다. 반복 일정에 따라 키 암호화 키를 자동으로 교체할 수 있습니다. Kubernetes용 AWS KMS 플러그인을 사용하면 모든 Kubernetes 보안 암호가 사이퍼텍스`etcd`트에 저장됩니다. Kubernetes API 서버에서만 암호를 해독할 수 있습니다. 자세한 내용은 [심층 방어를 위한 Amazon EKS 암호화 공급자 지원 사용](https://aws.amazon.com/blogs/containers/using-eks-encryption-provider-support-for-defense-in-depth/) 및 [기존 클러스터 AWS KMS 에서를 사용하여 Kubernetes 보안 암호 암호화를 참조하세요](https://docs.aws.amazon.com/eks/latest/userguide/enable-kms.html).
  + 시크릿 읽기 및 쓰기를 제한하는 역할 기반 액세스 제어(RBAC) 규칙을 통해 권한 부여를 활성화하거나 구성합니다. 새 시크릿을 생성하거나 기존 시크릿을 교체할 수 있는 권한을 제한합니다. 자세한 내용은 [인가 개요](https://kubernetes.io/docs/reference/access-authn-authz/authorization/)(쿠버네티스 문서)를 참조하세요.
  + 포드에 여러 컨테이너를 정의하고 있는데 그 중 하나의 컨테이너만 시크릿에 액세스해야 하는 경우, 다른 컨테이너가 해당 시크릿에 액세스할 수 없도록 볼륨 마운트를 정의합니다. 볼륨으로 탑재된 시크릿은 `tmpfs` 볼륨으로 인스턴스화되고 포드 삭제 시 노드에서 자동으로 제거됩니다. 환경 변수를 사용할 수도 있지만 환경 변수 값이 로그에 나타날 수 있으므로 이 방법은 사용하지 않는 것이 좋습니다. 자세한 내용은 [시크릿(Secret)](https://kubernetes.io/docs/concepts/configuration/secret/)(쿠버네티스 문서)을 참조하세요.
  + 가능하면 네임스페이스 내의 시크릿에 대한 `watch` 및`list` 요청 액세스 권한을 부여하지 마세요. Kubernetes API에서 이러한 요청은 클라이언트가 해당 네임스페이스에 있는 모든 시크릿 값을 검사할 수 있게 하기 때문에 강력합니다.
  + 읽기 전용 액세스를 포함하여 클러스터 관리자만 `etcd`에 액세스하도록 허용합니다.
  + `etcd` 인스턴스가 여러 개 있는 경우 `etcd`가 `etcd` 피어 간 통신에 TLS를 사용하는지 확인하세요.
+ ASCP를 사용하는 경우 다음을 수행하여 시크릿을 보호합니다.
  + [서비스 계정에 대한 IAM 역할](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)을 사용하여 승인된 포드로만 시크릿 액세스를 제한합니다.
  + [AWS Encryption Provider](https://github.com/kubernetes-sigs/aws-encryption-provider)(GitHub 리포지토리)로 Kubernetes 시크릿의 암호화를 활성화하여 고객 관리형 KMS 키로 봉투 암호화를 구현합니다.
+ 환경 변수로 인한 데이터 유출 위험을 완화하려면 [AWS Secrets Manager 와 Config Provider for Secret Store CSI Driver](https://github.com/aws/secrets-store-csi-driver-provider-aws)(GitHub)를 사용하는 것이 좋습니다. 이 드라이버를 사용하면 Secrets Manager에 저장된 시크릿과 Parameter Store에 저장된 파라미터를 Kubernetes 포드에 탑재된 파일로 표시할 수 있습니다.
**참고**  
AWS Fargate 는 지원되지 않습니다.
+ Amazon CloudWatch 지표 필터 및 경보를 생성하여 시크릿 삭제 또는 삭제 대기 기간 동안 시크릿 버전 사용 등 관리자가 지정한 작업에 대한 알림을 보냅니다. 자세한 내용은 [이상 탐지를 기반으로 경보 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create_Anomaly_Detection_Alarm.html)을 참조하세요.