Pourquoi m'est-il impossible de créer ou d'attacher un volume EBS chiffré à l'aide d'une clé AWS KMS personnalisée ?

Date de la dernière mise à jour : 01/09/2020

Pourquoi m'est-il impossible de créer ou d'attacher un volume Amazon Elastic Block Store (Amazon EBS) chiffré à partir d'un instantané chiffré avec une clé gérée par le client AWS Key Management Service (AWS KMS) ?

Brève description

Il est possible que vous ne puissiez pas créer ou attacher un volume EBS chiffré à partir d'un instantané chiffré si votre instantané et la clé KMS personnalisée utilisée pour chiffrer l'instantané se trouvent dans le même compte et ne disposent pas d'autorisations de la stratégie de clé. Veillez à autoriser l'utilisateur ou le rôle AWS Identity and Access Management (IAM) dans la stratégie de clé KMS.

Résolution

Identifier les autorisations manquantes de la stratégie par le biais de l'historique des événements AWS CloudTrail

1.    Ouvrez la console CloudTrail.

2.    Choisissez Historique des événements, puis dans le champ Plage de temps, saisissez une fenêtre de 15 minutes autour des appels d'API AttachVolume ou CreateVolume.

3.    Choisissez Filtre, Source d'événement, puis saisissez kms.amazonaws.com.

4.    Une fois les résultats chargés, sélectionnez le bouton de téléchargement situé dans le coin supérieur droit de la console, puis cliquez sur Télécharger le fichier CSV.

5.    Ouvrez le fichier téléchargé, puis filtrez la colonne Code d'erreur en sélectionnant le critère AccessDenied. Tous les Noms d'événements associés au code d'erreur AccessDenied indiquent généralement des autorisations manquantes.

Remarque : l'affichage des événements CloudTrail sous l'onglet Historique des événements peut prendre jusqu'à 15 minutes. En effet, il est possible qu'Historique des événements soit vide immédiatement après la réception du statut d'échec CreateVolume ou AttachVolume.

Après avoir identifié les autorisations manquantes, suivez ces instructions afin de résoudre le problème :

Vérifiez que la politique de clé KMS inclut l'utilisateur ou le rôle IAM qui tente d'attacher ou de créer le volume.

Depuis la vue par défaut de la console AWS KMS :

1.    Ouvrez la console AWS KMS.

2.    Choisissez Clés gérées par le client, puis sélectionnez la clé appropriée.

3.    Sous l'onglet Politique de clé, faites défiler l'écran jusqu'à la section Utilisateurs de clé. Assurez-vous que la sectionUtilisateurs de clé contient l'utilisateur ou le rôle IAM que vous utilisez pour créer le volume.

4.    Si la section Utilisateurs de clé ne comprend pas l’utilisateur ou le rôle, choisissez Ajouter, sélectionnez l'utilisateur ou le rôle adéquat, puis cliquez sur Ajouter.

Depuis la vue Politique de la console AWS KMS :

Si vous avez déjà manuellement modifié la politique de clé AWS KMS, celle-ci sera disponible uniquement dans la vue Politique (JSON). Dans l'instruction accordant les autorisations AWS KMS requises, veillez à inclure l'attribut Principal pour l'ARN de l'utilisateur ou du rôle IAM.

Exemple : Politique de clé

Dans cet exemple de stratégie de clé KMS, nous permettons à l'utilisateur UserA d'accéder à la clé Key1 :

{
    "Version": "2012-10-17",
    "Id": "key-consolepolicy-3",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            ...
        },
        {
            "Sid": "Allow access for Key Administrators",
            ...
        },
        {
            "Sid": "Allow use of the keys",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/UserA"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/UserA"
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?