Beispiel 3: Bucket-Eigentümer, der Berechtigungen für Objekte erteilt, die ihm nicht gehören - Amazon Simple Storage Service

Beispiel 3: Bucket-Eigentümer, der Berechtigungen für Objekte erteilt, die ihm nicht gehören

In dem Szenario für dieses Beispiel will ein Bucket-Eigentümer Berechtigungen für den Zugriff auf Objekte erteilen, aber nicht alle Objekte im Bucket gehören dem Bucket-Eigentümer. In diesem Beispiel versucht der Bucket-Eigentümer, Benutzern in seinem eigenen Konto eine Berechtigung zu erteilen.

Ein Bucket-Eigentümer kann es anderen AWS-Konten ermöglichen, Objekte hochzuladen. Standardmäßig besitzt der Bucket-Eigentümer keine Objekte, die von einem anderen AWS-Konto in einen Bucket geschrieben wurden. Objekte gehören den Konten, die sie in einen S3-Bucket schreiben. Wenn der Bucket-Eigentümer keine Objekte im Bucket besitzt, muss der Objekteigentümer dem Bucket-Eigentümer zunächst die Berechtigung mithilfe einer Objekt-ACL erteilen. Anschließend kann der Bucket-Eigentümer einem Objekt, das ihm nicht gehört, Berechtigungen erteilen. Weitere Informationen finden Sie unter Amazon-S3-Bucket- und Objekt-Eigentümerschaft.

Wenn der Bucket-Eigentümer die vom Bucket-Eigentümer erzwungene Einstellung für S3 Object Ownership für den Bucket anwendet, besitzt der Bucket-Eigentümer alle Objekte im Bucket, einschließlich der Objekte, die von einem anderen AWS-Konto geschrieben wurden. Dadurch wird das Problem behoben, dass Objekte nicht im Besitz des Bucket-Eigentümers sind. Anschließend können Sie die Berechtigung an Benutzer in Ihrem eigenen Konto oder an andere AWS-Konten.

Anmerkung

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..

In diesem Beispiel gehen wir davon aus, dass der Bucket-Eigentümer die vom Bucket-Eigentümer erzwungene Einstellung für Object Ownership nicht angewendet hat. Der Bucket-Eigentümer delegiert die Berechtigung an Benutzer in seinem eigenen Konto. Nachfolgend finden Sie eine kurze Zusammenfassung der wichtigsten Details:

  1. Der Administrator-Benutzer von Konto A ordnet eine Bucket-Richtlinie mit zwei Anweisungen zu.

    • Kontoübergreifende Berechtigung für Konto B, um Objekte hochzuladen.

    • Berechtigung für einen Benutzer in seinem eigenen Konto, auf Objekte im Bucket zuzugreifen.

  2. Der Administrator-Benutzer für Konto B lädt Objekte in den Bucket hoch, der Konto A gehört.

  3. Der Administrator von Konto B aktualisiert die Objekt-ACL, indem er die Berechtigung hinzufügt, die dem Bucket-Eigentümer vollständige Berechtigungen für das Objekt erteilt.

  4. Der Benutzer in Konto A überprüft dies durch Zugriff auf Objekte im Bucket, unabhängig davon, wem diese gehören.

Für dieses Beispiel benötigen Sie zwei Konten. Die folgende Tabelle zeigt, wie wir auf diese Konten und die Administrator-Benutzer in diesen Konten verweisen. In diesem Walkthrough verwenden Sie die Anmeldedaten für das Konto nicht gemäß den empfohlenen IAM-Richtlinien. Weitere Informationen finden Sie unter Informationen zur Verwendung eines Administratorbenutzers zum Erstellen von Ressourcen und Erteilen von Berechtigungen. Stattdessen erstellen Sie einen Administrator in jedem Konto, und verwenden dessen Anmeldeinformationen, um Ressourcen zu erstellen und ihnen Berechtigungen zu erteilen.

AWS-Konto ID Konto bezeichnet als Administrator im Konto

1111-1111-1111

Konto A

AccountAadmin

2222-2222-2222

Konto B

AccountBadmin

Alle Aufgaben in Verbindung mit dem Erstellen von Benutzern und Gewähren von Berechtigungen werden in der AWS Management Console ausgeführt. Zum Überprüfen der Berechtigungen verwendet das detaillierte Beispiel die Befehlszeilen-Tools, AWS Command Line Interface (AWS CLI) und AWS Tools for Windows PowerShell, sodass Sie keinen Code zu schreiben brauchen.

Schritt 0: Vorbereitung auf den Walkthrough

  1. Stellen Sie sicher, dass Sie zwei AWS-Konten haben und dass jedes Konto einen Administrator hat, wie in der Tabelle im vorigen Abschnitt gezeigt.

    1. Melden Sie sich nach Bedarf für ein AWS-Konto an.

      1. Öffnen Sie die Amazon S3-Seite und wählen Sie Create an AWS Account (Erstellen eines AWS-Kontos).

      2. Folgen Sie den Anweisungen auf dem Bildschirm. AWS benachrichtigt Sie per E-Mail, wenn Ihr Konto aktiv ist und für Sie verfügbar ist.

    2. Melden Sie sich mit den Anmeldeinformationen für Konto A an der IAM-Konsole an und erstellen Sie wie folgt einen Administrator-Benutzer:

      • Erstellen Sie den Benutzer AccountAadmin und schreiben Sie sich die Sicherheitsanmeldeinformationen auf. Weitere Informationen zum Hinzufügen von Benutzern finden Sie unter Erstellen eines IAM-Benutzers in Ihrem AWS-Konto im IAM-Benutzerhandbuch.

      • Erteilen Sie dem AccountAadmin Administratorberechtigungen, indem Sie ihm eine Benutzerrichtlinie zuordnen, die ihm vollen Zugriff bietet. Weitere Informationen finden Sie unter Verwalten von IAM-Richtlinien im IAM-Benutzerhandbuch.

      • Schreiben Sie sich auf dem Dashboard der IAM-Konsole die URL für die Anmeldung des IAM-Benutzers auf. Benutzer in diesem Konto müssen diese URL für die Anmeldung an der AWS Management Console verwenden. Weitere Informationen finden Sie unter Wie sich Benutzer in Ihrem Konto anmelden im IAM-Benutzerhandbuch.

    3. Wiederholen Sie den obigen Schritt unter Verwendung der Anmeldeinformationen von Konto B und erstellen Sie den Administrator-Benutzer AccountBadmin.

  2. Richten Sie die AWS CLI oder die Tools for Windows PowerShell ein. Stellen Sie sicher, dass Sie die Administratoranmeldeinformationen wie folgt speichern:

    • Wenn Sie die AWS CLI verwenden, erstellen Sie die beiden Profile AccountAadmin und AccountBadmin in der Config-Datei.

    • Wenn Sie die Tools for Windows PowerShell verwenden, stellen Sie sicher, dass Sie die Anmeldeinformationen für die Sitzung als AccountAadmin und AccountBadmin speichern.

    Detaillierte Anweisungen finden Sie unter Einrichten der Tools für die beispielhaften Walkthroughs.

Schritt 1: Erledigen der Aufgaben von Konto A

Führen Sie für Konto A die folgenden Schritte aus:

Schritt 1.1: Anmelden bei der Konsole

Melden Sie sich unter Verwendung der URL für die Anmeldung als IAM-Benutzer für Konto A zuerst als Benutzer AccountAadmin bei der AWS Management Console an. Dieser Benutzer erstellt einen Bucket und ordnet ihm eine Richtlinie zu.

Schritt 1.2: Erstellen eines Buckets und eines Benutzers und Hinzufügen einer Bucket-Richtlinie, um Benutzerberechtigungen zu erteilen

  1. Erstellen Sie in der Amazon-S3-Konsole einen Bucket. Diese Übung geht davon aus, dass der Bucket in der Region USA Ost (Nord-Virginia) erstellt wurde und DOC-EXAMPLE-BUCKET1 heißt.

    Detaillierte Anweisungen finden Sie unter Erstellen eines Buckets.

  2. Erstellen Sie in der IAM-Konsole einen Benutzer Dave.

    Detaillierte Anleitungen finden Sie unter Erstellen von IAM-Benutzern (Konsole) im IAM-Benutzerhandbuch.

  3. Schreiben Sie sich die Anmeldeinformationen für Dave auf.

  4. Weisen Sie in der Amazon-S3-Konsole die folgende Bucket-Richtlinie dem DOC-EXAMPLE-BUCKET1-Bucket zu. Detaillierte Anweisungen finden Sie unter Hinzufügen einer Bucket-Richtlinie mit der Amazon-S3-Konsole. Folgen Sie den Schritten, um eine Bucket-Richtlinie hinzuzufügen. Informationen darüber, wie Sie Konto-IDs finden, finden Sie unter Finding your AWS-Konto ID (Ihre AWS-Konto-ID finden).

    Die Richtlinie erteilt Konto B die Berechtigung s3:PutObject und s3:ListBucket. Die Richtlinie erteilt außerdem dem Benutzer Dave die s3:GetObject-Berechtigung.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] } ] }

Schritt 2: Erledigen der Aufgaben von Konto B

Nachdem Konto B die Berechtigung besitzt, Vorgänge für den Bucket von Konto A auszuführen, erledigt der Administrator von Konto B Folgendes:

  • Hochladen eines Objekts in den Bucket von Konto A.

  • Fügen Sie eine Berechtigung in der Objekt-ACL hinzu, um Account A, dem Bucket-Eigentümer, die volle Kontrolle zu ermöglichen.

Verwendung der AWS CLI

  1. Hochladen eines Objekts mit dem CLI-Befehl put-object. Der Parameter -body im Befehl identifiziert die hochzuladende Quelldatei. Befindet sich die Datei beispielsweise auf dem Laufwerk C: eines Windows-Computers, geben Sie c:\HappyFace.jpg an. Der Parameter --key gibt den Schlüsselnamen für das Objekt an.

    aws s3api put-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
  2. Erteilung einer Berechtigung in der Objekt-ACL, um dem Bucket-Eigentümer volle Kontrolle über das Objekt zu erteilen. Informationen darüber, wie Sie eine kanonische Benutzer-ID finden, finden Sie unter Ermitteln der kanonischen Benutzer-ID für Ihr AWS-Konto.

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin

Verwendung der Tools-for-Windows-PowerShell

  1. Verwenden des Befehls Write-S3Object der Tools for Windows PowerShell, um ein Objekt hochzuladen.

    Write-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin
  2. Erteilung einer Berechtigung in der Objekt-ACL, um dem Bucket-Eigentümer volle Kontrolle über das Objekt zu erteilen.

    Set-S3ACL -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden

Schritt 3: Testen der Berechtigungen

Überprüfen Sie nun, dass der Benutzer Dave in Konto A Zugriff auf das Objekt hat, das Konto B gehört.

Verwendung der AWS CLI

  1. Fügen Sie die Anmeldeinformationen von Benutzer Dave der AWS CLI-Config-Datei hinzu, und erstellen Sie ein neues Profil, UserDaveAccountA. Weitere Informationen finden Sie unter Einrichten der Tools für die beispielhaften Walkthroughs.

    [profile UserDaveAccountA] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. Führen Sie den CLI-Befehl get-object aus, um HappyFace.jpg herunterzuladen und es lokal zu speichern. Sie stellen dem Benutzer Dave Anmeldeinformationen bereit, indem Sie den Parameter --profile hinzufügen.

    aws s3api get-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA

Verwendung der Tools-for-Windows-PowerShell

  1. Speichern Sie die AWS-Anmeldeinformationen von Benutzer Dave als UserDaveAccountA im persistenten Speicher.

    Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -storeas UserDaveAccountA
  2. Führen Sie den Befehl Read-S3Object aus, um das Objekt HappyFace.jpg herunterzuladen und es lokal zu speichern. Sie stellen dem Benutzer Dave Anmeldeinformationen bereit, indem Sie den Parameter -StoredCredentials hinzufügen.

    Read-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA

Schritt 4: Bereinigen

  1. Nachdem Sie mit den Tests fertig sind, räumen Sie wie folgt auf.

    1. Melden Sie sich mit den Anmeldeinformationen von Konto A an der AWS Management Console an und machen Sie Folgendes:

      • Entfernen Sie in der Amazon-S3-Konsole die an DOC-EXAMPLE-BUCKET1 angefügte Bucket-Richtlinie. Löschen Sie in den Bucket Properties die Richtlinie im Abschnitt Permissions.

      • Wenn der Bucket für diese Übung erstellt wurde, löschen Sie in der Amazon-S3-Konsole die Objekte und dann den Bucket.

      • Entfernen Sie in der IAM-Konsole den Benutzer AccountAadmin.

  2. Melden Sie sich mit den Anmeldeinformationen von Konto B an der AWS Management Console an. Löschen Sie in der IAM-Konsole den Benutzer AccountBadmin.