Ma stratégie de compartiment accorde un accès total à un autre compte AWS. Pourquoi les utilisateurs IAM de ce compte continuent-ils à recevoir des erreurs de refus d'accès ?

Date de la dernière mise à jour : 27/03/2020

La stratégie de mon compartiment Amazon Simple Storage Service (Amazon S3) accorde un accès complet à un autre compte AWS. Toutefois, lorsque les utilisateurs AWS Identity and Access Management (IAM) de ce compte tentent d'accéder à mon compartiment, ils sont confrontés à une erreur de refus d'accès. Comment éliminer cette erreur ? 

Brève description

Si votre stratégie de compartiment accorde déjà l'accès à l'autre compte, les utilisateurs bénéficiant d'accès entre comptes peuvent faire face à des erreurs de refus d'accès pour les raisons suivantes :

  • La stratégie IAM de l'utilisateur n'accorde pas l'accès au compartiment.
  • L'objet est chiffré par AWS Key Management Service (AWS KMS), et l'utilisateur n'a pas accès à la clé KMS.
  • Une instruction de refus dans la stratégie de compartiment ou une stratégie IAM bloque l'accès de l'utilisateur.
  • La stratégie de point de terminaison Amazon Virtual Private Cloud (Amazon VPC) bloque l'accès au compartiment.
  • La stratégie de contrôle de service AWS Organizations bloque l'accès au compartiment.
  • L'objet n'appartient pas au compte AWS qui possède le compartiment.
  • Le paiement par le demandeur est activé sur le compartiment.

Solution

La stratégie IAM de l'utilisateur n'accorde pas l'accès au compartiment.

Pour l'accès entre comptes, l'accès au compartiment doit être accordé à l’utilisateur dans la stratégie IAM dans le compte A et la stratégie de compartiment dans le compte B.

Suivez les étapes ci-dessous pour vérifier la stratégie IAM de l'utilisateur dans le compte A :

1.    Ouvrez la console IAM.

2.    Dans la console, ouvrez l'utilisateur ou le rôle IAM qui doit accéder au compartiment.

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

4.    Dans les documents de stratégie JSON, rechercher les stratégies portant le nom du compartiment. Ensuite, vérifiez que ces stratégies autorisent les actions S3 correctes sur le compartiment.

5.    Si l'utilisateur ou le rôle IAM n'accorde pas l'accès au compartiment, ajouter une stratégie qui accorde les autorisations appropriées. Par exemple, la stratégie IAM suivante accorde à un utilisateur l'accès à toutes les actions S3 sur awsexamplebucket :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::awsexamplebucket/",
        "arn:aws:s3:::awsexamplebucket/*"
      ]
    }
  ]
}

L'objet est chiffré par AWS KMS, et l'utilisateur n'a pas accès à la clé KMS.

Si la stratégie IAM dans le compte A et la stratégie de compartiment dans le compte B accordent l'accès entre comptes, vérifiez les propriétés de chiffrement de l'objet. Si un objet est chiffré par une clé AWS KMS, l'utilisateur doit aussi être autorisé à utiliser la clé.

Suivez les étapes ci-dessous pour autoriser l'utilisateur IAM à accéder à la clé KMS :

1.    Modifier la stratégie de clé KMS pour ajouter une instruction similaire à celle-ci :

Remarque : saisissez le nom ARN (Amazon Resource Name) de l'utilisateur en tant que mandataire.

{
   "Sid": "Allow use of the key",
   "Effect": "Allow",
   "Principal": {
     "AWS": [
       "arn:aws:iam::111122223333:user/Jane",
     ]
   },
   "Action": [
     "kms:Encrypt",
     "kms:Decrypt",
     "kms:ReEncrypt*",
     "kms:GenerateDataKey*",
     "kms:DescribeKey"
   ],
   "Resource": "*"
 }

2.    Si la clé KMS appartient au même compte que l'utilisateur IAM, l'instruction dans la stratégie de clé est suffisante pour permettre à l'utilisateur d'accéder à la clé. Si la clé KMS appartient à un compte différent de celui de l'utilisateur IAM, vous devez également mettre à jour les autorisations de l'utilisateur IAM. Ajoutez une stratégie IAM similaire à celle-ci :

Remarque : saisissez le nom ARN de la clé KMS en tant que ressource.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ExampleStmt3",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*"
            ],
            "Resource": "arn:aws:kms:example-region-1:123456789098:key/a1b2c3d4-e5f6-7890-g1h2-123456789abc"
        }
    ]
}

Une instruction de refus dans la stratégie de compartiment ou une stratégie IAM bloque l'accès utilisateur.

Recherchez dans la stratégie de compartiment et les stratégies IAM de l'utilisateur les instructions qui interdisent explicitement à l'utilisateur d'accéder au compartiment.

Procédez comme suit pour vérifier la stratégie de compartiment :

1.    Ouvrez la console Amazon S3.

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

3.    Choisissez l’onglet Permissions (Autorisations).

4.    Choisissez Bucket Policy (Stratégie de compartiment).

5.    Recherchez les instructions avec « Effet » : « Rejeter ».

6.    Modifier la stratégie de compartiment pour modifier ou supprimer les instructions "Effect": "Deny" qui empêchent l'utilisateur d’accéder au compartiment.

Exécutez les étapes suivantes pour vérifier les stratégies IAM de l'utilisateur :

1.    Ouvrez la console IAM.

2.    Dans la console, ouvrez l'utilisateur ou le rôle IAM qui ne peut pas accéder au compartiment.

3.    Dans l'onglet Permissions (Autorisations) de l’utilisateur ou du rôle IAM, agrandissez la fenêtre de chaque stratégie pour afficher les documents de stratégie JSON.

4.    Dans le document de stratégie JSON, recherchez les stratégies associées au compartiment S3 ayant des instructions qui contiennent « Effet » : « Deny ».

5.    Modifier les stratégies d'autorisations IAM pour modifier ou supprimer les instructions "Effect": "Deny" qui empêchent l'utilisateur d'accéder au compartiment.

La stratégie de point de terminaison de VPC bloque l'accès au compartiment.

Si les utilisateurs accèdent au compartiment avec une instance Amazon Elastic Compute Cloud (Amazon EC2) routée via un point de terminaison de VPC, vérifiez la stratégie du point de terminaison. Vérifiez que la stratégie de point de terminaison d’un VPC contient les autorisations correctes pour accéder au compartiment S3.

Par exemple, la stratégie de point de terminaison d’un VPC suivante autorise l'accès à awsexamplebucket :

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::awsexamplebucket",
        "arn:aws:s3:::awsexamplebucket/*"
      ],
      "Principal": "*"
    }
  ]
}

La stratégie de contrôle de service AWS Organizations bloque l'accès au compartiment.

Si AWS Organizations est activé sur le compte de l'utilisateur, vérifiez les politiques de contrôle des services pour déterminer si l'accès à Amazon S3 est autorisé. Par exemple, la stratégie suivante refuse explicitement l'accès à Amazon S3 et induit un refus d'accès.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Pour plus d'informations sur les fonctions d'AWS Organizations, consultez Activation de toutes les fonctions de votre organisation.

L'objet n'appartient pas au compte AWS qui possède le compartiment.

Par défaut, un objet S3 est détenu par le compte AWS qui l'a chargé. C’est le cas même si le compartiment est détenu par un autre compte. Les autorisations du compartiment ne s'appliquent pas automatiquement à un objet lorsque l'objet est détenu par un autre compte. C'est le cas avec les journaux de service envoyés à un compartiment dans un autre compte. Les journaux AWS CloudTrail ou les journaux de flux Amazon Virtual Private Cloud (Amazon VPC) sont des exemples de journaux de service.

Pour résoudre les erreurs d'accès refusé à partir de la propriété d'objet :

1.    Le propriétaire de l'objet doit explicitement accorder au propriétaire du compartiment le contrôle total de l'objet.

2.    Ensuite, pour appliquer le changement de propriété, le propriétaire du compartiment doit copier l'objet sur lui-même. Pour ce faire, le propriétaire du compartiment peut exécuter la commande cp qui ressemble à ceci :

aws s3 cp s3://awsexamplebucket/awsexampleobject  s3://awsexamplebucket/awsexampleobject  --metadata-directive REPLACE

Une fois que le propriétaire du compartiment a copié l'objet sur lui-même, l'objet appartient au compte du propriétaire du compartiment.

Paiement par le demandeur activé sur le compartiment

Si le compartiment a le Paiement par le demandeur activé, les utilisateurs d'autres comptes doivent spécifier le paramètre request-payer lorsqu'ils envoient des requêtes au compartiment. Sinon, ces utilisateurs obtiennent une erreur de refus d'accès.

Pour les demandes GET, HEAD ou POST, l'utilisateur doit inclure le paramètre x-amz-request-payer dans l'en-tête. Pour les demandes REST, l'utilisateur doit inclure le paramètre x-amz-request-payer dans la demande.

Pour les commandes d'interface de ligne de commande (CLI AWS), l'utilisateur doit inclure le paramètre --request-payer, comme dans l'exemple suivant :

aws s3 cp exampleobject.jpg s3://awsexamplebucket/exampleobject.jpg --request-payer requester