Wie kann ich kontoübergreifenden Zugriff auf Objekte gewähren, die sich in Amazon S3-Buckets befinden?

Lesedauer: 9 Minute
0

Ich möchte einem anderen AWS-Konto Zugriff auf ein Objekt gewähren, das sich in einem Amazon Simple Storage Service (Amazon S3)-Bucket befindet.

Kurzbeschreibung

In Amazon S3 können Sie Benutzern in einem anderen AWS-Konto detaillierten kontoübergreifenden Zugriff auf Objekte gewähren, die Sie in Ihrem Konto besitzen.

Verwenden Sie je nach Art des Zugriffs, den Sie gewähren möchten, eine der folgenden Lösungen, um kontoübergreifenden Zugriff auf Objekte zu gewähren:

  • AWS Identity and Access Management (IAM)-Richtlinien und ressourcenbasierte Bucket-Richtlinien für den rein programmgesteuerten Zugriff auf S3-Bucket-Objekte
  • IAM-Richtlinien und ressourcenbasierte Zugriffssteuerungslisten (ACLs) für den rein programmgesteuerten Zugriff auf S3-Bucket-Objekte
    Hinweis: Wenn die Einstellung Bucket-Besitzer erzwungen aktiviert ist, werden alle Bucket- und Objekt-ACLs deaktiviert. Daher können Sie ACLs nicht verwenden, um kontoübergreifenden Zugriff zu gewähren. Standardmäßig ist für alle neu erstellten S3-Buckets die Einstellung Bucket-Besitzer erzwungen aktiviert. Zur Verwaltung des kontoübergreifenden Zugriffs empfiehlt es sich außerdem, IAM-Richtlinien und Bucket-Richtlinien anstelle von ACLs zu verwenden. Weitere Informationen finden Sie unter Steuern des Eigentums an Objekten und Deaktivieren von ACLs für Ihren Bucket.
  • Kontoübergreifende IAM-Rollen für den programmgesteuerten Zugriff und den Konsolenzugriff auf S3-Bucket-Objekte

Wenn der Anforderer ein IAM-Prinzipal ist, muss das Konto, dem der Prinzipal gehört, die S3-Berechtigungen über eine IAM-Richtlinie gewähren. Je nach Anwendungsfall muss der Bucket-Besitzer auch Berechtigungen über eine Bucket-Richtlinie oder ACL gewähren. Nachdem der Zugriff gewährt wurde, entspricht der programmgesteuerte Zugriff auf kontoübergreifende Buckets dem Zugriff auf die Konto-Buckets.

Informationen zum kontoübergreifenden Zugriff mit Amazon S3 Access Points oder AWS Key Management Service (AWS KMS) finden Sie unter Warum erhalten kontoübergreifende Benutzer die Fehlermeldung „Access Denied“, wenn sie versuchen, auf S3-Objekte zuzugreifen, die mit einem benutzerdefinierten AWS-KMS-Schlüssel verschlüsselt sind?

Für große Datensätze, auf die Sie als kontoübergreifende Objekte zugreifen müssen, empfiehlt es sich, S3 Access Points zu verwenden. Weitere Informationen finden Sie unter Vereinfachen und Skalieren des Zugriffsmanagements auf gemeinsam genutzte Datensätze mit kontoübergreifenden Amazon S3 Access Points.

Behebung

IAM-Richtlinien und ressourcenbasierte Bucket-Richtlinien

Hinweis: Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Beheben von Fehlern in der AWS CLI. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Verwenden Sie ressourcenbasierte Bucket-Richtlinien, um die kontoübergreifende Zugriffskontrolle zu verwalten und die Berechtigungen des S3-Objekts zu überprüfen. Wenden Sie eine Bucket-Richtlinie auf Bucket-Ebene an, um die folgenden Werte zu definieren:

  • Prinzipalelement: Wer kann auf die Objekte im Bucket zugreifen
  • Ressourcenelement: Die Objekte, auf die sie zugreifen können
  • Aktionselement: Wie sie auf die Objekte im Bucket zugreifen können

Wenn Sie eine Bucket-Richtlinie auf Bucket-Ebene anwenden, können Sie den genauen Zugriff auf verschiedene Objekte innerhalb des Buckets definieren. Sie können auch die Bucket-Richtlinie überprüfen, um zu sehen, wer auf Objekte in einem S3-Bucket zugreifen kann.

Gehen Sie wie folgt vor, um Bucket-Richtlinien für die Verwaltung des S3-Bucket-Zugriffs zu verwenden:
Hinweis: In den folgenden Schritten ist Konto A Ihr Konto, und Konto B ist das Konto, dem Sie Objektzugriff gewähren möchten.

  1. Erstellen Sie einen S3-Bucket in Konto A.

  2. Erstellen Sie eine IAM-Rolle oder einen IAM-Benutzer in Konto B.

  3. Erteilen Sie der IAM-Rolle in Konto B die Erlaubnis, Objekte in einen bestimmten Bucket herunterzuladen (GetObject) und aus diesem hochzuladen (PutObject). Verwenden Sie die IAM-Richtlinie, um auch der IAM-Rolle in Konto B Berechtigungen zuzuweisen, um PutObjectAcl aufzurufen, das dem Bucket-Besitzer Objektberechtigungen gewährt:

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

    Hinweis: Aktualisieren Sie die Richtlinie, um Ihre Benutzervariablen einzubeziehen. Sie können auch den Zugriff auf einen bestimmten Bucket-Ordner in Konto A einschränken. Um den Zugriff auf einen bestimmten Bucket-Ordner einzuschränken, definieren Sie den Ordnernamen im Resource-Element, z. B. „arn:aws:s3: ::AccountABucketName/FolderName/*“. Weitere Informationen finden Sie unter Wie kann ich einem Benutzer Zugriff auf einen bestimmten Ordner in meinem Amazon S3-Bucket gewähren?Sie können auch eine auf IAM-Identität basierende Richtlinie mit dem AWS-CLI-Befehl create-policy erstellen.

  4. Konfigurieren Sie die Bucket-Richtlinie für Konto A, um der IAM-Rolle oder dem Benutzer, den Sie in Konto B erstellt haben, Berechtigungen zu gewähren. Verwenden Sie diese Bucket-Richtlinie, um einem Benutzer die Berechtigungen für GetObject und PutObject für Objekte in einem Bucket zu gewähren, der Konto A gehört:

    {    "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/*"
                ]
            }
        ]
    }

    Sie können auch eine Amazon S3-Bucket-Richtlinie mit dem AWS CLI-Befehl put-bucket-policy erstellen.

Hinweis: Um den Zugriff auf einen bestimmten Bucket-Ordner einzuschränken, definieren Sie den Ordnernamen im Resource-Element, z. B. „arn:aws:s3: ::AccountABucketName/FolderName/\ *“. Wenn Sie die s3:PutObject-Berechtigung mit einer Bedingung verwenden, hat der Bucket-Besitzer die volle Kontrolle über die Objekte, die andere Konten hochladen. Der PutObject API-Aufruf erzwingt die ACL mit bestimmten Headern.

IAM-Richtlinien und ressourcenbasierte ACLs

Sie können Objekt-ACLs auch verwenden, um Berechtigungen für bestimmte Szenarien zu verwalten. Weitere Informationen finden Sie unter Wann sollte eine ACL-basierte Zugriffsrichtlinie verwendet werden (Bucket- und Objekt-ACLs).

Mit Amazon S3 ACLs können Benutzer nur die Berechtigungssätze READ, WRITE, READ_ACP, WRITE_ACP und FULL_CONTROL definieren. Sie können nur ein Konto oder eine der vordefinierten Amazon S3-Gruppen als Empfänger für die Amazon S3 ACL verwenden. Wenn Sie eine E-Mail-Adresse oder eine kanonische Benutzer-ID für ein Konto angeben, gilt die ACL für alle Identitäten im Empfängerkonto. Beispielsweise können Sie eine ACL nicht verwenden, um den Zugriff auf einzelne IAM-Benutzer oder -Rollen einzuschränken. Sie können ACLs auch nicht auf verschiedene Objekte anwenden, die dieselben Präfixe verwenden.

Hinweis: Der Bucket-Besitzer hat möglicherweise nicht die volle Kontrolle über die Objekte, die der ACL-Empfänger hochgeladen hat. Das liegt daran, dass die ACL die Bedingung für den S3-Vorgang, den die ACL autorisiert, nicht unterstützt.

Gehen Sie wie folgt vor, um Bucket- und Objekt-ACLs zur Verwaltung des S3-Bucket-Zugriffs zu verwenden:

  1. Erstellen Sie eine IAM-Rolle oder einen IAM-Benutzer in Konto B.
  2. Erteilen Sie der Rolle oder dem Benutzer Berechtigungen, um die erforderlichen Amazon S3-Operationen auszuführen. Benutzer, die PutObject und GetObject aufrufen, müssen über die Berechtigungen verfügen, die im Abschnitt Ressourcenbasierte Richtlinien und IAM-Richtlinien aufgeführt sind.
  3. Konfigurieren Sie die Bucket-ACL so, dass sie mindestens die WRITE-Berechtigung für Konto B enthält. Dadurch wird sichergestellt, dass die IAM-Rollen oder Benutzer von Konto B Objekte in einen Bucket hochladen können, der Konto A gehört:
    ...<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>
    Hinweis: Informationen zum Ermitteln Ihrer CanonicalUserID finden Sie unter Ermitteln einer kanonischen Benutzer-ID für ein AWS-Konto.
  4. Konfigurieren Sie Objekt-ACLs so, dass sie mindestens die READ-Berechtigung für Konto B enthalten. Dadurch können IAM-Rollen oder Benutzer in Konto B-Objekte aus einem Bucket herunterladen, den Konto A besitzt:
    ...<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>
    Die ACL-Berechtigungen variieren je nach S3-Ressource, Bucket oder Objekt, auf das eine ACL angewendet wird. Weitere Informationen finden Sie unter Übersicht über die Zugriffssteuerungsliste (ACL). Wenn Sie einen Bucket erstellen oder ein Objekt in einen vorhandenen Bucket hochladen, konfigurieren Sie Bucket- und Objekt-ACLs. Weitere Informationen finden Sie unter Konfigurieren der ACLs.

Kontoübergreifende IAM-Rollen

Nicht alle AWS-Services unterstützen ressourcenbasierte Richtlinien. Verwenden Sie kontoübergreifende IAM-Rollen, um die Berechtigungsverwaltung zu zentralisieren, wenn Sie kontoübergreifenden Zugriff auf mehrere Dienste gewähren. Diese Methode ermöglicht den kontoübergreifenden Zugriff auf Objekte, die einem anderen Konto oder AWS-Service gehören oder von diesem hochgeladen wurden. Wenn Sie keine kontoübergreifenden IAM-Rollen verwenden, müssen Sie die Objekt-ACL ändern. Weitere Informationen finden Sie unter So autorisiert Amazon S3 eine Anfrage für eine Objektoperation.

Gehen Sie wie folgt vor, um kontoübergreifende IAM-Rollen für die Verwaltung des S3-Bucket-Zugriffs zu verwenden:

  1. Erstellen Sie eine IAM-Rolle in Konto A.
  2. Erteilen Sie der Rolle Berechtigungen, um die erforderlichen S3-Operationen auszuführen. Gewähren Sie in der Vertrauensrichtlinie der Rolle einer Rolle oder einem Benutzer aus Konto B die Berechtigungen, die Rolle in Konto A zu übernehmen:
    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    Hinweis: IAM-Rollen müssen über eine Vertrauensrichtlinie verfügen, die die Prinzipale definiert, die die Rolle übernehmen können und wann die Rollen sie übernehmen können. IAM-Rollen können mehrere Berechtigungsrichtlinien haben, die die Berechtigungen definieren, die ein Prinzipal, der die Rolle übernimmt, ausführen kann, und die Ressourcen, die er verwendet. 
    Sie können auch den AWS-CLI-Befehl create-role ausführen, um eine Rolle mit der Vertrauensrichtlinie zu erstellen.
    Die folgende Zugriffsrichtlinie ermöglicht es einem Benutzer, der diese Rolle übernommen hat, Objekte programmgesteuert über die Amazon-S3-Konsole herunterzuladen und hochzuladen. Weitere Informationen finden Sie unter Wie kann ich einem Benutzer Zugriff auf einen bestimmten Ordner in meinem Amazon S3-Bucket gewähren?
    Hinweis: Wenn nur programmgesteuerter Zugriff erforderlich ist, können Sie die ersten beiden Anweisungen in der Richtlinie entfernen:
    {    "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/*"
            }
        ]
    }
    Oder führen Sie den AWS CLI-Befehl create-policy aus, um eine identitätsbasierte IAM-Richtlinie zu erstellen.
  3. Gewähren Sie einer IAM-Rolle oder einem Benutzer in Konto B die Berechtigung, die IAM-Rolle anzunehmen, die Sie in Konto A erstellt haben. Sie müssen die folgende Beispielrichtlinie als Berechtigungsrichtlinie für den IAM-Benutzer oder die IAM-Rolle hinzufügen:
    {  "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::AccountA:role/AccountARole"
      }
    }
    Oder führen Sie den AWS CLI-Befehl create-policy aus, um eine identitätsbasierte IAM-Richtlinie zu erstellen.
  4. Nehmen Sie von einer Rolle in Konto B die Rolle in Konto A an, damit die IAM-Identitäten in Konto B die erforderlichen S3-Operationen ausführen können. Weitere Informationen finden Sie unter Zu einer Rolle wechseln (Konsole).
    Hinweis: Wenn Sie eine IAM-Rolle in Konto A übernehmen, bestimmt Amazon S3 den Vorgang auf der Grundlage der Zugriffsrichtlinie. Die IAM-Rolle funktioniert als API-Aufruf, den eine lokale IAM-Identität in Konto A aufgerufen hat. Eine Bucket-Richtlinie oder eine ACL für den kontoübergreifenden Zugriff ist nicht erforderlich. Weitere Informationen finden Sie unter Amazon S3-Aktionen.

Ähnliche Informationen

Aktionen, Ressourcen und Bedingungsschlüssel für Amazon S3

Beispiele für Bucket-Richtlinien

Leitfaden für Zugriffsrichtlinien

Einrichtung der kontoübergreifenden systemeigenen Sicherung und Wiederherstellung in Amazon RDS für Microsoft SQL Server

Beispiele für Benutzer- und Rollenrichtlinien

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 4 Monaten