Gerenciando a CMK usando APIs - Managed Service for Apache Flink

Anteriormente, o Amazon Managed Service for Apache Flink (Amazon MSF) era conhecido como Amazon Kinesis Data Analytics for Apache Flink.

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

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.

Crie e atribua chaves KMS

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 no Guia do desenvolvedor do AWS Key Management Service.

Crie uma política de chave do KMS

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.

  • 123456789012Substitua 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. 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 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

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 ou instantâneo 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.

    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" } } }
  2. Salve esse arquivo. Por exemplo, salve-o com o nome enable-cmk.json.

  3. Execute o AWS CLI comando update-application 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

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" } } }
  2. Salve esse arquivo. Por exemplo, salve-o com o nome disable-cmk.json.

  3. Execute o AWS CLI comando update-application 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