Comment puis-je fournir un accès intercompte à des objets se trouvant dans des compartiments Amazon S3 ?

Lecture de 11 minute(s)
0

Je souhaite autoriser un autre compte AWS à accéder à un objet qui se trouve dans un compartiment Amazon Simple Storage Service (Amazon S3).

Brève description

Dans Amazon S3, vous pouvez accorder aux utilisateurs d’un autre compte AWS un accès intercompte granulaire à des objets dont vous êtes propriétaire sur votre compte.

Selon le type d’accès que vous souhaitez fournir, vous pouvez utiliser l’une des solutions suivantes pour accorder un accès intercompte à des objets :

  • Politiques de gestion des identités et des accès AWS (AWS IAM) et politiques de compartiment basées sur les ressources pour accorder un accès par programmation uniquement aux objets du compartiment S3
  • Politiques IAM et listes de contrôle d’accès (ACL) basées sur les ressources pour accorder un accès par programmation uniquement aux objets du compartiment S3
    Remarque : lorsque le paramètre Propriétaire du compartiment appliqué est activé, toutes les ACL liées au compartiment et aux objets sont désactivées. Par conséquent, vous ne pouvez pas utiliser les ACL pour accorder un accès intercompte. Par défaut, le paramètre Propriétaire du compartiment appliqué est activé pour tous les compartiments nouvellement créés. Pour gérer l’accès intercompte, il est également recommandé d’utiliser des politiques IAM et des politiques de compartiment plutôt que des ACL. Pour en savoir plus, consultez la page Contrôle de la propriété des objets et désactivation des ACL pour un compartiment.
  • Rôles IAM intercomptes pour accorder un accès par programmation et via la console aux objets du compartiment S3

Si le demandeur est un principal IAM, le compte propriétaire du principal doit accorder les autorisations S3 par le biais d’une politique IAM. En fonction de votre cas d’utilisation, le propriétaire du compartiment doit également accorder des autorisations par le biais d’une politique de compartiment ou d’une ACL. Une fois l’accès accordé, l’accès programmatique aux compartiments intercomptes est identique à l’accès aux compartiments de comptes.

Pour accorder un accès intercompte via des points d’accès Amazon S3 ou AWS Key Management Service (AWS KMS), consultez la page Pourquoi les utilisateurs intercomptes reçoivent-ils des erreurs Accès refusé lorsqu’ils tentent d’accéder à des objets S3 chiffrés par une clé AWS KMS personnalisée ?

Pour les grands jeux de données auxquels vous devez accéder en tant qu’objets intercomptes, il est recommandé d’utiliser des points d’accès S3. Pour en savoir plus, consultez la page Simplification et mise à l’échelle de la gestion de l’accès aux jeux de données partagés grâce à des points d’accès Amazon S3 intercomptes.

Résolution

Politiques IAM et politiques de compartiment basées sur les ressources

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

Pour gérer le contrôle de l’accès intercompte et auditer les autorisations de l’objet S3, utilisez des politiques de compartiment basées sur les ressources. Appliquez une politique de compartiment au niveau du compartiment pour définir les valeurs suivantes :

  • Élément principal : qui peut accéder aux objets contenus dans le compartiment
  • Élément de ressource : les objets accessibles
  • Élément d’action : le mode d’accès aux objets au sein du compartiment

Lorsque vous appliquez une politique de compartiment au niveau du compartiment, vous pouvez définir un accès granulaire aux différents objets du compartiment. Vous pouvez également consulter la politique du compartiment pour savoir qui peut accéder aux objets d’un compartiment S3.

Pour appliquer des politiques de compartiment afin de gérer l’accès au compartiment S3, procédez comme suit :
Remarque : dans les étapes suivantes, le compte A représente votre compte, tandis que le compte B représente le compte auquel vous souhaitez accorder l’accès à un objet. 

  1. Créez un compartiment S3 dans le compte A.

  2. Créez un rôle ou utilisateur IAM dans le compte B.

  3. Autorisez le rôle IAM du compte B à télécharger (GetObject) et à charger (PutObject) des objets depuis et vers un compartiment spécifique. Utilisez la politique IAM pour accorder également au rôle IAM du compte B les autorisations nécessaires pour appeler PutObjectAcl (permettant d’accorder les autorisations liées à l’objet au propriétaire du compartiment) :

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
    
            }
        ]
    }

    Remarque : vous devez modifier la politique pour inclure les variables de votre utilisateur. Vous pouvez également limiter l’accès à un dossier de compartiment spécifique au sein du compte A. Pour ce faire, définissez le nom du dossier en question dans l’élément Resource. Exemple : « arn:aws:s3:::AccountABucketName/FolderName/* ». Pour en savoir plus, consultez la page Comment puis-je autoriser un utilisateur à accéder à un dossier spécifique dans mon compartiment Amazon S3 ?Vous pouvez également créer une politique basée sur l’identité IAM à l’aide de la commande create-policy de l’AWS CLI.

  4. Configurez la politique de compartiment pour le compte A afin d’accorder des autorisations au rôle ou à l’utilisateur IAM que vous avez créé dans le compte B. Utilisez ensuite cette politique de compartiment pour accorder à un utilisateur les autorisations GetObject et PutObject sur les objets d’un compartiment appartenant au compte A :

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
                },
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": [
                    "arn:aws:s3:::AccountABucketName/*"
                ]
            }
        ]
    }

    Vous pouvez également créer une politique de compartiment Amazon S3 à l’aide de la commande put-bucket-policy de l’AWS CLI.

Remarque : pour limiter l’accès à un dossier de compartiment spécifique, définissez le nom du dossier dans l’élément Resource. Exemple : « arn:aws:s3:::AccountABucketName/FolderName/* ». Lorsque vous utilisez l’autorisation s3:PutObject avec une condition, le propriétaire du compartiment exerce un contrôle total sur les objets chargés par les autres comptes. L’appel d’API PutObject applique l’ACL avec des en-têtes spécifiques. 

Politiques IAM et ACL basées sur les ressources

Vous pouvez également utiliser les ACL d’objets pour gérer les autorisations dans des cas spécifiques. Pour en savoir plus, consultez la section Condition d’utilisation d’une stratégie d’accès basée sur les ACL (ACL de compartiment et d’objets).

Les ACL Amazon S3 permettent aux utilisateurs de définir uniquement les ensembles d’autorisations READ, WRITE, READ_ACP, WRITE_ACP et FULL_CONTROL. Seul un compte ou l’un des groupes Amazon S3 prédéfinis peut être utilisé comme bénéficiaire de l’ACL Amazon S3. Lorsque vous spécifiez une adresse e-mail ou un ID utilisateur canonique pour un compte, l’ACL s’applique à toutes les identités du compte bénéficiaire. Par exemple, vous ne pouvez pas utiliser une ACL pour restreindre l’accès à des utilisateurs ou rôles IAM individuels. De même, vous ne pouvez pas appliquer des ACL à différents objets partageant les mêmes préfixes.

Remarque : il est possible que le propriétaire du compartiment n’exerce pas un contrôle total sur les objets chargés par le bénéficiaire de l’ACL. Cela est dû au fait que l’ACL ne prend pas en charge la condition liée à l’opération S3 qu’elle autorise.

Pour utiliser des ACL de compartiment et d’objet afin de gérer l’accès au compartiment S3, procédez comme suit :

  1. Créez un rôle ou utilisateur IAM dans le compte B.
  2. Accordez au rôle ou à l’utilisateur les autorisations nécessaires pour effectuer les opérations Amazon S3 requises. Les utilisateurs qui appellent PutObject et GetObject doivent disposer des autorisations répertoriées dans la section Politiques basées sur les ressources et politiques IAM.
  3. Configurez l’ACL du compartiment de manière à inclure au minimum l’autorisation WRITE pour le compte B. Les rôles IAM ou utilisateurs du compte B pourront ainsi charger des objets dans un compartiment appartenant au compte A :
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> WRITE </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    Remarque : pour trouver l’CanonicalUserID, consultez la section Recherche d’un ID d’utilisateur canonique de compte AWS.
  4. Configurez les ACL des objets de manière à inclure au minimum l’autorisation READ pour le compte B. Les rôles IAM ou utilisateurs du compte B pourront ainsi télécharger des objets depuis un compartiment appartenant au compte A :
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> READ </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    Les autorisations ACL varient en fonction de la ressource, du compartiment ou de l’objet S3 auquel l’ACL est appliquée. Pour en savoir plus, consultez la page Présentation de la liste de contrôle d’accès (ACL). Lorsque vous créez un compartiment ou que vous chargez un objet dans un compartiment existant, configurez des ACL de compartiment et d’objets. Pour en savoir plus, consultez la page Configuration de listes de contrôle d’accès.

Rôles IAM intercomptes

Les services AWS ne prennent pas tous en charge les politiques basées sur les ressources. Utilisez les rôles IAM intercomptes pour centraliser la gestion des autorisations lorsque vous accordez un accès intercompte à plusieurs services. Cette méthode offre un accès intercompte aux objets appartenant à un autre compte ou service AWS ou chargés par celui-ci. Si vous n’utilisez pas de rôles IAM intercomptes, vous devez modifier l’ACL de l’objet. Pour en savoir plus, consultez la page Autorisation Amazon S3 des demandes d’opération sur des objets.

Pour utiliser les rôles IAM intercomptes afin de gérer l’accès au compartiment S3, procédez comme suit :

  1. Créez un rôle IAM dans le compte A.
  2. Accordez au rôle les autorisations nécessaires pour effectuer les opérations S3 requises. Dans la politique de confiance du rôle, accordez à un rôle ou à un utilisateur du compte B les autorisations nécessaires pour assumer le rôle dans le compte A :
    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    Remarque : les rôles IAM doivent disposer d’une politique de confiance qui définit les principaux pouvant assumer les rôles et à quel moment. Les rôles IAM peuvent comprendre plusieurs politiques d’autorisations qui définissent les opérations que le principal assumant le rôle est autorisé à exécuter et sur quelles ressources. 
    Vous pouvez également exécuter la commande create-role de l’AWS CLI pour créer un rôle avec la politique de confiance.
    La stratégie d’accès suivante permet à un utilisateur qui a assumé le rôle donné de télécharger et de charger des objets par programmation via la console Amazon S3. Pour en savoir plus, consultez la page Comment puis-je autoriser un utilisateur à accéder à un dossier spécifique dans mon compartiment Amazon S3 ?
    Remarque : si seul un accès par programmation est requis, vous pouvez supprimer les deux premières instructions de la politique :
    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "s3:ListAllMyBuckets"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::*"
                ]
            },
            {
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:s3:::AccountABucketName"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
            }
        ]
    }
    Vous pouvez également exécuter la commande create-policy de l’AWS CLI pour créer une politique basée sur l’identité IAM.
  3. Accordez à un rôle ou utilisateur IAM du compte B les autorisations nécessaires pour assumer le rôle IAM que vous avez créé dans le compte A. Vous devez ajouter l’exemple de politique suivant en tant que politique d’autorisations de l’utilisateur ou rôle IAM :
    {  "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::AccountA:role/AccountARole"
      }
    }
    Vous pouvez aussi exécuter la commande create-policy de l’AWS CLI pour créer une politique basée sur l’identité IAM.
  4. À partir d’un rôle du compte B, assumez le rôle du compte A afin que les identités IAM du compte B puissent exécuter les opérations S3 requises. Pour en savoir plus, consultez la page Changement de rôle (console).
    Remarque : lorsque vous assumez un rôle IAM dans le compte A, Amazon S3 détermine l’opération en fonction de la stratégie d’accès. Le rôle IAM fonctionne comme un appel d’API invoqué par une identité IAM locale du compte A. Une politique de compartiment ou une ACL pour l’accès intercompte n’est pas requise. Pour en savoir plus, consultez la page Actions Amazon S3.

Informations connexes

Actions, ressources et clés de condition pour Amazon S3

Exemples de politiques de compartiment

Consignes relatives à la stratégie d’accès

Configuration de la sauvegarde et de la restauration natives intercomptes dans Amazon RDS for Microsoft SQL Server

Exemples de politiques de rôle et d’utilisateur

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 mois