Passer au contenu

Pourquoi l'erreur « S3 error : Access Denied » dans CloudFormation ?

Lecture de 5 minute(s)
0

Je souhaite résoudre l'erreur « Access Denied » d'Amazon Simple Storage Service (Amazon S3) qui s'affiche lorsque je crée ou mets à jour des piles dans AWS CloudFormation.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Résoudre les problèmes liés au rôle IAM ou à la stratégie utilisateur

Assurez-vous que l'utilisateur ou le rôle Gestion des identités et des accès AWS (AWS IAM) que vous avez utilisé avec CreateChangeSet ou CreateStack dispose des autorisations nécessaires. Vous devrez éventuellement attacher une stratégie qui fournit l'autorisation GetObject à l'identité IAM. L'exemple de stratégie suivant inclut l'autorisation GetObject :

{   "Version":"2012-10-17",
     "Statement":[
        {
           "Effect":"Allow",
           "Action":[
              "s3:GetObject",
              "s3:GetObjectVersion"
           ],
           "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
     ]
  }

Remarque : Remplacez amzn-s3-demo-bucket par le nom de votre compartiment.

Vérifier que le fichier modèle existe et qu'il ne contient pas de fautes de frappe

Pour vérifier si le fichier modèle existe et ne contient pas de fautes de frappe, exécutez la commande list-objects de l’AWS CLI :

aws s3 list-objects --bucket amzn-s3-demo-bucket --prefix file-path/template-file.json

Remarque : Remplacez amzn-s3-demo-bucket par le nom de votre compartiment et file-path/template-file.json par votre chemin de fichier et votre fichier modèle. Assurez-vous que l'URL du modèle ne contient pas d’espaces supplémentaires. Les fautes de frappe peuvent provoquer l'erreur « S3 Access Denied » .

Vérifier que le fichier modèle n'est pas vide

Si le fichier modèle existe mais qu'il est vide, l'erreur « S3 Access Denied » peut s'afficher. Pour vérifier si le fichier modèle est vide, exécutez la commande get-object de l’AWS CLI :

aws s3api get-object --bucket amzn-s3-demo-bucket --key key-name template-file.txt

Remarque : Remplacez amzn-s3-demo-bucket par votre compartiment, key-name par votre nom de clé et template-file.txt par votre fichier modèle.

Puis, ouvrez le fichier modèle.

Vérifier l’existence d’instructions de refus explicites dans la stratégie de compartiment S3

Pour vérifier si le compartiment S3 contient une instruction de refus explicite pour le rôle IAM, procédez comme suit :

  1. Ouvrez la console Amazon S3.
  2. Dans le volet de navigation, sélectionnez Compartiments.
  3. Dans la liste déroulante Compartiments, sélectionnez le compartiment qui contient le fichier modèle.
  4. Choisissez l’onglet Autorisations.
  5. Dans Stratégie de compartiment, sélectionnez Modifier.
  6. Recherchez les instructions qui incluent « Effet » : « Refuser ».
  7. Mettez à jour « Effet » : « Refus » qui interdisent au rôle IAM l'accès à s3:GetObject ou s3:GetObjectVersion.
  8. Supprimez le rôle IAM que vous utilisez avec CloudFormation.
  9. Sélectionnez Enregistrer les modifications.
  10. Créez ou mettez à jour à nouveau la pile.

Pour plus d'informations, consultez la section Exemples de stratégies de compartiment Amazon S3.

Valider les paramètres de chiffrement sur le compartiment S3 et activez l'accès KMS pour le rôle IAM

L'erreur « S3 Access Denied » peut s'afficher lorsque le compartiment utilise une clé AWS Key Management Service (KMS) gérée par le client pour activer le chiffrement. Si vous avez chiffré votre compartiment, mettez à jour la stratégie de clé pour permettre à l'identité IAM d'accéder à la clé KMS.

Procédez comme suit :

  1. Ouvrez la console AWS KMS.
  2. Dans le volet de navigation, sélectionnez Clés gérées par le client.
  3. Dans la liste des clés KMS, sélectionnez l'alias ou l'ID de clé de la clé qui chiffre les objets s3, puis cliquez sur l'onglet Stratégie de clé.
  4. Utilisez l'instruction suivante pour mettre à jour la stratégie :
{    "Action": [
      "kms:Decrypt",
      "kms:GenerateDataKey"
    ],
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::111122223333:user/IDENTITY"
    },
    "Resource": "arn:aws:kms:aa-example-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}

Remarque : Remplacez arn:aws:iam::111122223333:user/IDENTITY par l’Amazon Resource Name (ARN) de votre utilisateur IAM et arn:aws:kms:aa-example-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd par votre ARN KMS. Si l'identité IAM se trouve dans un autre compte AWS, consultez la section Mon compartiment Amazon S3 est chiffré par défaut à l'aide d'une clé AWS KMS personnalisée. Comment puis-je autoriser les utilisateurs à effectuer des téléchargements depuis et vers le compartiment ?

Vérifier les autorisations ACL de l'objet pour le fichier modèle

Lorsqu'un compte cible charge un fichier modèle appartenant au compte source, l'utilisateur du compte cible ne peut pas accéder au modèle du compte source. Pour résoudre ce problème, copiez le fichier modèle dans le compartiment S3 afin de donner au propriétaire du compartiment un accès complet au modèle.

Pour donner accès au compartiment, exécutez la commande put-object de l'AWS CLI suivante :

aws s3api put-object --bucket amzn-s3-demo-bucket --key key-name --body path-to-file --acl bucket-owner-full-control

Remarque : Remplacez amzn-s3-demo-bucket par votre compartiment, key-name par votre nom de clé et path-to-file par le chemin d'accès à votre fichier.

Pour plus d'informations sur les listes de contrôle d'accès (ACL), consultez la section Contrôle de la propriété des objets et désactivation des ACL pour votre compartiment.

AWS OFFICIELA mis à jour il y a 4 mois