

# Criar uma chave de criptografia para o armazenamento efêmero do Fargate para o Amazon ECS
<a name="fargate-create-storage-key"></a>

Crie uma chave gerenciada do cliente para criptografar dados armazenados no armazenamento temporário do Fargate.

**nota**  
A criptografia de armazenamento efêmero do Fargate com chaves gerenciadas pelo cliente não está disponível para clusters de tarefas do Windows.  
A criptografia do armazenamento efêmero do Fargate com chaves gerenciadas pelo cliente não está disponível nas `platformVersions` anteriores à versão `1.4.0`.  
O Fargate reserva espaço em um armazenamento efêmero que só é usado pelo Fargate, e você não é cobrado por esse espaço. A alocação pode ser diferente nas tarefas de chave não gerenciadas pelo cliente, mas o espaço total permanece o mesmo. Você pode ver essa mudança em ferramentas como `df`.  
Chaves de várias regiões não são compatíveis com armazenamento efêmero do Fargate.  
Aliases de chaves do KMS não são compatíveis com armazenamento efêmero do Fargate.

Para criar um a chave gerenciada pelo cliente (CMK) para criptografar armazenamento efêmero para o Fargate no AWS KMS, siga estas etapas.

1. Navegue até [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Siga as instruções de [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) no [AWS Key Management Service Developer Guide](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).

1. Ao criar sua chave AWS KMS, certifique-se de fornecer as permissões operacionais relevantes do AWS KMS ao serviço Fargate nas políticas de chave. As operações de API a seguir devem ser permitidas na política para usar a chave gerenciada pelo cliente com os recursos de cluster do Amazon ECS.
   + `kms:GenerateDataKeyWithoutPlainText`: chame `GenerateDataKeyWithoutPlainText` para gerar uma chave de dados criptografada a partir da chave AWS KMS fornecida.
   + `kms:CreateGrant`: adiciona uma concessão a uma chave gerenciada pelo cliente. Concede controle de acesso a uma chave AWS KMS especificada, o que permite acesso às operações de concessão que o Fargate do Amazon ECS requer. Para obter mais informações sobre [Utilizar concessões](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html), consulte o [Guia do desenvolvedor do AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html). Isso permite que o Fargate do Amazon ECS faça o seguinte:
     + Chame `Decrypt` para que o AWS KMS obtenha a chave de criptografia para descriptografar os dados do armazenamento efêmero.
     + Configure uma entidade principal aposentada para permitir que o serviço para `RetireGrant`.
   + `kms:DescribeKey`: fornece os detalhes da chave gerenciada pelo cliente para permitir que o Amazon ECS valide a chave se ela for simétrica e estiver habilitada.

   O exemplo a seguir mostra uma política de chave AWS KMS que você aplicaria à chave de destino para criptografia. Para usar as instruções do exemplo de política, substitua os *espaços reservados para entrada do usuário* por suas próprias informações. Como sempre, configure apenas as permissões necessárias, mas você precisará fornecer o AWS KMS com permissões para pelo menos um usuário a fim de evitar erros.

   ```
   {
         "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": "*"
       }
   ```

   As tarefas do Fargate usam as chaves de contexto de criptografia `aws:ecs:clusterAccount` e `aws:ecs:clusterName` para operações criptográficas com a chave. Os clientes devem adicionar essas permissões para restringir o acesso a uma conta e/ou cluster específicos. Use o nome do cluster e não o ARN ao especificar o cluster.

   Para obter mais informações, consulte [Contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) no [Guia do desenvolvedor AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).

   Ao criar ou atualizar um cluster, você tem a opção usar a chave de condição `fargateEphemeralStorageKmsKeyId`. Essa chave de condição permite que os clientes tenham um controle mais granular das políticas do IAM. As atualizações da configuração `fargateEphemeralStorageKmsKeyId` só se aplicam a novas implantações do serviço.

   O exemplo a seguir mostra como deixar que os clientes só concedam permissões a um conjunto específico de chaves AWS KMS aprovadas.

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

------

   O próximo exemplo mostra como negar tentativas de remover chaves AWS KMS que já estão associadas a um cluster.

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

****  

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

------

   Os clientes podem ver se as tarefas não gerenciadas ou as tarefas de serviço estão criptografadas com a chave usando os comandos AWS CLI, `describe-tasks`, `describe-cluster` ou `describe-services`.

   Para obter mais informações, consulte [Condition keys for AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html) in the [AWS KMS Developer Guide](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).

------
#### [ Console de gerenciamento da AWS ]

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Escolha **Clusters** no painel de navegação esquerdo, depois selecione **Criar cluster** no canto superior direito ou escolha um cluster existente. Para um cluster existente, escolha **Atualizar cluster** no canto superior direito.

1. Na seção **Criptografia** do fluxo de trabalho, você terá a opção de selecionar sua chave AWS KMS em **Armazenamento gerenciado** e **Armazenamento efêmero do Fargate**. Você também pode optar por **criar uma chave AWS KMS** aqui.

1. Escolha **Criar** quando terminar de criar o novo cluster ou **Atualizar**, se estiver atualizando um cluster existente.

------
#### [ AWS CLI ]

O exemplo a seguir mostra como criar um cluster e configurar o armazenamento efêmero do Fargate usando a AWS CLI (substitua os valores em *vermelho* pelos seus):

```
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 ]

O exemplo a seguir mostra como criar um cluster e configurar o armazenamento efêmero do Fargate usando a CloudFormation o (substitua os valores em *vermelho* pelos):

```
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"
```

------