

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gerenciando a CMK usando APIs
<a name="manage-cmk-api"></a>

Este tópico descreve como criar e atualizar seu KMS CMKs usando o Amazon MSF APIs. Para seguir os procedimentos descritos neste tópico, você deve ter permissão para gerenciar a chave KMS e o aplicativo Amazon MSF. Os procedimentos neste tópico usam uma política de chave permissiva, que serve apenas para fins de demonstração e teste. **Não recomendamos** o uso dessa política de chave permissiva para workloads de produção. Em cenários reais para workloads de produção, as funções, as permissões e os fluxos de trabalho são isolados.

**Topics**
+ [Crie e atribua chaves KMS](#create-assign-cmk-api)
+ [Atualize um aplicativo existente para usar a CMK](#update-existing-app-use-cmk-api)
+ [Reverter de CMK para Chave pertencente à AWS](#revert-cmk-to-aok-api)

## Crie e atribua chaves KMS
<a name="create-assign-cmk-api"></a>

Antes de começar, crie uma chave KMS. Para obter informações sobre como criar e configurar uma chave KMS, consulte [Criar uma chave KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) no *Guia do desenvolvedor do AWS Key Management Service *.

**Topics**
+ [Crie uma política de chave do KMS](#create-cmk-kms-key-policy)
+ [Permissões do operador do ciclo de vida do aplicativo (chamador de API)](#create-cmk-kms-api-caller-permissions)

### Crie uma política de chave do KMS
<a name="create-cmk-kms-key-policy"></a>

Para usar a CMK no Amazon MSF, você deve adicionar as seguintes entidades principais de serviço à sua política de chaves: `kinesisanalytics.amazonaws.com` e `infrastructure.kinesisanalytics.amazonaws.com`. O Amazon MSF usa essas entidades principais de serviço para validação e acesso a recursos. Se você não incluir essas entidades principais de serviço, a Amazon MSF rejeitará a solicitação.

A política de chaves do KMS a seguir permite que a Amazon MSF use uma CMK para o aplicativo,. *MyCmkApplication* Essa política concede as permissões necessárias tanto para a função **Operator** quanto para as entidades principais de serviços `kinesisanalytics.amazonaws.com` e `infrastructure.kinesisanalytics.amazonaws.com` do Amazon MSF para realizar as seguintes operações:
+ Descreva a CMK
+ Criptografe os dados do aplicativo
+ Descriptografe os dados do aplicativo
+ Crie concessões para a chave

O exemplo a seguir usa perfis do IAM. Você pode criar a política de chave para a chave KMS usando o exemplo a seguir como modelo, mas certifique-se de fazer o seguinte: 
+ Substitua `arn:aws:iam::123456789012:role/Operator` pela função **Operator**. Você deve criar a função ou o usuário do **Operator** antes de criar a política de chave. Não fazer isso causará a falha de sua solicitação.
+ Substitua `arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication` pelo ARN do aplicativo.
+ Substitua `kinesisanalytics.us-east-1.amazonaws.com` por um valor de serviço para a região correspondente.
+ *123456789012*Substitua pela política de IDKey da sua conta para CMK.
+ Adicione outras declarações de políticas para [permitir que administradores de chaves administrem a chave do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#key-policy-default-allow-administrators). Não fazer isso causará perda de acesso para gerenciar a chave.

As seguintes declarações de política de chave são amplas porque pretendem ser explícitas e mostrar as condições que cada ação exige.

```
{
    "Version":"2012-10-17",			 	 	 	 	 	 
    "Id": "MyMsfCmkApplicationKeyPolicy",
    "Statement": [
        {
            "Sid": "AllowOperatorToDescribeKey",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/Operator"
            },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowOperatorToConfigureAppToUseKeyForApplicationState",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/Operator"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowOperatorToConfigureAppToCreateGrantForRunningState",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/Operator"
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com",
                    "kms:GrantConstraintType": "EncryptionContextSubset"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": "Decrypt"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToDescribeKey",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "kinesisanalytics.amazonaws.com",
                    "infrastructure.kinesisanalytics.amazonaws.com"
                ]
            },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "aws:SourceAccount": "123456789012"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToGenerateDataKeyForDurableState",
            "Effect": "Allow",
            "Principal": {
                "Service": "kinesisanalytics.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "aws:SourceAccount": "123456789012"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToDecryptForDurableState",
            "Effect": "Allow",
            "Principal": {
                "Service": "kinesisanalytics.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToUseKeyForRunningState",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "infrastructure.kinesisanalytics.amazonaws.com"
                ]
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToCreateGrantForRunningState",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "infrastructure.kinesisanalytics.amazonaws.com"
                ]
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:GrantConstraintType": "EncryptionContextSubset"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": "Decrypt"
                }
            }
        }
    ]
}
```

### Permissões do operador do ciclo de vida do aplicativo (chamador de API)
<a name="create-cmk-kms-api-caller-permissions"></a>

A política do IAM a seguir garante que o operador do ciclo de vida do aplicativo tenha as permissões necessárias para atribuir uma chave KMS ao aplicativo,. *MyCmkApplication*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowMSFAPICalls",
            "Effect": "Allow",
            "Action": "kinesisanalytics:*",
            "Resource": "*"
        },
        {
            "Sid": "AllowPassingServiceExecutionRole",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::123456789012:role/MyCmkApplicationRole"
        },
        {
            "Sid": "AllowDescribeKey",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowMyCmkApplicationKeyOperationsForDurableState",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
                }
            }
        },
        {
            "Sid": "AllowMyCmkApplicationKeyOperationsForRunningState",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
                }
            }
        },
        {
            "Sid": "AllowMyCmkApplicationCreateGrantForRunningState",
            "Effect": "Allow",
            "Action": "kms:CreateGrant",
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": "Decrypt"
                },
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:GrantConstraintType": "EncryptionContextSubset"
                }
            }
        }
    ]
}
```

------

## Atualize um aplicativo existente para usar a CMK
<a name="update-existing-app-use-cmk-api"></a>

No Amazon MSF, você pode aplicar uma política de CMK a um aplicativo existente que usa Chaves pertencentes à AWS ()AOKs.

Por padrão, o Amazon MSF usa AOKs para criptografar todos os seus dados em armazenamento efêmero (armazenamento de aplicativos em execução) e durável (armazenamento durável de aplicativos). Isso significa que todos os dados sujeitos a um [ponto de verificação](how-fault.md) ou [instantâneo](how-snapshots.md) do Flink são criptografados usando AOKs por padrão. Quando você substitui a AOK por uma CMK, novos pontos de verificação e snapshots são criptografados com a CMK. No entanto, os snapshots históricos permanecerão criptografados com a AOK.

**Para atualizar um aplicativo existente para usar a CMK**

1. Crie um arquivo JSON com a configuração a seguir. 

   Certifique-se de substituir o valor `CurrentApplicationVersionId` pelo número da versão atual do aplicativo. Você pode obter o número da versão atual do seu aplicativo, usando [DescribeApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_DescribeApplication.html).

   Nessa configuração JSON, lembre-se de substituir os *sample* valores pelos valores reais.

   ```
   {
       "ApplicationName": "MyCmkApplication",
       "CurrentApplicationVersionId": 1,
       "ApplicationConfigurationUpdate": {
           "ApplicationEncryptionConfigurationUpdate": {
               "KeyTypeUpdate": "CUSTOMER_MANAGED_KEY",
               "KeyIdUpdate": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
           }
       }
   }
   ```

1. Salve esse arquivo. Por exemplo, salve-o com o nome **enable-cmk.json**.

1. Execute o AWS CLI comando [update-application](https://docs.aws.amazon.com/cli/latest/reference/kinesisanalyticsv2/update-application.html) conforme mostrado no exemplo a seguir. Nesse comando, forneça o arquivo de configuração JSON criado nas etapas anteriores como argumento do arquivo.

   ```
   aws kinesisanalyticsv2 update-application \
       --cli-input-json file://enable-cmk.json
   ```

A configuração anterior será aceita para atualizar o aplicativo para usar a CMK somente se as seguintes condições forem atendidas:
+ O chamador de API tem uma declaração de política que permite o acesso à chave.
+ A política de chave tem uma declaração de política que permite que o chamador de API acesse a chave.
+ A política de chave tem uma declaração de política que permite que o responsável pelo serviço Amazon MSF, por exemplo, `kinesisanalytics.amazonaws.com`, tenha acesso à chave.

## Reverter de CMK para Chave pertencente à AWS
<a name="revert-cmk-to-aok-api"></a>

**Para reverter de CMK para AOK**

1. Crie um arquivo JSON com a configuração a seguir.

   Nessa configuração JSON, lembre-se de substituir os *sample* valores pelos valores reais.

   ```
   {
       "ApplicationName": "MyCmkApplication",
       "CurrentApplicationVersionId": 1,
       "ApplicationConfigurationUpdate": {
           "ApplicationEncryptionConfigurationUpdate": {
               "KeyTypeUpdate": "AWS_OWNED_KEY"
           }
       }
   }
   ```

1. Salve esse arquivo. Por exemplo, salve-o com o nome **disable-cmk.json**.

1. Execute o AWS CLI comando [update-application](https://docs.aws.amazon.com/cli/latest/reference/kinesisanalyticsv2/update-application.html) conforme mostrado no exemplo a seguir. Nesse comando, forneça o arquivo de configuração JSON criado nas etapas anteriores como argumento do arquivo.

   ```
   aws kinesisanalyticsv2 update-application \
       --cli-input-json file://disable-cmk.json
   ```