Konfigurieren von ACLs - Amazon Simple Storage Service

Konfigurieren von ACLs

In diesem Abschnitt wird die Verwaltung von Zugriffsberechtigungen für S3-Buckets und Objekten unter Verwendung von Zugriffskontrolllisten (ACLs) beschrieben. Sie können Ihrer Ressourcen-ACL mithilfe der AWS Management Console, der AWS Command Line Interface (CLI), der REST-API oder AWS SDKs Rechte hinzufügen.

Bucket- und Objekt-Berechtigungen sind voneinander unabhängig. Ein Objekt erbt nicht die Berechtigungen von seinem Bucket. Wenn Sie beispielsweise einen Bucket erstellen und einem Benutzer Schreibzugriff erteilen, können Sie auf die Objekte dieses Benutzers nicht zugreifen, wenn Ihnen der Benutzer nicht explizit Zugriff erteilt.

Sie können anderen AWS-Konto-Benutzern oder vordefinierten Gruppen Berechtigungen erteilen. Der Benutzer oder die Gruppe, dem bzw. der Sie Berechtigungen erteilen, wird als der Berechtigungsempfänger bezeichnet. Standardmäßig hat der Eigentümer, nämlich das AWS-Konto, das den Bucket erstellt hat, alle Berechtigungen.

Für jede Berechtigung, die Sie für einen Benutzer oder eine Gruppe erteilen, wird der dem Bucket zugeordneten ACL ein Eintrag hinzugefügt. Die ACL listet die erteilten Berechtigungen auf, die den Berechtigungsempfänger und die erteilte Berechtigung identifizieren.

Wenn ein anderes AWS-Konto ein Objekt in Ihren S3-Bucket hochlädt, besitzt dieses Konto (der Objektschreiber) standardmäßig das Objekt, hat Zugriff darauf und kann anderen Benutzern über ACLs Zugriff darauf gewähren. Sie können Object Ownership verwenden, um dieses Standardverhalten so zu ändern, dass ACLs deaktiviert sind und Sie als Bucket-Eigentümer automatisch jedes Objekt in Ihrem Bucket besitzen. Daher basiert die Zugriffskontrolle für Ihre Daten auf Richtlinien wie IAM-Richtlinien, S3-Bucket-Richtlinien, Endpunktrichtlinien für Virtual Private Cloud (VPC) und AWS Organizations Service-Kontrollrichtlinien (SCPs).

Die meisten modernen Anwendungsfälle in Amazon S3 erfordern keine ACLs mehr, und wir empfehlen Ihnen, ACLs zu deaktivieren, außer unter ungewöhnlichen Umständen, in denen Sie den Zugriff für jedes Objekt einzeln steuern müssen. Mit Object Ownership können Sie ACLs deaktivieren und sich auf Richtlinien für die Zugriffssteuerung verlassen. Wenn Sie ACLs deaktivieren, können Sie einfach einen Bucket mit Objekten verwalten, die von verschiedenen AWS-Konten hochgeladen wurden. Sie als Bucket-Eigentümer besitzen alle Objekte im Bucket und können den Zugriff darauf mithilfe von Richtlinien verwalten. Weitere Informationen finden Sie unter Weitere Informationen finden Sie unter Steuern des Eigentums an Objekten und Deaktivieren von ACLs für Ihren Bucket..

Wichtig

Wenn Ihr Bucket die erzwungene Einstellung für den Bucket-Eigentümer für S3 Object Ownership verwendet, müssen Sie Richtlinien verwenden, um Zugriff auf Ihren Bucket und die darin enthaltenen Objekte zu gewähren. Anfragen zum Festlegen von ACLs oder Update-ACLs schlagen fehl und geben den AccessControlListNotSupported-Fehlercode zurück. Anfragen zum Lesen von ACLs werden weiterhin unterstützt.

Warnung

Es wird nachdrücklich empfohlen, den Gruppen Jeder (öffentlicher Zugriff) oder Authentifizierte Benutzer (alle AWS-authentifizierten Benutzer) keinen Schreibzugriff zu gewähren. Weitere Informationen zu den Auswirkungen eines Schreibzugriffs für diese Gruppen finden Sie unter Vordefinierte Gruppen in Amazon S3.

Die Konsole zeigt kombinierte Zugriffsberechtigungen für doppelte Berechtigungsempfänger an. Wenn Sie eine vollständige Liste der ACLs anzeigen möchten, verwenden Sie die Amazon S3 REST-API, AWS CLI oder AWS-SDKs.

Die folgende Tabelle zeigt die ACL-Berechtigungen, die Sie für Buckets in der Amazon-S3-Konsole konfigurieren können.

Amazon-S3-Konsolen-ACL-Berechtigungen für Buckets
Konsolenberechtigung ACL-Berechtigung Zugriff
Objekte – Auflisten READ Gestattet dem Empfänger, die Objekte im Bucket aufzulisten.
Objekte – Schreiben WRITE Gestattet dem Empfänger, neue Objekte im Bucket zu erstellen. Für die Bucket- und Objekteigentümer vorhandener Objekte können auch Löschungen und Überschreibungen dieser Objekte ermöglicht werden.
Bucket-ACL – Lesen READ_ACP Gestattet dem Empfänger, die Bucket-ACL zu lesen.
Bucket-ACL – Schreiben WRITE_ACP Gestattet dem Empfänger, die ACL für den relevanten Bucket zu schreiben.
Jeder (öffentlicher Zugang): Objekte – Auflisten READ Gewährt öffentlichen Lesezugriff für die Objekte im Bucket. Wenn Sie jedem (öffentlichen Zugriff) Listenzugriff gewähren, kann jeder Benutzer auf der Welt auf die Objekte im Bucket zugreifen.
Jeder (öffentlicher Zugriff): Bucket-ACL – Lesen READ_ACP Gewährt öffentlichen Lesezugriff für die Bucket-ACL. Wenn Sie jedem (öffentlicher Zugriff) Lesezugriff gewähren, kann jeder Benutzer auf der Welt auf die Bucket-ACL zugreifen.

Weitere Informationen zu ACL-Berechtigungen finden Sie unter Zugriffskontrolllisten (ACL) – Übersicht.

Wichtig

Wenn Ihr Bucket die erzwungene Einstellung für den Bucket-Eigentümer für S3 Object Ownership verwendet, müssen Sie Richtlinien verwenden, um Zugriff auf Ihren Bucket und die darin enthaltenen Objekte zu gewähren. Anfragen zum Festlegen von ACLs oder Update-ACLs schlagen fehl und geben den AccessControlListNotSupported-Fehlercode zurück. Anfragen zum Lesen von ACLs werden weiterhin unterstützt.

Festlegen von ACL-Berechtigungen für einen Bucket
  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie in der Liste Buckets den Namen des Buckets aus, für den Sie Berechtigungen festlegen möchten.

  3. Wählen Sie Permissions (Berechtigungen).

  4. Wählen Sie unter Access Control List Bearbeiten.

    Sie können die folgenden ACL-Berechtigungen für den Bucket bearbeiten:

    Objekte
    • Auflisten – Gestattet einem Empfänger, die Objekte im Bucket aufzulisten.

    • Schreiben — Ermöglicht es dem Berechtigungsempfänger, neue Objekte im Bucket zu erstellen. Für die Bucket- und Objekteigentümer vorhandener Objekte können auch Löschungen und Überschreibungen dieser Objekte ermöglicht werden.

      In der S3-Konsole können Sie der S3-Protokoll-Bereitstellungsgruppe und dem Bucket-Eigentümer (Ihrem AWS-Konto) nur Schreibzugriff gewähren. Wir empfehlen dringend, anderen Empfängern keinen Schreibzugriff zu gewähren. Wenn Sie jedoch Schreibzugriff gewähren müssen, können Sie die AWS CLI, AWS-SDKs oder die REST-API verwenden.

    Bucket-ACL
    • Lesen – Gestattet dem Empfänger, die Bucket-ACL zu lesen.

    • Schreiben – Gestattet dem Empfänger, die ACL für den relevanten Bucket zu schreiben.

  5. Um die Berechtigungen des Bucket-Eigentümers zu ändern, löschen oder wählen Sie neben dem Bucket-Eigentümer (Ihr AWS-Konto) die folgenden ACL-Berechtigungen aus:

    • ObjekteAuflisten oder Schreiben

    • Bucket-ACLLesen oder Schreiben

    Der Besitzer ist der Root-Benutzer des AWS-Kontos und nicht ein AWS Identity and Access Management (IAM)-Benutzer. Weitere Informationen zum Root-Benutzer finden Sie unter Der Root-Benutzer des AWS-Kontos im IAM-Benutzerhandbuch.

  6. Um Berechtigungen für die Allgemeinheit (alle im Internet) zu erteilen oder rückgängig zu machen, deaktivieren oder wählen Sie neben Jeder (öffentlicher Zugriff) die folgenden ACL-Berechtigungen aus:

    • ObjekteAuflisten

    • Bucket-ACLLesen

    Warnung

    Seien Sie vorsichtig, wenn Sie der Gruppe Everyone (Jeder) öffentlichen Zugriff auf Ihren S3-Bucket gewähren. Wenn Sie dieser Gruppe anonymen Zugriff gewähren, kann jeder auf der ganzen Welt auf Ihren Bucket zugreifen. Wir empfehlen dringend, nie einen öffentlichen Schreibzugriff auf Ihren S3-Bucket zu gewähren.

  7. Um Berechtigungen für Personen mit einem AWS-Konto zu erteilen oder rückgängig zu machen, löschen oder wählen Sie neben der Gruppe Authentifizierte Benutzer (alle Benutzer mit einem AWS-Konto) die folgenden ACL-Berechtigungen aus:

    • ObjekteAuflisten

    • Bucket-ACLLesen

  8. Um Amazon S3 Berechtigungen zum Schreiben von Server-Zugriffsprotokollen in den Bucket zu erteilen oder rückgängig zu machen, deaktivieren oder wählen Sie unter der S3-Protokoll-Bereitstellungsgruppe die folgenden ACL-Berechtigungen aus:

    • ObjekteAuflisten oder Schreiben

    • Bucket-ACLLesen oder Schreiben

      Wenn ein Bucket als Ziel-Bucket für Zugriffsprotokolle eingerichtet ist, müssen die Bucket-Berechtigungen der Gruppe Log Delivery (Protokollbereitstellung) Schreibzugriff auf den Bucket erteilen. Wenn Sie die Server-Zugriffsprotokollierung für einen Bucket aktivieren, erteilt die Amazon-S3-Konsole der Gruppe Log Delivery (Protokollbereitstellung) Schreibzugriff auf den Ziel-Bucket, den Sie für den Empfang der Protokolle ausgewählt haben. Weitere Informationen zu Server-Zugriffsprotokollen finden Sie unter Aktivieren Sie die Amazon-S3-Server-Zugriffsprotokollierung.

  9. Um Zugriff auf ein anderes AWS-Konto zu erteilen, gehen Sie wie folgt vor:

    1. Wählen Sie Empfänger hinzufügen.

    2. Geben Sie im Feld Empfänger die kanonische ID des anderen AWS-Konto ein.

    3. Wählen Sie aus den folgenden ACL-Berechtigungen aus:

      • ObjekteAuflisten oder Schreiben

      • Bucket-ACLLesen oder Schreiben

    Warnung

    Wenn Sie anderen AWS-Konten Zugriff auf Ihre Ressourcen erteilen, müssen Sie beachten, dass die AWS-Konten ihre Berechtigungen an Benutzer unterhalb der Konten delegieren können. Man spricht auch von einem kontenübergreifenden Zugriff. Weitere Informationen zum kontenübergreifenden Zugriff finden Sie unter Erstellen einer Rolle, um Berechtigungen an einen IAM-Benutzer zu delegieren im IAM-Benutzerhandbuch.

  10. Um den Zugriff auf ein anderes AWS-Konto zu entfernen, wählen Sie unter Access for other AWS-Konten (Zugriff für andere AWS-Konten) die Option Remove (Entfernen) aus.

  11. Klicken Sie auf Save changes (Änderungen speichern), um die Änderungen zu speichern.

Die Konsole zeigt kombinierte Zugriffsberechtigungen für doppelte Berechtigungsempfänger an. Wenn Sie eine vollständige Liste der ACLs anzeigen möchten, verwenden Sie die Amazon S3 REST-API, AWS CLI oder AWS-SDKs. Die folgende Tabelle zeigt die ACL-Berechtigungen, die Sie für Objekte in der Amazon-S3-Konsole konfigurieren können.

Amazon-S3-Konsolen-ACL-Berechtigungen für Objekte
Konsolenberechtigung ACL-Berechtigung Zugriff
Objekt – Lesen READ Gestattet dem Empfänger, die Objektedaten und seine Metadaten zu lesen.
Objekt-ACL – Lesen READ_ACP Gestattet dem Empfänger, die Objekt-ACL zu lesen.
Objekt-ACL – Schreiben WRITE_ACP Gestattet dem Empfänger, die ACL für das relevante Objekt zu schreiben

Weitere Informationen zu ACL-Berechtigungen finden Sie unter Zugriffskontrolllisten (ACL) – Übersicht.

Wichtig

Wenn Ihr Bucket die erzwungene Einstellung für den Bucket-Eigentümer für S3 Object Ownership verwendet, müssen Sie Richtlinien verwenden, um Zugriff auf Ihren Bucket und die darin enthaltenen Objekte zu gewähren. Anfragen zum Festlegen von ACLs oder Update-ACLs schlagen fehl und geben den AccessControlListNotSupported-Fehlercode zurück. Anfragen zum Lesen von ACLs werden weiterhin unterstützt.

ACL-Berechtigungen für ein Objekt festlegen
  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie in der Liste Buckets den Namen des Buckets aus, der das Objekt enthält.

  3. Wählen Sie in der Liste Objekte den Namen des Objekts aus, für das Sie Berechtigungen festlegen möchten.

  4. Wählen Sie Permissions (Berechtigungen).

  5. Wählen Sie unter Access Control List (ACL) die Option Bearbeiten.

    Sie können die folgenden ACL-Berechtigungen für das Objekt bearbeiten:

    Objekt
    • Lesen – Gestattet dem Empfänger, die Objektedaten und seine Metadaten zu lesen.

    Objekt-ACL
    • Lesen – Gestattet dem Empfänger, die Objekt-ACL zu lesen.

    • Schreiben – Gestattet dem Empfänger, die ACL für das relevante Objekt zu schreiben. In der S3-Konsole können Sie dem Bucket-Eigentümer (Ihrem AWS-Konto) nur Schreibzugriff gewähren. Wir empfehlen dringend, anderen Empfängern keinen Schreibzugriff zu gewähren. Wenn Sie jedoch Schreibzugriff gewähren müssen, können Sie die AWS CLI, AWS-SDKs oder die REST-API verwenden.

  6. Sie können Zugriffsberechtigungen von Objekten für Folgendes verwalten:

    1. Zugriff für den Besitzer des Objekts

      Der Besitzer ist der Root-Benutzer des AWS-Kontos und nicht ein AWS Identity and Access Management (IAM)-Benutzer. Weitere Informationen zum Root-Benutzer finden Sie unter Der Root-Benutzer des AWS-Kontos im IAM-Benutzerhandbuch.

      Um die Bucket-Zugriffsberechtigungen des Besitzers zu ändern, wählen Sie unter Access for object owner (Zugang für Objektbesitzer) Your AWS Account (owner) (Ihr AWS-Konto) (Besitzer).

      Aktivieren Sie die Kontrollkästchen für die Berechtigungen, die geändert werden sollen. Wählen Sie dann Save (Speichern) aus.

    2. Zugriff für andere AWS-Konten

      Um einem AWS-Benutzer aus einem anderen AWS-Konto Berechtigungen zu erteilen, wählen Sie unter Access for other AWS-Konten accounts (Zugriff für andere AWS-Konten) Add account (Konto hinzufügen) aus. Geben Sie in das Feld Enter an ID (ID eingeben) die kanonische ID des AWS-Benutzers ein, dem Sie Objekt-Berechtigungen erteilen möchten. Weitere Informationen darüber, wie Sie eine kanonische ID finden unter Your AWS-Konto identifiers (Ihre AWS-Konto-Kennungen) in der Allgemeinen Referenz für Amazon Web Services. Sie können bis zu 99 Benutzer hinzufügen.

      Aktivieren Sie die Kontrollkästchen für die Berechtigungen, die dem Benutzer gewährt werden sollen. Wählen Sie dann Save (Speichern) aus. Um Informationen über die Berechtigungen anzuzeigen, wählen Sie die Hilfesymbole aus.

    3. Öffentlicher Zugriff

      Um der allgemeinen Öffentlichkeit (jedem Benutzer auf der ganzen Welt) Zugriff auf Ihr Objekt zu gewähren, wählen Sie unter Public access (Öffentlicher Zugriff) Everyone (Jeder) aus. Die Erteilung öffentlicher Zugriffsberechtigungen bedeutet, dass jeder Benutzer auf der ganzen Welt auf das Objekt zugreifen kann.

      Aktivieren Sie die Kontrollkästchen für die Berechtigungen, die erteilt werden sollen. Wählen Sie dann Save (Speichern) aus.

      Warnung
      • Seien Sie vorsichtig, wenn Sie der Gruppe Everyone (Jeder) anonymen Zugriff auf Ihre Amazon-S3-Objekte gewähren. Wenn Sie dieser Gruppe Zugriff gewähren, kann jeder auf der ganzen Welt auf Ihr Objekt zugreifen. Wenn Sie jedem Zugriff gewähren müssen, wird nachdrücklich empfohlen, dass Sie nur Berechtigungen für Read objects (Objekte lesen) gewähren.

      • Wir empfehlen nachdrücklich, der Gruppe Everyone (Jeder) keine Schreibberechtigungen für Objekte zu erteilen. Dadurch können alle Benutzer die ACL-Berechtigungen für das Objekt überschreiben.

Dieser Abschnitt enthält Beispiele, wie Access-Control-List(ACL)-Berechtigungen für Buckets und Objekte konfiguriert werden.

Wichtig

Wenn Ihr Bucket die erzwungene Einstellung für den Bucket-Eigentümer für S3 Object Ownership verwendet, müssen Sie Richtlinien verwenden, um Zugriff auf Ihren Bucket und die darin enthaltenen Objekte zu gewähren. Anfragen zum Festlegen von ACLs oder Update-ACLs schlagen fehl und geben den AccessControlListNotSupported-Fehlercode zurück. Anfragen zum Lesen von ACLs werden weiterhin unterstützt.

Java

Dieser Abschnitt enthält Beispiele, wie Access-Control-List(ACL)-Berechtigungen für Buckets und Objekte konfiguriert werden. Das erste Beispiel erstellt einen Bucket mit einer vorgefertigten ACL (siehe Vordefinierte ACL), erstellt eine Liste benutzerdefinierter Berechtigungen und ersetzt die vorgefertigte ACL durch eine ACL mit den benutzerdefinierten Berechtigungen. Das zweite Beispiel veranschaulicht, wie Sie eine ACL mit der Methode AccessControlList.grantPermission() abändern.

Beispiel Erstellen Sie einen Bucket und geben Sie eine vordefinierte ACL an, die der S3-Protokoll-Bereitstellungsgruppe die Berechtigung erteilt

Dieses Beispiel erstellt einen Bucket. In der Anfrage gibt das Beispiel eine vorgefertigte ACL an, die die Protokoll-Bereitstellungsgruppe zum Schreiben von Protokollen in den Bucket berechtigt.

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(); } } }
Beispiel Aktualisieren der ACL für ein bestehendes Objekt

Dieses Beispiel aktualisiert die ACL für ein Objekt. Das Beispiel führt die folgenden Aufgaben durch:

  • Ruft die ACL eines Objekts ab

  • Löscht die ACL durch Entfernen aller vorhandenen Berechtigungen

  • Fügt zwei Berechtigungen hinzu: Vollzugriff für den Eigentümer und WRITE_ACP (siehe Welche Berechtigungen kann ich erteilen?) für einen anhand einer E-Mail-Adresse identifizierten Benutzer

  • Speichert die ACL im Objekt

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
Beispiel Erstellen Sie einen Bucket und geben Sie eine vordefinierte ACL an, die der S3-Protokoll-Bereitstellungsgruppe die Berechtigung erteilt

Dieses C#-Beispiel erstellt einen Bucket. In der Anfrage gibt der Code auch eine vorgefertigte ACL an, die die Protokoll-Bereitstellungsgruppe zum Schreiben der Protokolle in den Bucket berechtigt.

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der .NET-Codebeispiele für 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()); } } } }
Beispiel Aktualisieren der ACL für ein bestehendes Objekt

Dieses C#-Beispiel aktualisiert die ACL für ein vorhandenes Objekt. Das Beispiel führt die folgenden Aufgaben durch:

  • Ruft die ACL eines Objekts ab.

  • Löscht die ACL durch Entfernen aller vorhandenen Berechtigungen.

  • Fügt zwei Berechtigungen hinzu: Vollzugriff für den Eigentümer und WRITE_ACP für einen anhand einer E-Mail-Adresse identifizierten Benutzer.

  • Speichert die ACL durch Senden einer PutAcl-Anfrage.

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der .NET-Codebeispiele für 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()); } } } }

Amazon-S3-APIs ermöglichen Ihnen, beim Erstellen eines Buckets oder eines Objekts eine ACL einzurichten. Amazon S3 bietet auch eine API für die Einrichtung einer ACL für einen vorhandenen Bucket oder ein Objekt. Diese APIs stellen die folgenden Methoden bereit, um eine ACL einzurichten:

  • Einrichten von ACL mit Anfrageheadern – Wenn Sie eine Anfrage senden, um eine Ressource zu erstellen (Bucket oder Objekt), richten Sie eine ACL über die Anfrage-Header ein. Mit Hilfe dieser Header können Sie entweder eine vordefinierte ACL angeben, oder explizit Rechte erteilen (mit expliziter Identifizierung von Empfänger und Berechtigungen).

  • Einrichtung von ACL mithilfe des Anfragetextes – Wenn Sie eine Anfrage senden, um ACL für eine vorhandene Ressource einzurichten, können Sie die ACL im Header oder im Text der Anfrage einrichten.

Informationen zur REST-API-Unterstützung für die Verwaltung von ACLs finden Sie in den folgenden Abschnitten der Amazon Simple Storage Service API-Referenz:

Wichtig

Wenn Ihr Bucket die erzwungene Einstellung für den Bucket-Eigentümer für S3 Object Ownership verwendet, müssen Sie Richtlinien verwenden, um Zugriff auf Ihren Bucket und die darin enthaltenen Objekte zu gewähren. Anfragen zum Festlegen von ACLs oder Update-ACLs schlagen fehl und geben den AccessControlListNotSupported-Fehlercode zurück. Anfragen zum Lesen von ACLs werden weiterhin unterstützt.

Spezifische Anforderungs-Header für Access Control List (ACL)

Sie können Header verwenden, um Berechtigungen auf der Basis von Access Control List (ACL) zu erteilen. Standardmäßig sind alle Objekte privat. Nur der Besitzer hat die vollständige Zugriffssteuerung. Wenn Sie ein neues Objekt hinzufügen, können Sie einzelnen AWS-Konten oder vordefinierten Gruppen von Amazon S3 definierte Berechtigungen erteilen. Diese Berechtigungen werden anschließend der Zugriffskontrollliste (Access Control List, ACL) für das Objekt hinzugefügt. Weitere Informationen finden Sie unter Zugriffskontrolllisten (ACL) – Übersicht.

Mit dieser Operation können Sie Zugriffsberechtigungen mit einer der folgenden beiden Methoden erteilen:

  • Vordefinierte ACL (x-amz-acl) – Amazon S3 unterstützt einen Satz vordefinierter ACLs, englisch „Canned ACLs“. Jede vordefinierte ACL hat eine vordefinierte Menge aus Empfängern und Berechtigungen. Weitere Informationen finden Sie unter Vordefinierte ACL.

  • Zugriffsberechtigungen – Um bestimmten AWS-Konten oder -Gruppen explizit Zugriffsberechtigungen zu erteilen, verwenden Sie die folgenden Header. Jeder Header ist bestimmten Berechtigungen zugeordnet, die Amazon S3 in einer ACL unterstützt. Weitere Informationen finden Sie unter Zugriffskontrolllisten (ACL) – Übersicht. Im Header geben Sie eine Liste der Empfänger an, die die jeweilige Berechtigung erhalten.

    • x-amz-grant-read

    • x-amz-grant-write

    • x-amz-grant-read-acp

    • x-amz-grant-write-acp

    • x-amz-grant-full-control

Weitere Informationen über die Verwaltung von ACLs mit der AWS CLI finden Sie unter put-bucket-acl in der AWS CLI-Befehlsreferenz.

Wichtig

Wenn Ihr Bucket die erzwungene Einstellung für den Bucket-Eigentümer für S3 Object Ownership verwendet, müssen Sie Richtlinien verwenden, um Zugriff auf Ihren Bucket und die darin enthaltenen Objekte zu gewähren. Anfragen zum Festlegen von ACLs oder Update-ACLs schlagen fehl und geben den AccessControlListNotSupported-Fehlercode zurück. Anfragen zum Lesen von ACLs werden weiterhin unterstützt.