Configuration des listes ACL - Amazon Simple Storage Service

Configuration des listes ACL

Cette section explique comment gérer les autorisations d'accès des compartiments et objets S3 à l'aide des listes de contrôle d'accès (ACL). Vous pouvez ajouter des octrois à votre liste ACL de ressource à l'aide de la AWS Management Console, de la,AWS Command Line Interface (interface de ligne de commande), de l'API REST ou des kits AWS SDK.

Les autorisations de compartiment et d'objet sont indépendantes les unes des autres. un objet n'hérite pas des autorisations de son compartiment. Par exemple, si vous créez un compartiment et accordez un accès en écriture à un utilisateur, vous ne pouvez pas accéder à ses objets sauf s'il vous accorde explicitement l'accès.

Vous pouvez accorder des autorisations à d'autres utilisateurs de Compte AWS ou à des groupes prédéfinis. L'utilisateur ou le groupe auquel vous accordez des autorisations est le « bénéficiaire ». Par défaut, le propriétaire, c'est-à-dire le Compte AWS qui a créé le compartiment, dispose des autorisations complètes.

Chaque autorisation accordée pour un utilisateur ou un groupe ajoute une entrée dans la liste ACL associée au compartiment. Les listes ACL répertorient le bénéficiaire et l'autorisation accordée.

La propriété d'objets S3 est un paramètre Amazon S3 au niveau des compartiments que vous pouvez utiliser pour contrôler la propriété des objets qui sont chargés dans votre compartiment, ainsi que pour désactiver ou activer les listes ACL. Par défaut, la propriété d'objets est définie sur le paramètre Propriétaire du compartiment appliqué, et toutes les listes ACL sont désactivées. Lorsque les listes ACL sont désactivées, le propriétaire du compartiment détient tous les objets du compartiment et gère leur accès exclusivement au moyen de politiques de gestion des accès.

La majorité des cas d'utilisation modernes dans Amazon S3 ne nécessitent plus l'utilisation des listes ACL. Nous vous recommandons de maintenir les listes ACL désactivées, sauf dans des circonstances inhabituelles où vous devez contrôler l'accès individuellement pour chaque objet. Lorsque les listes ACL sont désactivées, vous pouvez utiliser des politiques pour contrôler l'accès à tous les objets de votre compartiment, quelle que soit la personne qui les a chargés dans votre compartiment. Pour de plus amples informations, veuillez consulter Consultez Contrôle de la propriété des objets et désactivation des listes ACL pour votre compartiment.

Important

Si votre compartiment utilise le paramètre appliqué par le propriétaire du compartiment pour S3 Object Ownership (Propriété de l'objet S3), vous devez utiliser des stratégies pour accorder l'accès à votre compartiment et aux objets qu'il contient. Quand le paramètre Propriétaire du compartiment appliqué est activé, les demandes de définition des listes de contrôle d'accès (ACL) ou de mise à jour des listes ACL échouent et renvoient le code d'erreur AccessControlListNotSupported. Les demandes de lecture de listes ACL sont toujours prises en charge.

Avertissement

Nous vous recommandons fortement d'éviter d'accorder l'accès en écriture aux groupes Tout le monde (accès public) ou Groupe d'utilisateurs authentifiés (tous les utilisateurs authentifiés par AWS). Pour en savoir plus sur les effets de l'octroi d'un accès en écriture à ces groupes, veuillez consulter Groupes prédéfinis Amazon S3.

La console affiche les autorisations d'accès combinées pour les bénéficiaires en double. Pour voir la liste complète des listes ACL, utilisez l'API REST Amazon S3, AWS CLI, ou les kits SDK AWS.

Le tableau suivant présente les autorisations ACL que vous pouvez configurer pour les compartiments dans la console Amazon S3.

Autorisations ACL de la console Amazon S3 pour les compartiments
Autorisation de la console Autorisation de liste ACL Accès
Objets – Liste READ Elles permettent au bénéficiaire de répertorier les objets dans le compartiment
Objets – Écriture WRITE Elles permettent au bénéficiaire de créer des objets dans le compartiment. Pour les propriétaires de compartiments et d'objets existants, elles permettent également de supprimer et de remplacer ces objets.
ACL de compartiment – Lecture READ_ACP Elles permettent au bénéficiaire de lire la liste ACL du compartiment.
ACL de compartiment – Écriture WRITE_ACP Elles permettent au bénéficiaire d'écrire la liste ACL pour le compartiment applicable.
Tout le monde (accès public) : Objets – Liste READ Elles accordent un accès public en lecture pour les objets se trouvant dans le compartiment. Lorsque vous accordez l'accès à la liste à Tout le monde (accès public), quiconque dans le monde peut accéder aux objets présents dans le compartiment.
Tout le monde (accès public) : ACL de compartiment – Lecture READ_ACP Elles accordent un accès public en lecture pour l'ACL de compartiment. Lorsque vous accordez l'accès en lecture à Tout le monde (accès public), quiconque dans le monde peut accéder à l'ACL de compartiment.

Pour de plus amples informations sur les autorisations ACL, veuillez consulter Présentation de la liste de contrôle d'accès (ACL).

Important

Si votre compartiment utilise le paramètre appliqué par le propriétaire du compartiment pour S3 Object Ownership, vous devez utiliser des stratégies pour accorder l'accès à votre compartiment et aux objets qu'il contient. Quand le paramètre Propriétaire du compartiment appliqué est activé, les demandes de définition des listes de contrôle d'accès (ACL) ou de mise à jour des listes ACL échouent et renvoient le code d'erreur AccessControlListNotSupported. Les demandes de lecture de listes ACL sont toujours prises en charge.

Pour définir des autorisations de listes ACL pour un compartiment
  1. Connectez-vous à AWS Management Console et ouvrez la console Amazon S3 à l'adresse https://console.aws.amazon.com/s3/.

  2. Dans la liste Buckets (Compartiments), choisissez le nom du compartiment pour lequel vous souhaitez définir des autorisations.

  3. Choisissez Permissions.

  4. Sous Liste de contrôle d'accès, choisissez Modifier.

    Vous pouvez modifier les autorisations ACL suivantes pour le compartiment :

    Objets
    • List – Permet au bénéficiaire de lister les objets dans le compartiment.

    • Write (Écriture) – Permet au bénéficiaire de créer des objets dans le compartiment. Pour les propriétaires de compartiments et d'objets existants, elles permettent également de supprimer et de remplacer ces objets.

      Dans la console S3, vous ne pouvez accorder l'accès en écriture qu'au groupe de livraison des journaux S3 et au propriétaire du compartiment (votre Compte AWS). Nous vous recommandons vivement de ne pas accorder l'accès en écriture aux autres bénéficiaires. Toutefois, si vous en avez besoin, vous pouvez utiliser AWS CLI, les kits SDK AWS ou l'API REST.

    ACL du compartiment
    • Read – Permet au bénéficiaire de lire la liste ACL du compartiment.

    • Write – Permet au bénéficiaire d'écrire la liste ACL pour le compartiment applicable.

  5. Pour modifier les autorisations du propriétaire du compartiment, en regard du propriétaire du compartiment (votre Compte AWS), désactivez ou sélectionnez l'une des autorisations ACL suivantes :

    • ObjetsListe ou Écriture

    • ACL de compartimentLecture ou Écriture

    Le propriétaire désigne l'Utilisateur racine d'un compte AWS, et non un utilisateur IAM AWS Identity and Access Management. Pour de plus amples informations sur l'utilisateur root, veuillez consulter la section Utilisateur racine d'un compte AWS du Guide de l'utilisateur IAM.

  6. Pour octroyer ou annuler des autorisations pour le grand public (tout le monde sur Internet), en regard de Tout le monde (accès public), désactivez ou sélectionnez l'une des autorisations ACL suivantes :

    • ObjetsListe

    • ACL de compartimentLecture

    Avertissement

    Soyez vigilant lorsque vous accordez au groupe Tout le monde l'accès public à votre compartiment S3. Lorsque vous accordez l'accès à ce groupe, tout le monde peut accéder à votre compartiment. Nous vous recommandons vivement de ne jamais accorder un type d'accès en écriture public quel qu'il soit à votre compartiment S3.

  7. Pour octroyer ou annuler des autorisations à toute personne disposant d'un Compte AWS, à côté du Groupe des utilisateurs authentifiés (toute personne disposant d'un Compte AWS), désactivez ou sélectionnez l'une des autorisations ACL suivantes :

    • ObjetsListe

    • ACL de compartimentLecture

  8. Pour octroyer ou annuler des autorisations à Amazon S3 pour écrire des journaux d'accès au serveur dans le compartiment, sous Groupe de mise à disposition des journaux S3, désactivez ou sélectionnez l'une des autorisations ACL suivantes :

    • ObjetsListe ou Écriture

    • ACL de compartimentLecture ou Écriture

      Si un compartiment est configuré en tant que compartiment cible (les journaux d'accès y seront stockés), les autorisations sur ce compartiment doivent autoriser le groupe Livraison des journaux à disposer d'un accès en écriture sur le compartiment. Lorsque vous activez la journalisation des accès serveur sur un compartiment, la console Amazon S3 accorde au groupe Log Delivery (Livraison des journaux) un droit d'accès en écriture sur le compartiment que vous avez choisi pour la réception des journaux. Pour en savoir plus sur la journalisation des accès au serveur, consultez Activation de la journalisation des accès au serveur Amazon S3.

  9. Pour accorder l'accès à un autre Compte AWS, procédez comme suit :

    1. Choisissez Ajouter un bénéficiaire.

    2. Dans la zone Bénéficiaire, saisissez l'ID canonique de l'autre Compte AWS.

    3. Sélectionnez l'une des autorisations ACL suivantes :

      • ObjetsListe ou Écriture

      • ACL de compartimentLecture ou Écriture

    Avertissement

    Lorsque vous accordez à d'autres Comptes AWS l'accès à vos ressources, sachez que les Comptes AWS peuvent déléguer leurs autorisations aux utilisateurs sous leurs comptes. Il s'agit d'un accès entre comptes. Pour de plus amples informations sur l'utilisation de l'accès entre comptes, veuillez consulter Création d'un rôle pour la délégation d'autorisations à un utilisateur IAM dans le Guide de l'utilisateur IAM.

  10. Pour supprimer l'accès à un autre Compte AWS, sous Access for other Comptes AWS (Accès pour d'autres comptes), choisissez Remove (Supprimer).

  11. Choisissez Enregistrer pour enregistrer les modifications.

La console affiche les autorisations d'accès combinées pour les bénéficiaires en double. Pour voir la liste complète des listes ACL, utilisez l'API REST Amazon S3, AWS CLI, ou les kits SDK AWS. Le tableau suivant présente les autorisations ACL que vous pouvez configurer pour les objets dans la console Amazon S3.

Autorisations ACL de la console Amazon S3 pour les objets
Autorisation de la console Autorisation de liste ACL Accès
Objet – Lecture READ Elles permettent au bénéficiaire de lire les données de l'objet et ses métadonnées.
ACL de l'objet – Lecture READ_ACP Elles permettent au bénéficiaire de lire la liste ACL de l'objet.
ACL de l'objet – Écriture WRITE_ACP Elles permettent au bénéficiaire d'écrire la liste ACL pour l'objet applicable

Pour de plus amples informations sur les autorisations ACL, veuillez consulter Présentation de la liste de contrôle d'accès (ACL).

Important

Si votre compartiment utilise le paramètre appliqué par le propriétaire du compartiment pour S3 Object Ownership, vous devez utiliser des stratégies pour accorder l'accès à votre compartiment et aux objets qu'il contient. Quand le paramètre Propriétaire du compartiment appliqué est activé, les demandes de définition des listes de contrôle d'accès (ACL) ou de mise à jour des listes ACL échouent et renvoient le code d'erreur AccessControlListNotSupported. Les demandes de lecture de listes ACL sont toujours prises en charge.

Pour définir des autorisations de liste ACL pour un objet
  1. Connectez-vous à AWS Management Console et ouvrez la console Amazon S3 à l'adresse https://console.aws.amazon.com/s3/.

  2. Dans la liste Buckets (Compartiments), choisissez le nom du compartiment qui contient l'objet.

  3. Dans la liste Objets, sélectionnez le nom de l'objet pour lequel vous souhaitez définir des autorisations.

  4. Choisissez Permissions.

  5. Sous Liste de contrôle d'accès (ACL), sélectionnez Modifier.

    Vous pouvez modifier les autorisations ACL suivantes pour l'objet :

    Objet
    • Read – Permet au bénéficiaire de lire les données de l'objet et ses métadonnées.

    Liste ACL de l'objet
    • Read – Permet au bénéficiaire de lire la liste ACL de l'objet.

    • Write – Permet au bénéficiaire d'écrire la liste ACL pour l'objet applicable. Dans la console S3, vous ne pouvez accorder l'accès en écriture qu'au propriétaire du compartiment (votre Compte AWS). Nous vous recommandons vivement de ne pas accorder l'accès en écriture aux autres bénéficiaires. Toutefois, si vous en avez besoin, vous pouvez utiliser AWS CLI, les kits SDK AWS ou l'API REST.

  6. Vous pouvez gérer les autorisations d'accès aux objets pour :

    1. Accès pour le propriétaire de l'objet

      Le propriétaire désigne l'Utilisateur racine d'un compte AWS, et non un utilisateur IAM AWS Identity and Access Management. Pour de plus amples informations sur l'utilisateur root, veuillez consulter la section Utilisateur racine d'un compte AWS du Guide de l'utilisateur IAM.

      Pour modifier les autorisations d'accès à l'objet du propriétaire, sous Access for object owner (Accès pour le propriétaire de l'objet), choisissez Votre compte AWS (propriétaire).

      Activez les cases à cocher des autorisations que vous souhaitez modifier, puis choisissez Enregistrer.

    2. Accès pour d'autres Comptes AWS

      Pour accorder des autorisations à un utilisateur AWS d'un autre Compte AWS, sous Access for other Comptes AWS (Accès pour d'autres comptes), choisissez Add account (Ajouter un compte). Dans le champ Enter an ID (Saisir un ID), tapez l'ID canonique de l'utilisateur AWS auquel vous souhaitez accorder des autorisations relatives à un objet. Pour en savoir plus sur la recherche d'un ID canonique, consultez Identificateurs de Compte AWS dans le Référence générale d'Amazon Web Services. Vous pouvez ajouter jusqu'à 99 utilisateurs.

      Activez les cases à cocher des autorisations que vous souhaitez accorder à l'utilisateur, puis choisissez Enregistrer. Pour afficher des informations sur les autorisations, choisissez les icônes d'aide.

    3. Accès public

      Pour permettre au grand public (tout le monde) d'accéder à votre objet, sous Accès public, sélectionnez Tout le monde. Si vous accordez des autorisations d'accès public, tout le monde peut accéder à l'objet.

      Activez les cases à cocher des autorisations que vous souhaitez accorder, puis choisissez Enregistrer.

      Avertissement
      • Soyez vigilant lorsque vous accordez au groupe Everyone (Tout le monde) l'accès anonyme à vos objets Amazon S3. Lorsque vous accordez l'accès à ce groupe, tout le monde peut accéder à votre objet. Si vous avez besoin d'accorder l'accès à tout le monde, nous vous recommandons vivement d'octroyer uniquement des autorisations Lecture d'objet.

      • Nous vous recommandons de ne pas accorder des autorisations d'écriture sur l'objet au groupe Tout le monde. Si vous le faites, n'importe qui peut remplacer les autorisations de liste ACL pour l'objet.

Cette section fournit des exemples de configuration des attributions de liste ACL sur les compartiments et les objets.

Important

Si votre compartiment utilise le paramètre appliqué par le propriétaire du compartiment pour S3 Object Ownership, vous devez utiliser des stratégies pour accorder l'accès à votre compartiment et aux objets qu'il contient. Quand le paramètre Propriétaire du compartiment appliqué est activé, les demandes de définition des listes de contrôle d'accès (ACL) ou de mise à jour des listes ACL échouent et renvoient le code d'erreur AccessControlListNotSupported. Les demandes de lecture de listes ACL sont toujours prises en charge.

Java

Cette section fournit des exemples de configuration des attributions de liste ACL sur les compartiments et les objets. Le premier exemple crée un compartiment avec une liste ACL prête à l'emploi (voir Liste ACL prête à l'emploi), crée une liste personnalisée d'attributions d'autorisation, puis remplace l'ACL prête à l'emploi avec une ACL contenant les attributions personnalisées. Le second exemple montre comment modifier une ACL à l'aide de la méthode AccessControlList.grantPermission().

Exemple Créer un compartiment et spécifier une liste ACL conservée qui octroie une autorisation au groupe de mise à disposition du journal S3

Cet exemple crée un compartiment. Dans le demande, l'exemple spécifie une liste ACL prête à l'emploi qui attribue au groupe Log Delivery l'autorisation d'écrire des journaux sur le compartiment.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.io.IOException; import java.util.ArrayList; public class CreateBucketWithACL { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String userEmailForReadPermission = "*** user@example.com ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .build(); // Create a bucket with a canned ACL. This ACL will be replaced by the setBucketAcl() // calls below. It is included here for demonstration purposes. CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName, clientRegion.getName()) .withCannedAcl(CannedAccessControlList.LogDeliveryWrite); s3Client.createBucket(createBucketRequest); // Create a collection of grants to add to the bucket. ArrayList<Grant> grantCollection = new ArrayList<Grant>(); // Grant the account owner full control. Grant grant1 = new Grant(new CanonicalGrantee(s3Client.getS3AccountOwner().getId()), Permission.FullControl); grantCollection.add(grant1); // Grant the LogDelivery group permission to write to the bucket. Grant grant2 = new Grant(GroupGrantee.LogDelivery, Permission.Write); grantCollection.add(grant2); // Save grants by replacing all current ACL grants with the two we just created. AccessControlList bucketAcl = new AccessControlList(); bucketAcl.grantAllPermissions(grantCollection.toArray(new Grant[0])); s3Client.setBucketAcl(bucketName, bucketAcl); // Retrieve the bucket's ACL, add another grant, and then save the new ACL. AccessControlList newBucketAcl = s3Client.getBucketAcl(bucketName); Grant grant3 = new Grant(new EmailAddressGrantee(userEmailForReadPermission), Permission.Read); newBucketAcl.grantAllPermissions(grant3); s3Client.setBucketAcl(bucketName, newBucketAcl); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it and returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
Exemple Mettre à jour la liste ACL sur un objet existant

L'exemple met à jour l'ACL sur un objet. L'exemple exécute les tâches suivantes :

  • Extrait l'ACL d'un objet

  • Efface la liste ACL en supprimant toutes les autorisations existantes

  • Ajoute deux autorisations : plein accès au propriétaire, et WRITE_ACP (voir Quelles autorisations puis-je octroyer ?) à un utilisateur identifié par une adresse e-mail

  • Enregistre l'ACL sur l'objet

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.CanonicalGrantee; import com.amazonaws.services.s3.model.EmailAddressGrantee; import com.amazonaws.services.s3.model.Permission; import java.io.IOException; public class ModifyACLExistingObject { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String keyName = "*** Key name ***"; String emailGrantee = "*** user@example.com ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Get the existing object ACL that we want to modify. AccessControlList acl = s3Client.getObjectAcl(bucketName, keyName); // Clear the existing list of grants. acl.getGrantsAsList().clear(); // Grant a sample set of permissions, using the existing ACL owner for Full Control permissions. acl.grantPermission(new CanonicalGrantee(acl.getOwner().getId()), Permission.FullControl); acl.grantPermission(new EmailAddressGrantee(emailGrantee), Permission.WriteAcp); // Save the modified ACL back to the object. s3Client.setObjectAcl(bucketName, keyName, acl); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET
Exemple Créer un compartiment et spécifier une liste ACL conservée qui octroie une autorisation au groupe de mise à disposition du journal S3

Cet exemple C# crée un compartiment. Dans le demande, le code spécifie aussi une liste ACL prête à l'emploi qui attribue au groupe Log Delivery l'autorisation d'écrire les journaux sur le compartiment.

Pour obtenir les instructions sur la création et le test d'un exemple pratique, consultez Exécution des exemples de code .NET Amazon S3.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class ManagingBucketACLTest { private const string newBucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); CreateBucketUseCannedACLAsync().Wait(); } private static async Task CreateBucketUseCannedACLAsync() { try { // Add bucket (specify canned ACL). PutBucketRequest putBucketRequest = new PutBucketRequest() { BucketName = newBucketName, BucketRegion = S3Region.EUW1, // S3Region.US, // Add canned ACL. CannedACL = S3CannedACL.LogDeliveryWrite }; PutBucketResponse putBucketResponse = await client.PutBucketAsync(putBucketRequest); // Retrieve bucket ACL. GetACLResponse getACLResponse = await client.GetACLAsync(new GetACLRequest { BucketName = newBucketName }); } catch (AmazonS3Exception amazonS3Exception) { Console.WriteLine("S3 error occurred. Exception: " + amazonS3Exception.ToString()); } catch (Exception e) { Console.WriteLine("Exception: " + e.ToString()); } } } }
Exemple Mettre à jour la liste ACL sur un objet existant

L'exemple C# met à jour l'ACL sur un objet existant. L'exemple exécute les tâches suivantes :

  • Extrait l'ACL d'un objet.

  • Efface la liste ACL en supprimant toutes les autorisations existantes.

  • Ajoute deux autorisations : plein accès au propriétaire, et WRITE_ACP à un utilisateur identifié par une adresse e-mail.

  • Enregistre l'ACL en envoyant une demande PutAcl.

Pour obtenir les instructions sur la création et le test d'un exemple pratique, consultez Exécution des exemples de code .NET Amazon S3.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class ManagingObjectACLTest { private const string bucketName = "*** bucket name ***"; private const string keyName = "*** object key name ***"; private const string emailAddress = "*** email address ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); TestObjectACLTestAsync().Wait(); } private static async Task TestObjectACLTestAsync() { try { // Retrieve the ACL for the object. GetACLResponse aclResponse = await client.GetACLAsync(new GetACLRequest { BucketName = bucketName, Key = keyName }); S3AccessControlList acl = aclResponse.AccessControlList; // Retrieve the owner (we use this to re-add permissions after we clear the ACL). Owner owner = acl.Owner; // Clear existing grants. acl.Grants.Clear(); // Add a grant to reset the owner's full permission (the previous clear statement removed all permissions). S3Grant fullControlGrant = new S3Grant { Grantee = new S3Grantee { CanonicalUser = owner.Id }, Permission = S3Permission.FULL_CONTROL }; // Describe the grant for the permission using an email address. S3Grant grantUsingEmail = new S3Grant { Grantee = new S3Grantee { EmailAddress = emailAddress }, Permission = S3Permission.WRITE_ACP }; acl.Grants.AddRange(new List<S3Grant> { fullControlGrant, grantUsingEmail }); // Set a new ACL. PutACLResponse response = await client.PutACLAsync(new PutACLRequest { BucketName = bucketName, Key = keyName, AccessControlList = acl }); } catch (AmazonS3Exception amazonS3Exception) { Console.WriteLine("An AmazonS3Exception was thrown. Exception: " + amazonS3Exception.ToString()); } catch (Exception e) { Console.WriteLine("Exception: " + e.ToString()); } } } }

L'API d'Amazon S3 vous permet de configurer une liste ACL lorsque vous créez un compartiment ou un objet. Amazon S3 fournit une API pour configurer une liste ACL sur un compartiment ou un objet existant. Ces API vous fournissent les méthodes suivantes pour configurer une liste ACL :

  • Configurer la liste ACL grâce aux en-têtes de demande – Lorsque vous envoyez une demande pour créer une ressource (compartiment ou objet), vous configurez une liste ACL grâce aux en-têtes de demande. Grâce à ces en-têtes, vous pouvez spécifier une liste ACL prête à l'emploi ou des accords (en identifiant explicitement le bénéficiaire et les autorisations).

  • Configurer la liste ACL grâce au corps de la demande – Lorsque vous envoyez une demande pour configurer une liste ACL sur une ressource existante, vous pouvez configurer la liste ACL dans l'en-tête ou le corps de la demande.

Pour de plus amples informations sur la prise en charge de l'API REST pour la gestion des listes ACL, veuillez consulter les sections suivantes dans la Référence d'API Amazon Simple Storage Service :

Important

Si votre compartiment utilise le paramètre appliqué par le propriétaire du compartiment pour S3 Object Ownership, vous devez utiliser des stratégies pour accorder l'accès à votre compartiment et aux objets qu'il contient. Quand le paramètre Propriétaire du compartiment appliqué est activé, les demandes de définition des listes de contrôle d'accès (ACL) ou de mise à jour des listes ACL échouent et renvoient le code d'erreur AccessControlListNotSupported. Les demandes de lecture de listes ACL sont toujours prises en charge.

En-têtes de demande spécifiques à une liste de contrôle d'accès (ACL)

Vous pouvez utiliser des en-têtes pour accorder des autorisations basées sur la liste de contrôle d'accès (ACL). Par défaut, tous les objets sont privés. Seul le propriétaire dispose d'un contrôle d'accès complet. Lorsque vous ajoutez un nouvel objet, vous pouvez accorder des autorisations à des Comptes AWS individuels ou à des groupes prédéfinis définis par Amazon S3. Ces autorisations sont ensuite ajoutées à la liste de contrôle d'accès (ACL) sur l'objet. Pour de plus amples informations, veuillez consulter Présentation de la liste de contrôle d'accès (ACL).

Avec cette opération, vous pouvez accorder des autorisations d'accès en utilisant l'une des deux méthodes suivantes :

  • Liste ACL prête à l'emploi (x-amz-acl) : Amazon S3 prend en charge un ensemble de listes ACL prédéfinies, appelées « listes ACL prêtes à l'emploi ». Chaque liste ACL prête à l'emploi possède un ensemble prédéfini de bénéficiaires et d'autorisations. Pour de plus amples informations, veuillez consulter Liste ACL prête à l'emploi.

  • Autorisations d'accès : pour accorder explicitement des autorisations d'accès à des Comptes AWS ou des groupes spécifiques, utilisez les en-têtes suivants. Chaque en-tête correspond à des autorisations spécifiques prises en charge par Amazon S3 dans une liste ACL. Pour de plus amples informations, veuillez consulter Présentation de la liste de contrôle d'accès (ACL). Dans l'en-tête, vous spécifiez une liste de bénéficiaires qui obtiennent l'autorisation spécifique.

    • x-amz-grant-read

    • x-amz-grant-write

    • x-amz-grant-read-acp

    • x-amz-grant-write-acp

    • x-amz-grant-full-control

Pour de plus amples informations sur la gestion des ACL à l'aide de la AWS CLI, veuillez consulter put-bucket-acl dans la Référence des commandes de la AWS CLI.

Important

Si votre compartiment utilise le paramètre appliqué par le propriétaire du compartiment pour S3 Object Ownership, vous devez utiliser des stratégies pour accorder l'accès à votre compartiment et aux objets qu'il contient. Quand le paramètre Propriétaire du compartiment appliqué est activé, les demandes de définition des listes de contrôle d'accès (ACL) ou de mise à jour des listes ACL échouent et renvoient le code d'erreur AccessControlListNotSupported. Les demandes de lecture de listes ACL sont toujours prises en charge.