Fargate 임시 스토리지에 대한 암호화 키 생성 - Amazon Elastic Container Service

Fargate 임시 스토리지에 대한 암호화 키 생성

참고

고객 관리형 키를 사용하는 Fargate 임시 스토리지 암호화는 Windows 작업 클러스터에서 사용할 수 없습니다.

고객 관리형 키를 사용하는 Fargate 임시 스토리지 암호화는 1.4.0 이전의 platformVersions에서 사용할 수 없습니다.

Fargate는 Fargate에서만 사용하는 임시 스토리지에 공간을 예약하며, 이 공간에 대해서는 요금이 청구되지 않습니다. 할당은 고객 관리형 키가 아닌 경우와 다를 수 있지만, 전체 공간은 동일합니다. df와 같은 도구에서 어떻게 다른지 확인할 수 있습니다.

AWS KMS에서 Fargate의 임시 스토리지를 암호화하기 위해 고객 관리형 키(CMK)를 생성하려면 다음 단계를 수행합니다.

  1. https://console.aws.amazon.com/kms로 이동합니다.

  2. 관련 지침은 AWS Key Management Service 개발자 안내서Creating Keys를 참조하세요.

  3. AWS KMS 키를 생성할 때는 키 정책에 Fargate 서비스 관련 AWS KMS 작업 권한을 제공해야 합니다. Amazon ECS 리소스에서 고객 관리형 키를 사용하려면 정책에서 다음 API 작업을 허용해야 합니다.

    • kms:GenerateDataKeyWithoutPlainText ‐ 제공된 AWS KMS 키에서 암호화된 데이터 키를 생성하려면 GenerateDataKeyWithoutPlainText를 직접 호출합니다.

    • kms:CreateGrant - 고객 관리형 키에 권한 부여를 추가합니다. 권한 부여는 지정된 AWS KMS 키에 대한 액세스를 제어하며, 여기서 Amazon ECS Fargate에 필요한 권한 부여 작업에 대한 액세스를 허용합니다. 권한 부여 사용에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서를 참조하십시오. 이를 통해 Amazon ECS Fargate에서 다음을 수행할 수 있습니다.

      • 임시 스토리지 데이터를 복호화하는 데 사용할 암호화 키를 가져오기 위해 AWS KMS로 Decrypt를 직접 호출합니다.

      • 서비스가 RetireGrant를 사용할 수 있도록 은퇴하는 보안 주체를 설정하세요.

    • kms:DescribeKey - Amazon ECS에서 키가 대칭이고 활성화되었는지 확인할 수 있도록 고객 관리형 키 세부 정보를 제공합니다.

    다음 예제에서는 암호화를 위해 대상 키에 적용할 AWS KMS 키 정책을 보여줍니다. 다음 예시 정책 명령을 사용하려면 사용자 입력 자리 표시자를 실제 정보로 바꿉니다. 항상 그렇듯이 필요한 권한만 구성하되, 오류를 방지하려면 최소한 한 명의 사용자에게 권한이 있는 AWS KMS를 제공해야 합니다.

    { "Sid": "Allow generate data key access for Fargate tasks.", "Effect": "Allow", "Principal": { "Service":"fargate.amazonaws.com" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:ecs:clusterAccount": [ "customerAccountId" ], "kms:EncryptionContext:aws:ecs:clusterName": [ "clusterName" ] } }, "Resource": "*" }, { "Sid": "Allow grant creation permission for Fargate tasks.", "Effect": "Allow", "Principal": { "Service":"fargate.amazonaws.com" }, "Action": [ "kms:CreateGrant" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:ecs:clusterAccount": [ "customerAccountId" ], "kms:EncryptionContext:aws:ecs:clusterName": [ "clusterName" ] }, "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Decrypt" ] } }, "Resource": "*" }, { "Sid": "Allow describe key permission for cluster operator - CreateCluster and UpdateCluster.", "Effect": "Allow", "Principal": { "AWS":"arn:aws:iam::customerAccountId:role/customer-chosen-role" }, "Action": [ "kms:DescribeKey" ], "Resource": "*" }

    Fargate 작업은 키를 사용한 암호화 작업에 aws:ecs:clusterAccountaws:ecs:clusterName 암호화 컨텍스트 키를 사용합니다. 특정 계정 및/또는 클러스터에 대한 액세스를 제한하려면 고객이 이러한 권한을 추가해야 합니다.

    자세한 내용은 AWS KMS 개발자 가이드에서 암호화 컨텍스트를 참조하세요.

    클러스터를 생성하거나 업데이트할 때 조건 키 fargateEphemeralStorageKmsKeyId를 사용할 수 있습니다. 이 조건 키를 사용하면 고객이 IAM 정책을 보다 세밀하게 제어할 수 있습니다. fargateEphemeralStorageKmsKeyId 구성 업데이트는 새 서비스 배포에만 적용됩니다.

    다음은 고객이 승인된 특정 AWS KMS 키 집합에만 권한을 부여하도록 허용하는 예제입니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:UpdateCluster" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:fargate-ephemeral-storage-kms-key": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" } } } ] }

    다음은 클러스터와 이미 연결된 AWS KMS 키를 제거하려는 시도를 거부하는 예제입니다.

    { "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "ecs:CreateCluster", "ecs:UpdateCluster" ], "Resource": "*", "Condition": { "Null": { "ecs:fargate-ephemeral-storage-kms-key": "true" } } } }

    고객은 AWS CLI describe-tasks, describe-cluster 또는 describe-services 명령을 통해 비관리형 작업이나 서비스 작업이 키를 사용하여 암호화되는지 확인할 수 있습니다.

    자세한 내용은 AWS KMS 개발자 안내서AWS KMS에 사용되는 조건 키를 참조하세요.

AWS Management Console
  1. https://console.aws.amazon.com/ecs/v2에서 콘솔을 엽니다.

  2. 왼쪽 탐색에서 클러스터를 선택하고 오른쪽 상단에서 클러스터 생성 선택하거나 기존 클러스터를 선택합니다. 기존 클러스터의 경우 오른쪽 상단에서 클러스터 업데이트를 선택합니다.

  3. 워크플로의 암호화 섹션 아래 관리형 스토리지Fargate 임시 스토리지에서 AWS KMS 키를 선택할 수 있습니다. 여기에서 AWS KMS 키 생성을 선택할 수도 있습니다.

  4. 새 클러스터 생성을 완료한 후 생성을 선택하거나 기존 클러스터를 업데이트한 경우 업데이트를 선택합니다.

AWS CLI

다음은 AWS CLI를 사용하여 클러스터를 생성하고 Fargate 임시 스토리지를 구성하는 예제입니다(빨간색 값을 자체 값으로 바꿈).

aws ecs create-cluster --cluster clusterName \ --configuration '{"managedStorageConfiguration":{"fargateEphemeralStorageKmsKeyId":"arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"}}' { "cluster": { "clusterArn": "arn:aws:ecs:us-west-2:012345678901:cluster/clusterName", "clusterName": "clusterName", "configuration": { "managedStorageConfiguration": { "fargateEphemeralStorageKmsKeyId": "arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" } }, "status": "ACTIVE", "registeredContainerInstancesCount": 0, "runningTasksCount": 0, "pendingTasksCount": 0, "activeServicesCount": 0, "statistics": [], "tags": [], "settings": [], "capacityProviders": [], "defaultCapacityProviderStrategy": [] }, "clusterCount": 5 }
AWS CloudFormation

다음은 AWS CloudFormation를 사용하여 클러스터를 생성하고 Fargate 임시 스토리지를 구성하는 예제 템플릿입니다(빨간색 값을 자체 값으로 바꿈).

AWSTemplateFormatVersion: 2010-09-09 Resources: MyCluster: Type: AWS::ECS::Cluster Properties: ClusterName: "clusterName" Configuration: ManagedStorageConfiguration: FargateEphemeralStorageKmsKeyId: "arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"