

# Amazon ECS용 Fargate 임시 스토리지에 대한 암호화 키 생성
<a name="fargate-create-storage-key"></a>

고객 관리형 키를 생성하여 Fargate 임시 스토리지에 저장된 데이터를 암호화합니다.

**참고**  
고객 관리형 키를 사용하는 Fargate 임시 스토리지 암호화는 Windows 작업 클러스터에서 사용할 수 없습니다.  
고객 관리형 키를 사용하는 Fargate 임시 스토리지 암호화는 `1.4.0` 이전의 `platformVersions`에서 사용할 수 없습니다.  
Fargate는 Fargate에서만 사용하는 임시 스토리지에 공간을 예약하며, 이 공간에 대해서는 요금이 청구되지 않습니다. 할당은 고객 관리형 키가 아닌 경우와 다를 수 있지만, 전체 공간은 동일합니다. `df`와 같은 도구에서 어떻게 다른지 확인할 수 있습니다.  
Fargate 임시 스토리지에 대해서는 다중 리전 키가 지원되지 않습니다.  
Fargate 임시 스토리지에 대해서는 KMS 키 별칭이 지원되지 않습니다.

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

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

1. 관련 지침은 [AWS Key Management Service 개발자 안내서](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)의 [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)를 참조하세요.

1. AWS KMS 키를 생성할 때는 키 정책에 Fargate 서비스 관련 AWS KMS 작업 권한을 제공해야 합니다. Amazon ECS 리소스에서 고객 관리형 키를 사용하려면 정책에서 다음 API 작업을 허용해야 합니다.
   + `kms:GenerateDataKeyWithoutPlainText` ‐ 제공된 AWS KMS 키에서 암호화된 데이터 키를 생성하려면 `GenerateDataKeyWithoutPlainText`를 직접 호출합니다.
   + `kms:CreateGrant` - 고객 관리형 키에 권한 부여를 추가합니다. 권한 부여는 지정된 AWS KMS 키에 대한 액세스를 제어하며, 여기서 Amazon ECS Fargate에 필요한 권한 부여 작업에 대한 액세스를 허용합니다. [권한 부여 사용](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)에 대한 자세한 내용은 [AWS Key Management Service 개발자 안내서](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 참조하세요. 이를 통해 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:clusterAccount` 및 `aws:ecs:clusterName` 암호화 컨텍스트 키를 사용합니다. 특정 계정 및/또는 클러스터에 대한 액세스를 제한하려면 고객이 이러한 권한을 추가해야 합니다. 클러스터를 지정할 때 ARN이 아닌 클러스터 이름을 사용하세요.

   자세한 내용은 [AWS KMS 개발자 가이드](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)에서 [암호화 컨텍스트](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)를 참조하세요.

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

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

------
#### [ JSON ]

****  

   ```
   {
     "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 키를 제거하려는 시도를 거부하는 예제입니다.

------
#### [ JSON ]

****  

   ```
   {
     "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 개발자 안내서](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)의 [AWS KMS에 사용되는 조건 키](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html)를 참조하세요.

------
#### [ AWS Management Console ]

1. [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)에서 콘솔을 엽니다.

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

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

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

------
#### [ 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
}
```

------
#### [ CloudFormation ]

다음은 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"
```

------