

# Gerenciar chaves AWS KMS para o armazenamento efêmero do Fargate para o Amazon ECS
<a name="fargate-managing-kms-key"></a>

Depois de criar ou importar sua chave AWS KMS para criptografar o armazenamento efêmero do Fargate, você o gerencia como faria com qualquer outra chave AWS KMS.

**Alternância automática de chaves AWS KMS**  
Você pode ativar a troca automática das chaves ou fazer isso manualmente. A troca automática da chave faz isso para você uma vez por ano, gerando novo material criptográfico para a chave. O AWS KMS também salva todas as versões anteriores do material criptográfico, para que você possa descriptografar dados que usaram as versões anteriores da chave. O AWS KMS não excluirá nenhum material que tenha sido trocado até você excluir a chave.

A troca automática é opcional e pode ser habilitada ou desabilitada a qualquer momento.

**Desativando ou revogando chaves AWS KMS**  
Desabilitar uma chave gerenciada pelo cliente no AWS KMS não terá nenhum impacto na execução das tarefas e elas continuarão funcionando durante todo o ciclo de vida. Uma tarefa que usar a chave desabilitada ou revogada falhará porque não poderá acessar a chave. Você deve definir um alarme do CloudWatch ou similar para garantir que uma chave desabilitada nunca seja necessária para descriptografar dados já criptografados.

**Excluir chaves AWS KMS**  
Excluir chaves deve ser sempre o último recurso e só deve ser usado se você tiver certeza de que a chave excluída nunca mais será necessária. Novas tarefas que tentarem usar a chave excluída falharão porque não conseguirão acessá-la. O AWS KMS recomenda desabilitar a chave em vez de excluí-la. Se você achar necessário excluir uma chave, sugerimos desativá-la primeiro e definir um alarme do CloudWatch para ter certeza de que ela não é necessária. Se resolver excluir uma chave, o AWS KMS dá a você pelo menos sete dias para mudar de ideia.

**Auditar acesso a chaves AWS KMS**  
Você pode usar os logs do CloudTrail para auditar o acesso à sua chave AWS KMS. Você pode verificar as operações `CreateGrant`, `GenerateDataKeyWithoutPlaintext` e `Decrypt` do AWS KMS. Essas operações também mostram a `aws:ecs:clusterAccount` e o `aws:ecs:clusterName` como parte do `EncryptionContext` registrado em log do CloudTrail.

O exemplo a seguir mostra eventos do CloudTrail para `GenerateDataKeyWithoutPlaintext`, `GenerateDataKeyWithoutPlaintext (DryRun)`, `CreateGrant`, `CreateGrant (DryRun)` e `RetireGrant` (substitua os valores {{em vermelho}} pelos seus).

------
#### [ GenerateDataKeyWithoutPlaintext ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "ec2-frontend-api.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:13Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKeyWithoutPlaintext",
    "awsRegion": "{{us-west-2}}",
    "sourceIPAddress": "ec2-frontend-api.amazonaws.com",
    "userAgent": "ec2-frontend-api.amazonaws.com",
    "requestParameters": {
        "numberOfBytes": 64,
        "keyId": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}",
        "encryptionContext": {
            "aws:ecs:clusterAccount": "{{account-id}}",
            "aws:ebs:id": "{{vol-xxxxxxx}}",
            "aws:ecs:clusterName": "{{cluster-name}}"
        }
    },
    "responseElements": null,
    "requestID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE22222}}",
    "eventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE33333}}",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "{{account-id}}",
    "sharedEventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa}}",
    "eventCategory": "Management"
}
```

------
#### [ GenerateDataKeyWithoutPlaintext (DryRun) ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "fargate.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:11Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKeyWithoutPlaintext",
    "awsRegion": "{{us-west-2}}",
    "sourceIPAddress": "fargate.amazonaws.com",
    "userAgent": "fargate.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "keyId": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}",
        "dryRun": true,
        "numberOfBytes": 64,
        "encryptionContext": {
            "aws:ecs:clusterAccount": "{{account-id}}",
            "aws:ecs:clusterName": "{{cluster-name}}"
        }
    },
    "responseElements": null,
    "requestID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE22222}}",
    "eventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE33333}}",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "{{account-id}}",
    "sharedEventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa}}",
    "eventCategory": "Management"
}
```

------
#### [ CreateGrant ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "ec2-frontend-api.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:13Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "{{us-west-2}}",
    "sourceIPAddress": "ec2-frontend-api.amazonaws.com",
    "userAgent": "ec2-frontend-api.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}",
        "granteePrincipal": "fargate.{{us-west-2}}.amazonaws.com",
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextSubset": {
                "aws:ecs:clusterAccount": "{{account-id}}",
                "aws:ebs:id": "vol-xxxx",
                "aws:ecs:clusterName": "{{cluster-name}}"
            }
        },
        "retiringPrincipal": "ec2.{{us-west-2}}.amazonaws.com"
    },
    "responseElements": {
        "grantId": "{{e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855}}",
        "keyId": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}"
    },
    "requestID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE22222}}",
    "eventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE33333}}",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "{{account-id}}",
    "sharedEventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa}}",
    "eventCategory": "Management"
}
```

------
#### [ CreateGrant (DryRun) ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "fargate.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:11Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "{{us-west-2}}",
    "sourceIPAddress": "fargate.amazonaws.com",
    "userAgent": "fargate.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "keyId": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}",
        "granteePrincipal": "fargate.{{us-west-2}}.amazonaws.com",
        "dryRun": true,
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextSubset": {
                "aws:ecs:clusterAccount": "{{account-id}}",
                "aws:ecs:clusterName": "{{cluster-name}}"
            }
        }
    },
    "responseElements": null,
    "requestID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE22222}}",
    "eventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE33333}}",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "{{account-id}}",
    "sharedEventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa}}",
    "eventCategory": "Management"
}
```

------
#### [ RetireGrant ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-04-20T18:37:38Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "RetireGrant",
    "awsRegion": "{{us-west-2}}",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": null,
    "responseElements": {
        "keyId": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}"
    },
    "additionalEventData": {
        "grantId": "{{e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855}}"
    },
    "requestID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE22222}}",
    "eventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLE33333}}",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:{{us-west-2}}:{{account-id}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "{{account-id}}",
    "sharedEventID": "{{a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa}}",
    "eventCategory": "Management"
}
```

------