

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
<a name="manage-cmk-api"></a>

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 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.

**Topics**
+ [Creación y asignación de claves de KMS](#create-assign-cmk-api)
+ [Actualización de una aplicación existente para que use CMK](#update-existing-app-use-cmk-api)
+ [Revertir de CMK a Clave propiedad de AWS](#revert-cmk-to-aok-api)

## Creación y asignación de claves de KMS
<a name="create-assign-cmk-api"></a>

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](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) en la *Guía para desarrolladores de AWS Key Management Service *.

**Topics**
+ [Creación de una política de claves de KMS](#create-cmk-kms-key-policy)
+ [Permisos del operador del ciclo de vida de la aplicación (emisor que llama a la API)](#create-cmk-kms-api-caller-permissions)

### Creación de una política de claves de KMS
<a name="create-cmk-kms-key-policy"></a>

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::123456789012:role/Operator` por el rol **Operator**. Debe crear el rol o el usuario de **Operator** antes de crear la política de clave. Si no lo hace, su solicitud no avanzará.
+ Sustituya `arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication` por el ARN de la aplicación.
+ Sustituya `kinesisanalytics.us-east-1.amazonaws.com` por un valor de servicio para la región correspondiente.
+ *123456789012*Sustitúyala por la política de IDKey de CMK de su cuenta.
+ Agregue declaraciones de política adicionales para [permitir que los administradores de claves administren la clave de KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#key-policy-default-allow-administrators). 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)
<a name="create-cmk-kms-api-caller-permissions"></a>

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*

------
#### [ 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"
                }
            }
        }
    ]
}
```

------

## Actualización de una aplicación existente para que use CMK
<a name="update-existing-app-use-cmk-api"></a>

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](how-fault.md) o una [instantánea](how-snapshots.md) 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 use 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 su aplicación utilizando. [DescribeApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_DescribeApplication.html)

   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"
           }
       }
   }
   ```

1. Guarde este archivo. Por ejemplo, guárdalo con el nombre **enable-cmk.json**.

1. Ejecute el AWS CLI comando [update-application](https://docs.aws.amazon.com/cli/latest/reference/kinesisanalyticsv2/update-application.html) 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.

## Revertir de CMK a Clave propiedad de AWS
<a name="revert-cmk-to-aok-api"></a>

**Reversión 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"
           }
       }
   }
   ```

1. Guarde este archivo. Por ejemplo, guárdalo con el nombre **disable-cmk.json**.

1. Ejecute el AWS CLI comando [update-application](https://docs.aws.amazon.com/cli/latest/reference/kinesisanalyticsv2/update-application.html) 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
   ```