Gerenciando a CMK usando APIs - Managed Service for Apache Flink

O Amazon Managed Service para Apache Flink (Amazon MSF) era conhecido anteriormente 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 chaves permissiva para cargas de trabalho de produção. Em cenários reais para cargas de trabalho de produção, funções, permissões e 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 uma chave KMS, consulte Criar uma chave KMS no Guia do AWS Key Management Service desenvolvedor.

Crie uma política de chaves do KMS

Para usar a CMK no Amazon MSF, você deve adicionar os seguintes princípios de serviço à sua política de chaves: e. kinesisanalytics.amazonaws.com infrastructure.kinesisanalytics.amazonaws.com O Amazon MSF usa esses princípios de serviço para validação e acesso a recursos. Se você não incluir esses princípios de serviço, o 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 Operator função quanto para os diretores de serviços do Amazon MSF kinesisanalytics.amazonaws.com e infrastructure.kinesisanalytics.amazonaws.com para realizar as seguintes operações:

  • Descreva a CMK

  • Criptografe os dados do aplicativo

  • Descriptografar os dados do aplicativo

  • Crie subsídios para a chave

O exemplo a seguir usa funções do IAM. Você pode criar a política de chaves para a chave KMS usando o exemplo a seguir como modelo, mas certifique-se de fazer o seguinte:

  • arn:aws:iam::123456789012:role/OperatorSubstitua pela Operator função. Você deve criar a Operator função ou o usuário antes de criar a política de chaves. Não fazer isso causará a falha de sua solicitação.

  • arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplicationSubstitua pelo ARN do seu aplicativo.

  • kinesisanalytics.us-east-1.amazonaws.com.rproxy.govskope.caSubstitua por um valor de serviço para a região correspondente.

  • 123456789012Substitua pela política de IDKey da sua conta para CMK.

  • Adicione declarações de política adicionais para permitir que os administradores de chaves administrem a chave KMS. Não fazer isso causará perda de acesso para gerenciar a chave.

As declarações políticas principais a seguir 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 da 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

{ "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" } } } ] }

Atualizar um aplicativo existente para usar o 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 o AOK por uma CMK, novos pontos de verificação e instantâneos são criptografados com a CMK. No entanto, os instantâneos históricos permanecerão criptografados com o AOK.

Para atualizar um aplicativo existente para usar o CMK
  1. Crie um arquivo JSON com a configuração a seguir.

    Certifique-se de substituir o valor de 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 nomeenable-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 que você criou nas etapas anteriores como argumento do arquivo.

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

A configuração anterior é aceita para atualizar o aplicativo para usar a CMK somente se as seguintes condições forem atendidas:

  • O chamador da API tem uma declaração de política que permite o acesso à chave.

  • A política de chaves tem uma declaração de política que permite que o chamador da API acesse a chave.

  • A política de chaves 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 nomedisable-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 que você criou nas etapas anteriores como argumento do arquivo.

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