

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Gestion de CMK à l'aide de APIs
<a name="manage-cmk-api"></a>

Cette rubrique explique comment créer et mettre à jour votre KMS à CMKs l'aide d'Amazon MSF. APIs Pour suivre les procédures décrites dans cette rubrique, vous devez être autorisé à gérer la clé KMS et l'application Amazon MSF. Les procédures décrites dans cette rubrique utilisent une politique de clé permissive, uniquement à des fins de démonstration et de test. Nous **ne recommandons pas** d'utiliser une politique de clé aussi permissive pour les charges de travail de production. Dans les scénarios réels relatifs aux charges de travail de production, les rôles, les autorisations et les flux de travail sont isolés.

**Topics**
+ [Création et attribution de clés KMS](#create-assign-cmk-api)
+ [Mettre à jour une application existante pour utiliser CMK](#update-existing-app-use-cmk-api)
+ [Revenir de CMK à Clé détenue par AWS](#revert-cmk-to-aok-api)

## Création et attribution de clés KMS
<a name="create-assign-cmk-api"></a>

Avant de commencer, créez une clé KMS. Pour plus d'informations sur la création d'une clé KMS, voir [Création d'une clé KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) dans le *Guide du AWS Key Management Service développeur*.

**Topics**
+ [Création d'une politique de clé KMS](#create-cmk-kms-key-policy)
+ [Autorisations d'opérateur du cycle de vie des applications (appelant d'API)](#create-cmk-kms-api-caller-permissions)

### Création d'une politique de clé KMS
<a name="create-cmk-kms-key-policy"></a>

Pour utiliser CMK dans Amazon MSF, vous devez ajouter les principes de service suivants à votre politique clé : et. `kinesisanalytics.amazonaws.com` `infrastructure.kinesisanalytics.amazonaws.com` Amazon MSF utilise ces principes de service pour la validation et l'accès aux ressources. Si vous n'incluez pas ces principes de service, Amazon MSF rejette la demande.

La politique de clé KMS suivante permet à Amazon MSF d'utiliser une clé CMK pour l'application. *MyCmkApplication* Cette politique accorde les autorisations nécessaires à la fois au **Operator** rôle et aux responsables du service Amazon MSF`infrastructure.kinesisanalytics.amazonaws.com`, `kinesisanalytics.amazonaws.com` ainsi que pour effectuer les opérations suivantes :
+ Décrire le CMK
+ Chiffrer les données de l'application
+ Déchiffrer les données de l'application
+ Créez des subventions pour la clé

L'exemple suivant utilise des rôles IAM. Vous pouvez créer la politique de clé pour la clé KMS en utilisant l'exemple suivant comme modèle, mais veillez à effectuer les opérations suivantes : 
+ Remplacez `arn:aws:iam::123456789012:role/Operator` par le **Operator** rôle. Vous devez créer le **Operator** rôle ou l'utilisateur avant de créer la politique clé. Si vous ne le faites pas, votre demande échouera.
+ `arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication`Remplacez-le par l'ARN de votre application.
+ Remplacez `kinesisanalytics.us-east-1.amazonaws.com` par une valeur de service pour la région correspondante.
+ Remplacez *123456789012* par la politique IDKey de votre compte pour CMK.
+ Ajoutez des déclarations de politique supplémentaires pour [permettre aux administrateurs clés d'administrer la clé KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#key-policy-default-allow-administrators). Si vous ne le faites pas, vous perdrez l'accès à la gestion de la clé.

Les déclarations de politique clés suivantes sont volumineuses car elles sont censées être explicites et indiquer les conditions requises pour chaque action.

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

### Autorisations d'opérateur du cycle de vie des applications (appelant d'API)
<a name="create-cmk-kms-api-caller-permissions"></a>

La politique IAM suivante garantit que l'opérateur du cycle de vie de l'application dispose des autorisations nécessaires pour attribuer une clé KMS à l'application. *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"
                }
            }
        }
    ]
}
```

------

## Mettre à jour une application existante pour utiliser CMK
<a name="update-existing-app-use-cmk-api"></a>

Dans Amazon MSF, vous pouvez appliquer une politique CMK à une application existante qui utilise Clés détenues par AWS ()AOKs.

Par défaut, Amazon MSF chiffre toutes vos données dans un stockage éphémère (stockage d'applications en cours d'exécution) et durable (stockage d'applications durable). AOKs Cela signifie que toutes les données soumises à un [point de contrôle](how-fault.md) ou à un [instantané](how-snapshots.md) Flink sont cryptées AOKs par défaut. Lorsque vous remplacez l'AOK par une clé CMK, les nouveaux points de contrôle et les nouveaux instantanés sont chiffrés avec la clé CMK. Cependant, les instantanés historiques resteront chiffrés avec l'AOK.

**Pour mettre à jour une application existante afin d'utiliser CMK**

1. Créez un fichier JSON avec la configuration suivante. 

   Assurez-vous de remplacer la valeur de par le numéro `CurrentApplicationVersionId` de version actuel de l'application. Vous pouvez obtenir le numéro de version actuel de votre application en utilisant [DescribeApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_DescribeApplication.html).

   Dans cette configuration JSON, n'oubliez pas de remplacer les *sample* valeurs par les valeurs réelles.

   ```
   {
       "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. Enregistrez ce fichier. Par exemple, enregistrez-le sous le nom**enable-cmk.json**.

1. Exécutez la AWS CLI commande [update-application](https://docs.aws.amazon.com/cli/latest/reference/kinesisanalyticsv2/update-application.html) comme indiqué dans l'exemple suivant. Dans cette commande, indiquez le fichier de configuration JSON que vous avez créé lors des étapes précédentes en tant qu'argument de fichier.

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

La configuration précédente est acceptée pour mettre à jour l'application afin d'utiliser CMK uniquement si les conditions suivantes sont remplies :
+ L'appelant de l'API dispose d'une déclaration de politique qui autorise l'accès à la clé.
+ La politique clé comporte une déclaration de politique qui permet à l'appelant de l'API d'accéder à la clé.
+ La politique clé comporte une déclaration de politique qui permet au principal du service Amazon MSF, par exemple, `kinesisanalytics.amazonaws.com` d'accéder à la clé.

## Revenir de CMK à Clé détenue par AWS
<a name="revert-cmk-to-aok-api"></a>

**Pour revenir d'un CMK à un AOK**

1. Créez un fichier JSON avec la configuration suivante.

   Dans cette configuration JSON, n'oubliez pas de remplacer les *sample* valeurs par les valeurs réelles.

   ```
   {
       "ApplicationName": "MyCmkApplication",
       "CurrentApplicationVersionId": 1,
       "ApplicationConfigurationUpdate": {
           "ApplicationEncryptionConfigurationUpdate": {
               "KeyTypeUpdate": "AWS_OWNED_KEY"
           }
       }
   }
   ```

1. Enregistrez ce fichier. Par exemple, enregistrez-le sous le nom**disable-cmk.json**.

1. Exécutez la AWS CLI commande [update-application](https://docs.aws.amazon.com/cli/latest/reference/kinesisanalyticsv2/update-application.html) comme indiqué dans l'exemple suivant. Dans cette commande, indiquez le fichier de configuration JSON que vous avez créé lors des étapes précédentes en tant qu'argument de fichier.

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