Comment puis-je résoudre des erreurs 400 liées à un accès refusé au texte chiffré AWS KMS dans AWS Glue ?

Lecture de 5 minute(s)
0

Je reçois une erreur 400 lorsque j'exécute un crawler AWS Glue ou une tâche ETL AWS Glue.

Brève description

Lorsque vous utilisez AWS Glue, vous pouvez recevoir cette erreur lorsque vous essayez d'accéder à des ressources AWS telles que des compartiments Amazon Simple Service Solution (Amazon S3) :

« Le texte chiffré fait référence à une clé principale client qui n'existe pas, qui n'existe pas dans cette région ou à laquelle vous n'êtes pas autorisé à accéder. »

Vous recevez cette erreur lorsque vous accédez à un service AWS chiffré à l'aide de clés AWS Key Management Service (AWS KMS) à l'aide de tâches ou de crawlers AWS Glue. L'erreur est très susceptible de se produire pour l'une des raisons suivantes :

  • Le principal qui tente d'accéder à la clé chiffrée ne dispose pas des autorisations AWS KMS requises
  • La clé AWS KMS n'existe pas ou n'existe pas dans une région AWS spécifique

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous que vous utilisez la version la plus récente d'AWS CLI.

Vérifiez si votre politique de rôles AWS Glue dispose des autorisations requises

Tout d'abord, vérifiez que la politique de rôle AWS Glue que vous utilisez possède les autorisations nécessaires pour accéder à la clé AWS KMS de la ressource.

Supposons, par exemple, que vous ayez un rôle AWS Glue appelé AWSGlue-MyGlueCustomRole. Ce rôle accède à un compartiment S3 chiffré à l'aide de la clé AWS KMS arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07. La politique de rôles d'AWS Glue doit avoir le contexte suivant en plus de ses autres autorisations :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07"
        }
    ]
}

Vérifiez si votre stratégie de clé AWS KMS autorise le rôle AWS Glue

La stratégie de clé AWS KMS doit autoriser le rôle AWS Glue dans le cadre de son entité autorisée.

Dans l'exemple précédent, la clé AWS KMS arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 doit être associée aux autorisations suivantes :

{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::XXXXXXXX9645:role/AWSGlue-MyGlueCustomRole "
        ]
    },
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*"
}

Assurez-vous que la clé AWS KMS existe dans la même région que votre tâche AWS Glue

Pour vérifier dans quelle région se trouve votre clé AWS KMS, procédez comme suit :

1.    Ouvrez la console AWS KMS.

2.    Choisissez la région dans laquelle vous rencontrez l'erreur.

3.    Dans le volet de navigation, choisissez Clés gérées par AWS ou Clés gérées par le client. Recherchez ensuite la clé AWS KMS que vous utilisez. Vous pouvez également utiliser l'AWS CLI pour rechercher la clé AWS KMS. La commande suivante renvoie une erreur NotFoundException si la clé n'existe pas dans la région :

aws kms describe-key --key-id <Key-ID> --region <region-name>

Remarque : Veillez à remplacer <Key-ID>et, <region-name>dans cet exemple, par l'ID de clé et le nom de la région que vous utilisez.

4.    Vérifiez les appels d'API AWS CloudTrail KMS:Decrypt et KMS:Encrypt pour voir si vous constatez des défaillances. Vous pouvez également consulter tous les journaux d'événements en utilisant kms.amazonaws.com comme source d'événements.

Exemple entre comptes

Si le rôle AWS Glue et la clé AWS KMS se trouvent dans des comptes différents, utilisez la clé gérée par le client et non la clé gérée par AWS. Les clés AWS KMS ne peuvent être utilisées que lorsque les principes proviennent du même compte. Vous ne pouvez pas modifier la stratégie de clé gérées par AWS. Lorsque vous accédez à la clé AWS KMS sur le second compte, assurez-vous que les autorisations sont présentes à la fois sur la source et sur la destination.

Supposons que vous souhaitiez autoriser un utilisateur X d'AWS Identity and Access Management (IAM) du compte Y à accéder à une clé AWS KMS du compte Z. Dans ce cas, la politique IAM doit comporter les actions AWS KMS requises. Les mêmes actions doivent être autorisées conformément à la stratégie de clé AWS KMS. Pour plus d'informations, consultez Autorisation des utilisateurs d'autres comptes à utiliser une clé AWS KMS.

Voici les problèmes les plus courants qui se produisent lors de l'accès à une clé AWS KMS à partir d'un compte croisé.

Si le message d'erreur est dû à une politique de contrôle des services (SCP), vérifiez tous les SCP appliqués à votre compte. Cela vous permet d'identifier le SCP qui restreint l'action KMS:Decrypt. Mettez à jour le SCP concerné et réessayez d'agir. Pour plus d'informations, consultez Liste des politiques associées à un compte root, à une unité d'organisation ou à un compte et Mise à jour d'un SCP. Consultez l'exemple suivant de cette erreur :

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 with an explicit deny in a service control policy"

Si une limite d'autorisation est attachée à l'entité IAM, la limite définit les autorisations maximales de l'entité. Vérifiez la limite des autorisations sur le principal IAM pour vous assurer que l'action de déchiffrement AWS KMS requise est autorisée. Réessayez ensuite l'action. Consultez l'exemple suivant de cette erreur :

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no permissions boundary allows the kms:Decrypt action"

Si vous vous connectez à AWS KMS à l'aide d'un point de terminaison VPC, vérifiez la politique de point de terminaison d’un VPC appliquée. Assurez-vous que l'action KMS:Decrypt est autorisée dans la politique. Consultez l'exemple suivant de cette erreur :

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no VPC endpoint policy allows the kms:Decrypt action"

Informations connexes

Configuration du chiffrement dans AWS Glue

Politiques essentielles dans AWS KMS

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an