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

Dernière mise à jour : 09/07/2021

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)

Remarques :

  • Si l'objet est chiffré à l'aide d'une clé KMS gérée par AWS, seul le compte AWS ayant chiffré l'objet peut le lire.
  • Si des limites d'autorisations et des stratégies de session sont définies, cela peut avoir un impact sur les autorisations maximales du demandeur. Par conséquent, il peut également y avoir un impact sur l'accès aux objets.
  • Des restrictions peuvent être spécifiées dans d'autres stratégies telles que les stratégies de point de terminaison d’un VPC et les politiques de contrôle des services. Vérifiez ces stratégies et mettez-les à jour en conséquence.
  • Vous pouvez également contrôler la propriété des objets chargés à l'aide d’Amazon S3 Object Ownership. Si la propriété de l'objet est définie sur « BucketOwnerPreferred », les objets nouvellement écrits par d'autres comptes avec la liste ACL prédéfinie « bucket-owner-full-control » sont transférés au propriétaire du compartiment.

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 cette commande d'AWS Command Line Interface (AWS CLI) pour obtenir l'ID canonique d'Amazon S3 pour le compte :

aws s3api list-buckets --query Owner.ID

Remarque : en cas d'erreurs lors de l'exécution de commandes depuis AWS CLI, assurez-vous d'utiliser la version la plus récente d'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, vous (le propriétaire du compartiment) ne possédez pas l'objet. Pour un objet individuel, le propriétaire de l'objet peut vous accorder le 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"]

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 votre clé KMS appartiennent à des comptes différents, vérifiez que vous disposez des autorisations appropriées. Vos stratégies d’IAM et de clé doivent vous octroyer des autorisations pour les actions KMS requises.