Je souhaite résoudre l'erreur « Accès refusé » 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 les 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
Vérifiez l'identité AWS Identity and Access Management (IAM) que vous avez utilisée avec CreateChangeSet ou CreateStack. Assurez-vous que l'utilisateur ou le rôle IAM dispose des autorisations nécessaires. Si nécessaire, attachez 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:::DOC-EXAMPLE-BUCKET/*"
}
]
}
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 s'il ne contient pas de fautes de frappe, procédez comme suit :
Vérifiez que l'URL du modèle spécifiée pour la pile imbriquée est valide. Exécutez la commande list-objects de l’AWS CLI pour répertorier l'objet :
aws s3 list-objects --bucket DOC-EXAMPLE-BUCKET --prefix file-path/template-file.json
Assurez-vous que l'URL du modèle ne contient aucun espace supplémentaire. Les fautes de frappe peuvent provoquer l'erreur S3 Accès refusé.
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 Refuser explicite pour le rôle IAM, procédez comme suit :
- Ouvrez la console Amazon S3.
- Dans la liste de compartiments, ouvrez le compartiment qui contient le fichier modèle.
- Sélectionnez l’onglet Autorisations.
- Accédez au segment de stratégie de compartiment.
- Recherchez les instructions avec « Effet » : « Refuser ».
- Modifiez la stratégie de compartiment pour mettre à jour toutes les instructions « Effet » : « Refuser » qui interdisent au rôle IAM l'accès à s3:GetObject ou s3:GetObjectVersion.
- Supprimez le rôle IAM que vous utilisez avec CloudFormation.
- Sélectionnez Enregistrer.
- Créez ou mettez à jour à nouveau la pile.
Pour plus d'informations sur les stratégies de compartiment S3, consultez la section Exemples de stratégies de compartiment.
Valider les paramètres de chiffrement sur le compartiment S3 et activez l'accès KMS pour le rôle IAM
L'erreur S3 Accès refusé 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 le compartiment est chiffré, mettez à jour la stratégie de clé pour permettre à l'identité IAM d'accéder à la clé KMS.
Procédez comme suit :
- Ouvrez la console AWS KMS.
- Recherchez la clé utilisée pour chiffrer les objets du compartiment S3, puis sélectionnez l’onglet Stratégie de clé.
- 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:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}
Remarque : 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 chargements depuis et vers le compartiment ?
Vérifier les autorisations ACL de l'objet pour le fichier modèle
Parfois, un fichier modèle peut être chargé à partir d'un autre compte, mais le compte source est propriétaire du fichier. Cette action refuse à l'utilisateur du compte cible l'accès 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.
Exécutez la commande put-object de l'AWS CLI suivante pour donner accès au compartiment :
aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file --acl bucket-owner-full-control
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.