Amazon Managed Service para Apache Flink Amazon (Amazon MSF) se denominaba anteriormente Amazon Kinesis Data Analytics para Apache Flink.
Administrar CMK mediante la API
En este tema se describe cómo crear y actualizar las CMK de KMS con las API de Amazon MSF. Para seguir los procedimientos descritos en este tema, debe tener permiso para administrar la clave de KMS y la aplicación Amazon MSF. Los procedimientos de este tema utilizan una política de claves permisiva, que se utiliza únicamente con fines de demostración y pruebas. No recomendamos utilizar una política de claves 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.
En esta página
Creación y asignación de claves de KMS
Antes de empezar, cree una clave de KMS. Para obtener más información sobre la creación de claves de KMS, consulte Create a KMS key en la Guía para desarrolladores de AWS Key Management Service.
En esta sección
Creación de una política de claves de KMS
Para utilizar CMK en Amazon MSF, debe añadir las siguientes entidades principales de servicio a su política de claves: kinesisanalytics.amazonaws.com y infrastructure.kinesisanalytics.amazonaws.com. Amazon MSF utiliza estas entidades principales de servicio para la validación y el acceso a los recursos. Si no incluye estas entidades principales 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 rol de Operator como a las entidades principales de servicio de Amazon MSF kinesisanalytics.amazonaws.com y infrastructure.kinesisanalytics.amazonaws.com a realizar las siguientes operaciones:
-
Descripción de la CMK
-
Cifrado de datos de la aplicación
-
Descifrado de datos de la aplicación
-
Creación de una concesión para una clave
En el siguiente ejemplo se usan roles de IAM. Se puede crear la política de claves para la clave KMS utilizando el siguiente ejemplo como plantilla, pero asegúrese de hacer lo siguiente:
-
Reemplace
arn:aws:iam::por el rol123456789012:role/OperatorOperator. Debe crear el rol o el usuario deOperatorantes de crear la política de clave. Si no lo hace, su solicitud no avanzará. -
Sustituya
arn:aws:kinesisanalytics:us-east-1:por el ARN de la aplicación.123456789012:application/MyCmkApplication -
Sustituya
kinesisanalytics.por un valor de servicio para la región correspondiente.us-east-1.amazonaws.com -
Sustituya
123456789012por la política de idKey de su cuenta para CMK. -
Agregue declaraciones de política adicionales para permitir que los administradores de claves administren la clave de KMS. Si no lo hace, se perderá el acceso a la administración de claves.
Las siguientes declaraciones de políticas de claves 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 (emisor 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 de KMS a la aplicación, myCMKApplication.
Actualización de una aplicación existente para que use CMK
En Amazon MSF, puede aplicar una política de CMK a una aplicación existente que utilice Claves propiedad de AWS (AOK).
De forma predeterminada, Amazon MSF utiliza los AOK para cifrar todos los datos en un almacenamiento efímero (almacenamiento de aplicaciones en ejecución) y duradero (almacenamiento de aplicaciones duradero). Esto significa que todos los datos sujetos a un punto de control o una instantánea de Flink se cifrarán de forma predeterminada mediante AOK. 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 use CMK
-
Cree un archivo JSON con la siguiente configuración.
Asegúrese de sustituir el valor de
CurrentApplicationVersionIdpor el número de versión actual de la aplicación. Se puede obtener el número de versión actual de la aplicación mediante DescribeApplication.En esta configuración de JSON, recuerde reemplazar los valores de
muestrapor 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 -
Guarde este archivo. Por ejemplo, guárdalo con el nombre
enable-cmk.json. -
Ejecute el comando update-application de la AWS CLI como se muestra en el siguiente ejemplo: En este comando, proporcione el archivo de configuración JSON que creó en los pasos anteriores como argumento del archivo.
aws kinesisanalyticsv2 update-application \ --cli-input-json file://enable-cmk.json
Se acepta la configuración anterior para actualizar la aplicación para usar CMK únicamente si se cumplen las siguientes condiciones:
-
El iniciador de 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 que el iniciador de la API tenga acceso a la clave.
-
La política de claves tiene una declaración de política que permite a la entidad de servicio de Amazon MSF, por ejemplo,
kinesisanalytics.amazonaws.com, acceder a la clave.
Reversión de CMK a Clave propiedad de AWS
Reversión de CMK a un AOK
-
Cree un archivo JSON con la siguiente configuración.
En esta configuración de JSON, recuerde reemplazar los valores de
muestrapor los valores reales.{ "ApplicationName": "MyCmkApplication", "CurrentApplicationVersionId":1, "ApplicationConfigurationUpdate": { "ApplicationEncryptionConfigurationUpdate": { "KeyTypeUpdate": "AWS_OWNED_KEY" } } } -
Guarde este archivo. Por ejemplo, guárdalo con el nombre
disable-cmk.json. -
Ejecute el comando update-application de la AWS CLI como se muestra en el siguiente ejemplo: En este comando, proporcione el archivo de configuración JSON que creó en los pasos anteriores como argumento del archivo.
aws kinesisanalyticsv2 update-application \ --cli-input-json file://disable-cmk.json