Passer au contenu

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

Lecture de 10 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

En tant qu’administrateur de compte, vous pouvez accorder aux utilisateurs d’un autre compte un accès intercompte à des objets dont vous êtes propriétaire dans votre compte.

Vous pouvez accorder des autorisations pour des ressources S3 spécifiques qui ne requièrent pas un accès administratif complet.

Utilisez l'une des méthodes suivantes pour accorder un accès intercompte aux 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 vous activez le paramètre Propriétaire du compartiment appliqué, Amazon S3 désactive toutes les ACL de compartiment et d'objet. Par conséquent, vous ne pouvez pas utiliser les ACL pour accorder un accès intercompte. Par défaut, l'option Propriétaire du compartiment appliqué est activée 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 plus d’informations, consultez la section Contrôle de la propriété des objets et désactivation des ACL pour un compartiment.
  • Rôles IAM intercompte pour accorder un accès par programmation et via la console aux objets du compartiment S3.

Si le demandeur est un principal de rôle IAM, le compte propriétaire du principal doit accorder les autorisations du compartiment 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 par programmation aux compartiments intercompte est identique à l’accès aux compartiments de comptes.

Pour l'accès intercompte via des points d'accès Amazon S3 ou AWS Key Management Service (AWS KMS), une configuration supplémentaire est requise. Pour plus d’informations, consultez la section Pourquoi les utilisateurs intercompte reçoivent-ils des erreurs d'accès refusé lorsqu'ils tentent d'accéder à mes objets S3 que j'ai chiffrés avec une clé gérée par le client AWS KMS ?

Pour les jeux de données volumineux auxquels vous devez accéder en tant qu’objets intercompte, il est recommandé d’utiliser des points d’accès S3. Pour en savoir plus, consultez la section Simplifier et mettre à l’échelle la gestion de l’accès à des jeux de données partagés avec des points d’accès Amazon S3 intercompte.

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 des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Dans les procédures 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.

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

Pour gérer 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 qui définit les éléments principal, ressource et action.Lorsque vous appliquez une politique de compartiment au niveau du compartiment, vous pouvez définir un accès aux différents objets du compartiment. Vous pouvez également consulter la politique de 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 :

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

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

  3. Accordez à l'utilisateur ou au rôle IAM du compte B les autorisations GetObject et PutObject. Accordez également à l'utilisateur ou au rôle IAM l'autorisation d'appeler PutObjectAcl, ce qui accorde l'autorisation d'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 : Dans la politique précédente, remplacez les exemples de valeurs par les valeurs de l'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 Ressource, comme « arn:aws:s3:::AccountABucketName/FolderName/* ». Pour plus d’informations, consultez la section Comment puis-je autoriser un utilisateur à accéder à un dossier spécifique dans mon compartiment Amazon S3 ? Vous pouvez également exécuter la commande create-policy de l’AWS CLI pour créer une politique basée sur l’identité IAM.

  4. Configurez la politique de compartiment pour le compte A afin d'accorder les autorisations GetObject et PutObject à l'utilisateur ou au rôle IAM que vous avez créé dans le compte B :

    {
        "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 exécuter la commande put-bucket-policy de l'AWS CLI pour créer une politique de compartiment S3.

Pour limiter l’accès à un dossier de compartiment spécifique, définissez le nom du dossier dans l’élément Ressource, comme « arn:aws:s3:::AccountABucketName/FolderName/* ». Lorsque vous utilisez l’autorisation s3:PutObject avec une clé de 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. 

Les ACL Amazon S3 permettent aux utilisateurs de définir uniquement les jeux 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 : L’ACL ne prend pas en charge la condition liée à l’opération S3 qu’elle autorise. Par conséquent, 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.

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 utilisateur ou un rôle 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. L’autorisation WRITE permet aux rôles ou aux utilisateurs IAM du compte B de 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’identifiant CanonicalUserID, consultez la section Trouver un Compte AWS ID utilisateur canonique.

  4. Configurez les ACL des objets de manière à inclure au minimum l’autorisation READ pour le compte B. L’autorisation READ permet aux rôles ou aux utilisateurs IAM du compte B de 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 vous appliquez une ACL. Pour plus d’informations, consultez la section 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.

Rôles IAM intercompte

Les services AWS ne prennent pas tous en charge les politiques basées sur les ressources. À la place, utilisez les rôles IAM intercompte 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 intercompte, vous devez modifier l’ACL de l’objet. Pour plus d’informations, consultez la section Autorisation Amazon S3 des demandes d’opération sur des objets.

Pour utiliser les rôles IAM intercompte 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 d’approbation du rôle, accordez à un rôle ou à un utilisateur du compte B les autorisations nécessaires pour endosser 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 d’approbation qui définit les principaux pouvant endosser 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 endossant 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 d’approbation.

    La stratégie d’accès suivante permet à un utilisateur qui a endossé le rôle donné de télécharger et de charger des objets par programmation à l’aide de la console Amazon S3. Si vous nécessitez uniquement un accès par programmation, 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/*"
            }
        ]
    }

    Pour plus d’informations, consultez la section Comment puis-je autoriser un utilisateur à accéder à un dossier spécifique dans mon compartiment Amazon S3 ? 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 endosser 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 également 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, endossez le rôle du compte A afin que les identités IAM du compte B puissent exécuter les opérations S3 requises. 
    Remarque : Lorsque vous endossez 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 plus d'informations, consultez la section Actions de politique pour Amazon S3.

Informations connexes

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

Exemples de politiques relatives aux compartiments Amazon S3

Exemples de politiques basées sur l'identité pour Amazon S3

Logique d'évaluation des politiques intercompte

AWS OFFICIELA mis à jour il y a 9 mois