Pourquoi est-il impossible d'accéder à un dossier ou un fichier dans mon compartiment Amazon S3 ?

Date de la dernière mise à jour : 20/10/2020

Je n'arrive pas à accéder à un préfixe ou à un objet particulier qui se trouve dans mon compartiment Amazon Simple Storage Service (Amazon S3). Je peux accéder au reste des données dans le compartiment. Comment puis-je corriger ce problème ?

Brève description

Vérifiez les autorisations suivantes pour les paramètres qui vous refusent l'accès au préfixe ou l'objet :

  • Propriété du préfixe ou de l'objet
  • Restrictions dans la stratégie de compartiment
  • Restrictions dans votre stratégie utilisateur AWS Identity and Access Management (IAM)
  • Autorisations d'accès à l'objet chiffré par AWS Key Management Service (AWS KMS)

Résolution

Propriété du préfixe ou de l'objet

Par défaut, un objet S3 appartient au compte AWS qui l'a chargé. Cela est vrai, même lorsque le compartiment est détenu par un autre compte. Si d'autres comptes peuvent charger des données dans votre compartiment, procédez comme suit pour être autorisé à accéder à l'objet ou au préfixe auquel vous ne pouvez pas accéder :

1.    Exécutez l'interface de ligne de commande AWS (AWS CLI) pour obtenir l'ID canonique d'Amazon S3 pour le compte :

aws s3api list-buckets --query Owner.ID

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

2.    Exécutez cette commande pour obtenir l'ID canonique Amazon S3 du compte qui détient l'objet auquel vous ne pouvez pas accéder :

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html

3.    Si les ID canoniques ne correspondent pas, c'est que vous (le propriétaire du compartiment) ne possédez pas l'objet. Le propriétaire d'un objet individuel peut vous accorder un contrôle total en exécutant cette commande put-object-acl :

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control

Pour les objets dans un préfixe, le propriétaire de l'objet doit recopier le préfixe et vous accorder le contrôle total des objets dans le cadre de l'opération. Par exemple, le propriétaire de l'objet peut exécuter cette commande cp avec le paramètre --acl bucket-owner-full-control :

aws s3 cp s3://DOC-EXAMPLE-BUCKET/abc/ s3://DOC-EXAMPLE-BUCKET/abc/ --acl bucket-owner-full-control --recursive --storage-class STANDARD

Conseil : vous pouvez utiliser une stratégie de compartiment pour exiger que d'autres comptes vous accordent la propriété des objets qu'ils téléchargent dans votre compartiment.

Restrictions dans la stratégie de compartiment

1.    Ouvrez la console Amazon S3.

2.    Dans la liste des compartiments, ouvrez le compartiment avec la stratégie à vérifier.

3.    Sélectionnez l'onglet Permissions (Autorisations).

4.    Sélectionnez Bucket policy (Stratégie de compartiment).

5.    Rechercher les instructions avec "Effect": "Deny". Ensuite, dans ces instructions recherchez les références au préfixe ou à l'objet auquel vous ne pouvez pas accéder.

Par exemple, cette stratégie de compartiment refuse à tout le monde l'accès au préfixe abc/* dans DOC-EXAMPLE-BUCKET :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StatementPrefixDeny",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/abc/*"
        }
    ]
}

6.     Modifiez la stratégie de compartiment pour modifier ou supprimer les instructions "Effect": "Deny" qui vous refusent à tort l'accès au préfixe ou à l'objet.

Restrictions dans votre stratégie utilisateur IAM

1.    Ouvrez la console IAM.

2.    Dans la console, ouvrez l'utilisateur ou le rôle IAM que vous utilisez pour accéder au préfixe ou à l'objet.

3.    Dans l'onglet Permissions (Autorisations) de l’utilisateur ou du rôle IAM que vous utilisez, développez chaque stratégie pour afficher son document de stratégie JSON.

4.    Dans les documents de stratégie JSON, recherchez les stratégies associées à l'accès Amazon S3. Ensuite, recherchez dans ces stratégies toutes les instructions "Effect": "Deny" qui vous empêchent d'accéder au préfixe ou à l'objet.

Par exemple, la stratégie IAM suivante a une instruction "Effect": "Deny" qui empêche l'accès de l'identité IAM au préfixe abc/* dans DOC-EXAMPLE-BUCKET. Ensuite, la stratégie a également une instruction "Effect": "Deny" qui accorde l'accès à DOC-EXAMPLE-BUCKET. Malgré l'instruction "allow" pour l'ensemble du compartiment, l'instruction "deny" explicite empêche l'identité IAM d'accéder au préfixe abc/*.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StatementPrefixDeny",
            "Effect": "Deny",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/abc/*"
            ]
        },
        {
            "Sid": "StatementFullPermissionS3",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
}

5.     Modifiez la stratégie pour modifier ou supprimer les instructions "Effect": "Deny" qui vous refusent incorrectement l'accès au préfixe ou à l'objet.

Autorisations d'accès à l'objet chiffré par la clé AWS KMS

Si un objet est chiffré à l'aide d'une clé AWS KMS, vous aurez besoin des autorisations d'accès à l'objet et à la clé. Suivez les étapes ci-dessous pour vérifier que vous ne pouvez pas accéder à l'objet parce que vous avez besoin d'autorisations d'accès à une clé AWS KMS :

1.    Utilisez la console Amazon S3 pour afficher les propriétés de l'un des objets auxquels vous ne pouvez pas accéder. Vérifiez les propriétés de chiffrement de l'objet.

2.    Si l'objet est chiffré avec une clé CMK (Customer Master Key) AWS KMS, vérifiez la stratégie de la clé CMK. Vérifiez que la stratégie de clé permet à votre identité IAM d'exécuter les actions KMS suivantes :

"Action": [
    "kms:Decrypt",
    "kms:ReEncrypt",
    "kms:GenerateDataKey"
],

3.    Si votre identité IAM ne dispose pas des autorisations d'accès à ces actions, modifiez la stratégie de clé pour accorder les autorisations manquantes.

Important : si votre identité IAM et la clé KMS appartiennent à des comptes différents, votre stratégie IAM et la stratégie de clé doivent vous autoriser à accéder aux actions KMS requises.