Administrar CMK mediante APIs - Managed Service para Apache Flink

Amazon Managed Service for Apache Flink (Amazon MSF) se denominaba anteriormente Amazon Kinesis Data Analytics for Apache Flink.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Administrar CMK mediante APIs

En este tema se describe cómo crear y actualizar su KMS CMKs mediante Amazon MSF APIs. Para seguir los procedimientos descritos en este tema, debe tener permiso para administrar la clave KMS y la aplicación Amazon MSF. Los procedimientos de este tema utilizan una política clave permisiva, que se utiliza únicamente con fines de demostración y pruebas. No recomendamos utilizar una política clave tan permisiva para las cargas de trabajo de producción. En los escenarios reales de las cargas de trabajo de producción, las funciones, los permisos y los flujos de trabajo están aislados.

Cree y asigne claves de KMS

Antes de empezar, cree una clave KMS. Para obtener información sobre cómo crear una clave de KMS, consulte Crear una clave de KMS en la Guía para AWS Key Management Service desarrolladores.

Cree una política de claves de KMS

Para utilizar CMK en Amazon MSF, debe añadir los siguientes principios de servicio a su política clave: y. kinesisanalytics.amazonaws.com infrastructure.kinesisanalytics.amazonaws.com Amazon MSF utiliza estos principios de servicio para la validación y el acceso a los recursos. Si no incluye estos directores de servicio, Amazon MSF rechazará la solicitud.

La siguiente política de claves de KMS permite a Amazon MSF utilizar una CMK para la aplicación,. MyCmkApplication Esta política concede los permisos necesarios tanto al Operator rol como a los directores de servicio de Amazon MSF kinesisanalytics.amazonaws.com y infrastructure.kinesisanalytics.amazonaws.com a realizar las siguientes operaciones:

  • Describa la CMK

  • Cifre los datos de la aplicación

  • Descifra los datos de la aplicación

  • Cree concesiones para la clave

En el siguiente ejemplo, se utilizan las funciones de IAM. Puede crear la política de claves para la clave de KMS utilizando el siguiente ejemplo como plantilla, pero asegúrese de hacer lo siguiente:

  • arn:aws:iam::123456789012:role/OperatorSustitúyala por la Operator función. Debe crear el Operator rol o el usuario antes de crear la política clave. Si no lo hace, su solicitud no prosperará.

  • arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplicationSustitúyalo por el ARN de la aplicación.

  • kinesisanalytics.us-east-1.amazonaws.comSustitúyalo por un valor de servicio para la región correspondiente.

  • 123456789012Sustitúyala por la política de IDKey de CMK por la de tu cuenta.

  • Agregue declaraciones de política adicionales para permitir a los administradores de claves administrar la clave KMS. Si no lo hace, se perderá el acceso a la administración de la clave.

Las siguientes declaraciones políticas clave son extensas porque pretenden ser explícitas y mostrar las condiciones que requiere cada acción.

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

Permisos del operador del ciclo de vida de la aplicación (persona que llama a la API)

La siguiente política de IAM garantiza que el operador del ciclo de vida de la aplicación tenga los permisos necesarios para asignar una clave KMS a la aplicación. 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" } } } ] }

Actualice una aplicación existente para usar CMK

En Amazon MSF, puede aplicar una política de CMK a una aplicación existente que utilice Claves propiedad de AWS ()AOKs.

De forma predeterminada, Amazon MSF cifra todos sus datos en un almacenamiento efímero (almacenamiento de aplicaciones en ejecución) y duradero (almacenamiento de aplicaciones duradero). AOKs Esto significa que todos los datos sujetos a un punto de control o una instantánea de Flink se cifran de forma predeterminada. AOKs Al sustituir el AOK por una CMK, los nuevos puntos de control e instantáneas se cifran con la CMK. Sin embargo, las instantáneas históricas permanecerán cifradas con el AOK.

Para actualizar una aplicación existente para que utilice CMK
  1. Cree un archivo JSON con la siguiente configuración.

    Asegúrese de sustituir el valor de CurrentApplicationVersionId por el número de versión actual de la aplicación. Puede obtener el número de versión actual de la aplicación utilizando DescribeApplication.

    En esta configuración de JSON, recuerde reemplazar los sample valores por los valores reales.

    { "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. Guarde este archivo. Por ejemplo, guárdelo con el nombreenable-cmk.json.

  3. Ejecute el AWS CLI comando update-application como se muestra en el siguiente ejemplo. En este comando, proporciona el archivo de configuración JSON que creaste en los pasos anteriores como argumento del archivo.

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

La configuración anterior se acepta para actualizar la aplicación y usar CMK solo si se cumplen las siguientes condiciones:

  • La persona que llama a la API tiene una declaración de política que permite el acceso a la clave.

  • La política de claves tiene una declaración de política que permite a la persona que llama a la API acceder a la clave.

  • La política clave tiene una declaración de política que permite al director de servicio de Amazon MSF, por ejemplo, kinesisanalytics.amazonaws.com acceder a la clave.

Revertir de CMK a Clave propiedad de AWS

Para volver de CMK a un AOK
  1. Cree un archivo JSON con la siguiente configuración.

    En esta configuración de JSON, recuerde reemplazar los sample valores por los valores reales.

    { "ApplicationName": "MyCmkApplication", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationEncryptionConfigurationUpdate": { "KeyTypeUpdate": "AWS_OWNED_KEY" } } }
  2. Guarde este archivo. Por ejemplo, guárdelo con el nombredisable-cmk.json.

  3. Ejecute el AWS CLI comando update-application como se muestra en el siguiente ejemplo. En este comando, proporciona el archivo de configuración JSON que creaste en los pasos anteriores como argumento del archivo.

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