데이터 암호화 및 보안 암호 관리 - Amazon EKS

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

데이터 암호화 및 보안 암호 관리

저장 시 암호화

Kubernetes에는 EBS, EFS EFSFSx for Lustre라는 세 가지 AWS 네이티브 스토리지 옵션이 있습니다. 세 가지 모두 서비스 관리형 키 또는 고객 마스터 키(CMK)를 사용하여 저장 시 암호화를 제공합니다. EBS의 경우 트리 내 스토리지 드라이버 또는 EBS CSI 드라이버를 사용할 수 있습니다. 둘 다 볼륨을 암호화하고 CMK를 제공하기 위한 파라미터를 포함합니다. EFS의 경우 EFS CSI 드라이버를 사용할 수 있지만 EBS와 달리 EFS CSI 드라이버는 동적 프로비저닝을 지원하지 않습니다. EFS를 EKS와 함께 사용하려면 PV를 생성하기 전에 파일 시스템에 대한 저장 데이터 암호화를 프로비저닝하고 구성해야 합니다. EFS 파일 암호화에 대한 자세한 내용은 유휴 데이터 암호화를 참조하세요. 저장 데이터 암호화를 제공하는 것 외에도 EFS 및 FSx for Lustre에는 전송 중 데이터를 암호화하는 옵션이 포함되어 있습니다. FSx for Lustre는 기본적으로이 작업을 수행합니다. EFS의 경우이 예제와 같이 PV의 mountOptionstls 파라미터를 추가하여 전송 암호화를 추가할 수 있습니다.

apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: efs-sc mountOptions: - tls csi: driver: efs.csi.aws.com volumeHandle: <file_system_id>

FSx CSI 드라이버는 Lustre 파일 시스템의 동적 프로비저닝을 지원합니다. 이 예제와 같이 자체 CMK를 제공하는 옵션이 있지만 기본적으로 서비스 관리형 키로 데이터를 암호화합니다.

kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: fsx-sc provisioner: fsx.csi.aws.com parameters: subnetId: subnet-056da83524edbe641 securityGroupIds: sg-086f61ea73388fb6b deploymentType: PERSISTENT_1 kmsKeyId: <kms_arn>
중요

2020년 5월 28일부터 EKS Fargate 포드의 임시 볼륨에 기록된 모든 데이터는 기본적으로 업계 표준 AES-256 암호화 알고리즘을 사용하여 암호화됩니다. 암호화 및 복호화는 서비스에서 원활하게 처리되므로 애플리케이션을 수정할 필요가 없습니다.

저장 데이터 암호화

저장 데이터를 암호화하는 것이 모범 사례로 간주됩니다. 암호화가 필요한지 확실하지 않은 경우 데이터를 암호화합니다.

CMKs 주기적으로 교체

CMKs 자동으로 교체하도록 KMS를 구성합니다. 이렇게 하면 이전 키를 무기한 저장하면서 1년에 한 번 키를 교체하여 데이터를 해독할 수 있습니다. 자세한 내용은 고객 마스터 키 교체를 참조하세요.

EFS 액세스 포인트를 사용하여 공유 데이터 세트에 대한 액세스 간소화

POSIX 파일 권한이 다른 공유 데이터 세트가 있거나 다른 탑재 지점을 생성하여 공유 파일 시스템의 일부에 대한 액세스를 제한하려는 경우 EFS 액세스 포인트를 사용하는 것이 좋습니다. 액세스 포인트 작업에 대한 자세한 내용은 https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html 참조하십시오. 오늘 액세스 포인트(AP)를 사용하려면 PV volumeHandle 파라미터에서 AP를 참조해야 합니다.

중요

2021년 3월 23일부터 EFS CSI 드라이버는 EFS 액세스 포인트의 동적 프로비저닝을 지원합니다. 액세스 포인트는 여러 포드 간에 파일 시스템을 더 쉽게 공유할 수 있는 EFS 파일 시스템의 애플리케이션별 진입점입니다. 각 EFS 파일 시스템은 최대 120개의 PVs. 자세한 내용은 Amazon EFS CSI 동적 프로비저닝 소개를 참조하세요.

보안 암호 관리

Kubernetes 보안 암호는 사용자 인증서, 암호 또는 API 키와 같은 민감한 정보를 저장하는 데 사용됩니다. 이러한 문자열은 etcd에서 base64 인코딩 문자열로 유지됩니다. EKS에서 etcd 노드의 EBS 볼륨은 EBS 암호화로 암호화됩니다. 포드는의 보안 암호를 참조하여 Kubernetes 보안 암호 객체를 검색할 수 있습니다podSpec. 이러한 보안 암호는 환경 변수에 매핑하거나 볼륨으로 마운트할 수 있습니다. 보안 암호 생성에 대한 자세한 내용은 https://kubernetes.io/docs/concepts/configuration/secret/ 참조하십시오.

주의

특정 네임스페이스의 보안 암호는 보안 암호 네임스페이스의 모든 포드에서 참조할 수 있습니다.

주의

노드 권한 부여자를 사용하면 Kubelet이 노드에 마운트된 모든 보안 암호를 읽을 수 있습니다.

Kubernetes 보안 암호의 봉투 암호화에 AWS KMS 사용

이렇게 하면 고유한 데이터 암호화 키(DEK)를 사용하여 보안 암호를 암호화할 수 있습니다. 그런 다음 DEK는 반복 일정에 따라 자동으로 교체될 수 있는 AWS KMS의 키 암호화 키(KEK)를 사용하여 암호화됩니다. Kubernetes용 KMS 플러그인을 사용하면 모든 Kubernetes 보안 암호가 일반 텍스트 대신 사이퍼텍스트로 etcd에 저장되며 Kubernetes API 서버에서만 복호화할 수 있습니다. 자세한 내용은 심층 방어를 위한 EKS 암호화 공급자 지원 사용을 참조하세요.

Kubernetes 보안 암호 사용 감사

EKS에서 감사 로깅을 켜고 CloudWatch 지표 필터 및 경보를 생성하여 보안 암호가 사용될 때 알려줍니다(선택 사항). 다음은 Kubernetes 감사 로그에 대한 지표 필터의 예입니다{($.verb="get") && ($.objectRef.resource="secret")}. CloudWatch Log Insights에서 다음 쿼리를 사용할 수도 있습니다.

fields @timestamp, @message | sort @timestamp desc | limit 100 | stats count(*) by objectRef.name as secret | filter verb="get" and objectRef.resource="secrets"

위 쿼리에는 특정 기간 내에 보안 암호에 액세스한 횟수가 표시됩니다.

fields @timestamp, @message | sort @timestamp desc | limit 100 | filter verb="get" and objectRef.resource="secrets" | display objectRef.namespace, objectRef.name, user.username, responseStatus.code

이 쿼리는 보안 암호 및 응답 코드에 액세스하려고 시도한 사용자의 네임스페이스 및 사용자 이름과 함께 보안 암호를 표시합니다.

보안 암호를 주기적으로 교체

Kubernetes는 보안 암호를 자동으로 교체하지 않습니다. 보안 암호를 교체해야 하는 경우 볼트 또는 AWS Secrets Manager와 같은 외부 보안 암호 저장소를 사용하는 것이 좋습니다.

다른 애플리케이션에서 보안 암호를 격리하는 방법으로 별도의 네임스페이스 사용

네임스페이스의 애플리케이션 간에 공유할 수 없는 보안 암호가 있는 경우 해당 애플리케이션에 대해 별도의 네임스페이스를 생성합니다.

환경 변수 대신 볼륨 마운트 사용

환경 변수의 값은 의도하지 않게 로그에 나타날 수 있습니다. 볼륨으로 마운트된 보안 암호는 포드가 삭제될 때 노드에서 자동으로 제거되는 tmpfs 볼륨(RAM 지원 파일 시스템)으로 인스턴스화됩니다.

외부 보안 암호 공급자 사용

AWS Secrets Manager 및 Hashicorp’s Vault를 포함하여 Kubernetes 보안 암호 사용에 대한 몇 가지 실행 가능한 대안이 있습니다. 이러한 서비스는 세분화된 액세스 제어, 강력한 암호화, Kubernetes Secrets에서 사용할 수 없는 보안 암호의 자동 교체와 같은 기능을 제공합니다. Bitnami의 봉인된 보안 암호는 비대칭 암호화를 사용하여 "봉인된 보안 암호"를 생성하는 또 다른 접근 방식입니다. 퍼블릭 키는 보안 암호를 암호화하는 데 사용되며 보안 암호를 해독하는 데 사용되는 프라이빗 키는 클러스터 내에 유지되므로 Git과 같은 소스 제어 시스템에 봉인된 보안 암호를 안전하게 저장할 수 있습니다. 자세한 내용은 봉인된 보안 암호를 사용하여 Kubernetes에서 보안 암호 배포 관리를 참조하세요.

외부 보안 암호 스토어의 사용이 증가함에 따라는 이를 Kubernetes와 통합해야 합니다. 보안 암호 스토어 CSI 드라이버는 CSI 드라이버 모델을 사용하여 외부 보안 암호 스토어에서 보안 암호를 가져오는 커뮤니티 프로젝트입니다. 현재 드라이버는 AWS Secrets Manager, Azure, Vault 및 GCP를 지원합니다. AWS 공급자는 AWS Secrets Manager AWS Parameter Store를 모두 지원합니다. 또한 보안 암호가 만료될 때 보안 암호를 교체하도록 구성할 수 있으며 AWS Secrets Manager 보안 암호를 Kubernetes 보안 암호와 동기화할 수 있습니다. 보안 암호 동기화는 보안 암호를 볼륨에서 읽는 대신 환경 변수로 참조해야 할 때 유용할 수 있습니다.

참고

보안 암호 스토어 CSI 드라이버가 보안 암호를 가져와야 하는 경우 보안 암호를 참조하는 포드에 할당된 IRSA 역할을 수임합니다. 이 작업의 코드는 여기에서 찾을 수 있습니다.

AWS Secrets & Configuration Provider(ASCP)에 대한 자세한 내용은 다음 리소스를 참조하세요.

외부 보안 암호는 Kubernetes에서 외부 보안 암호 스토어를 사용하는 또 다른 방법입니다. CSI 드라이버와 마찬가지로 외부 보안 암호는 AWS Secrets Manager를 비롯한 다양한 백엔드에서 작동합니다. 차이점은 외부 보안 암호 스토어에서 보안 암호를 검색하는 대신 외부 보안 암호가 이러한 백엔드의 보안 암호를 보안 암호로 Kubernetes에 복사한다는 것입니다. 이를 통해 원하는 보안 암호 스토어를 사용하여 보안 암호를 관리하고 Kubernetes 네이티브 방식으로 보안 암호와 상호 작용할 수 있습니다.

도구 및 리소스