Wie gewähre ich kontoübergreifenden Zugriff auf Objekte in Amazon-S3-Buckets?

Letzte Aktualisierung: 26.02.2021

Ich möchte einem anderen AWS-Konto Zugriff auf ein Objekt gewähren, das in einem Amazon-Simple-Storage-Service-Bucket (Amazon S3) gespeichert ist. Wie kann ich kontoübergreifenden Zugriff auf Amazon-S3-Buckets bereitstellen?

Kurzbeschreibung

Verwenden Sie eine der folgenden Methoden, um kontoübergreifenden Zugriff auf Objekte zu gewähren, die in S3-Buckets gespeichert sind:

  • Ressourcenbasierte Richtlinien und AWS-Identity-and-Access-Management(IAM)-Richtlinien für den programmgesteuerten Zugriff auf S3-Bucket-Objekte
  • Ressourcenbasierte Zugriffskontrollliste (ACL) und IAM-Richtlinien für den programmgesteuerten Zugriff auf S3-Bucket-Objekte
  • Kontoübergreifende IAM-Rollen für den programmatischen und Konsolenzugriff auf S3-Bucket-Objekte

Je nach Art des Zugriffs, den Sie bereitstellen möchten, Verwenden Sie eine der folgenden Lösungen, um detaillierten kontoübergreifenden Zugriff auf Objekte zu gewähren, die in S3-Buckets gespeichert sind. In den folgenden Beispielen gewähren Sie Benutzern in einem anderen AWS-Konto (Konto B) Zugriff, damit Benutzer Objekte verwalten können, die sich in einem S3-Bucket befinden, der Ihrem Konto gehört (Konto A).

Hinweis: Achten Sie darauf, die Richtlinie so zu aktualisieren, dass sie Ihre Konto-ID, Ihren Bucket-Namen, ARN usw. enthält.

Auflösung

Ressourcenbasierte Richtlinien und IAM-Richtlinien

Hinweis: Wenn Sie beim Ausführen von AWS-Command-Line-Interface(AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

Verwenden Sie Bucket-Richtlinien, um die kontoübergreifende Kontrolle zu verwalten und die Berechtigungen des S3-Objekts zu prüfen. Wenn Sie eine Bucket-Richtlinie auf Bucket-Ebene anwenden, können Sie definieren, wer darauf zugreifen kann (Hauptelement), auf welche Objekte sie zugreifen können (Ressourcen-Element) und wie sie zugreifen können (Aktionselement). Durch Anwenden einer Bucket-Richtlinie auf Bucket-Ebene können Sie einen detaillierten 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.

So verwenden Sie Bucket-Richtlinien zum Verwalten des S3-Bucket-Zugriffs:

Hinweis: Ersetzen Sie die Variablen Konto durch Ihr Konto.

1.    Create an S3 bucket Erstellen Sie einen S3-Bucket</a> in Konto A.

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

3.    Erteilen Sie der IAM-Rolle oder dem IAM-Benutzer in Konto B die Berechtigung zum Herunterladen (GET-Objekt) und Hochladen (PUT-Objekt) von Objekten in und aus einem bestimmten S3-Bucket mit dieser IAM-Richtlinie. Diese Richtlinie erteilt der IAM-Rolle oder dem Benutzer in Konto B auch die Berechtigung, PUT-Objekt-ACL aufzurufen, um dem Bucket-Eigentümer Objektberechtigungen zu erteilen:

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

        }
    ]
}

Sie können auch mit dem AWS-CLI-Befehlsbeispiel create-policy eine identitätsbasierte IAM-Richtlinie erstellen.

Hinweis: Sie können den Zugriff auf einen bestimmten Bucket-Ordner im Konto beschränken in A durch Definieren des Ordnernamens im Ressourcenelement, z. B. „arn:aws:s3:::AccountABucketName/FolderName/*“. Weitere Informationen finden Sie unter Wie kann ich IAM-Richtlinien verwenden, um benutzerspezifischen Zugriff auf bestimmte Ordner zu gewähren?

4.    Konfigurieren Sie die Bucket-Richtlinie für Konto A, um der IAM-Rolle oder dem Benutzer, die Sie in Konto B erstellt haben, Berechtigungen zu erteilen. Verwenden Sie diese Bucket-Richtlinie, um einem Benutzer die Berechtigungen für GetObject und PutObject für Objekte in einem Bucket zu erteilen, 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-Befehlsbeispiel put-bucket-policy erstellen.

Hinweis: Sie können einen bestimmten S3-Bucket-Ordner im Ressourcenelement definieren, um einen detaillierten Zugriff für eingeschränkteren Zugriff bereitzustellen, z. B. „Ressource“: „arn:aws:s3:::AccountABucketName/FolderName/*“. Durch die Verwendung der s3:PutObject-Berechtigung mit einer Bedingung erhält der Bucket-Eigentümer die vollständige Kontrolle über die von anderen Konten hochgeladenen Objekte. Das Erzwingen der ACL mit bestimmten Headern wird dann im PutObject-API-Aufruf übergeben. Weitere Informationen finden Sie unter Erteilen der s3:PutObject-Berechtigung mit einer Bedingung, die erfordert, dass der Bucket-Eigentümer die volle Kontrolle erhält.

Ressourcenbasierte Zugriffskontrollliste (ACL) und IAM-Richtlinien

Verwenden Sie Objekt-ACLs, um Berechtigungen nur für bestimmte Szenarien und nur dann zu verwalten, wenn ACLs Ihre Anforderungen besser erfüllen als IAM- und S3-Bucket-Richtlinien. Weitere Informationen finden Sie unter Wann sollte man die ACL-basierten Zugriffsrichtlinie (Bucket- und Objekt-ACLs) nutzen?. Amazon-S3-ACLs ermöglichen es Benutzern, nur die folgenden Berechtigungssätze zu definieren: READ, WRITE, READ_ACP, WRITE_ACP und FULL_CONTROL. Sie können nur ein AWS-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 die kanonische Benutzer-ID für ein AWS-Konto angeben, gilt die ACL für alle Entitäten im AWS-Konto des Empfängers. Sie können eine ACL nicht verwenden, um den Zugriff auf einzelne IAM-Benutzer oder -Rollen einzuschränken. Sie können ACLs nicht auf verschiedene Objekte anwenden, die dieselben Präfixe verwenden.

Hinweis: Der Bucket-Eigentümer hat möglicherweise nicht die vollständige Kontrolle über die vom ACL-Berechtigten hochgeladenen Objekte. Dies liegt daran, dass die ACL die von der ACL autorisierte Bedingung für den S3-Vorgang nicht unterstützt.

Um Bucket- und Objekt-ACLs zum Verwalten des S3-Bucket-Zugriffs zu verwenden, führen Sie die folgenden Schritte aus:

1.    Erstellen Sie eine IAM-Rolle oder einen IAM-Benutzer in Konto B. Erteilen Sie dann dieser Rolle oder diesem Benutzer Berechtigungen zum Ausführen der erforderlichen Amazon-S3-Vorgänge. Benutzer, die PutObject und GetObject aufrufen, benötigen die im Abschnitt Ressourcenbasierte Richtlinien und IAM-Richtlinien aufgeführten Berechtigungen.

2.    Konfigurieren Sie die Bucket-ACL so, dass sie mindestens die WRITE-Berechtigung für Konto B enthält. Dadurch wird sichergestellt, dass IAM-Rollen oder Benutzer von Konto B Objekte in einen Bucket hochladen können (PutObject API aufrufen), 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 Suchen einer kanonischen Benutzer-ID eines AWS-Kontos.

3.    Konfigurieren Sie Objekt-ACLs so, dass sie mindestens die READ-Berechtigung für Konto B enthalten. Dadurch wird sichergestellt, dass IAM-Rollen oder Benutzer in Konto B ein Objekt aus einem Bucket herunterladen können (Aufruf der GetObject-API), 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> READ </Permission>
    </Grant>
    ...
  </AccessControlList>
</AccessControlPolicy>

ACL-Berechtigungen variieren je nach S3-Ressource, Bucket oder Objekt, auf das eine ACL angewendet wird. Weitere Informationen finden Sie unter Übersicht über die Zugriffskontrollliste (ACL). Sie können Bucket- und Objekt-ACLs konfigurieren, wenn Sie Ihren Bucket erstellen oder ein Objekt in einen vorhandenen Bucket hochladen. Weitere Informationen finden Sie unter Verwalten von ACLs.

Kontoübergreifende IAM-Rollen

Nicht alle AWS-Services unterstützen ressourcenbasierte Richtlinien. Dies bedeutet, dass Sie kontoübergreifende IAM-Rollen verwenden können, um die Berechtigungsverwaltung zu zentralisieren, wenn Sie kontoübergreifenden Zugriff auf mehrere Services bereitstellen. Die Verwendung kontoübergreifender IAM-Rollen vereinfacht die Bereitstellung des kontoübergreifenden Zugriffs auf S3-Objekte, die in mehreren S3-Buckets gespeichert sind, wodurch die Verwaltung mehrerer Richtlinien für S3-Buckets entfällt. Diese Methode ermöglicht den kontoübergreifenden Zugriff auf Objekte, die einem anderen AWS-Konto oder AWS-Services gehören oder von diesen hochgeladen wurden. Wenn Sie keine kontoübergreifenden IAM-Rollen verwenden, muss die Objekt-ACL geändert werden. Weitere Informationen finden Sie unter So autorisiert Amazon S3 eine Anforderung für eine Objektoperation.

So verwenden Sie Bucket-Richtlinien zum Verwalten des S3-Bucket-Zugriffs:

1.    Erstellen Sie eine IAM-Rolle in Konto A. Erteilen Sie dann der Rolle Berechtigungen zum Ausführen der erforderlichen S3-Vorgänge. Erteilen Sie in der Vertrauensrichtlinie der Rolle einer Rolle oder einem Benutzer von Konto B Berechtigungen, um 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"
    }
  ]
}

Sie können auch eine Rolle mit der Vertrauensrichtlinie erstellen, indem Sie das AWS-CLI-Befehlsbeispiel create-role verwenden.

Die folgende Zugriffsrichtlinie ermöglicht einem Benutzer, der diese Rolle übernommen hat, das Herunterladen und Hochladen von Objekten, programmgesteuert und mithilfe der Amazon S3-Konsole. Weitere Informationen finden Sie unter Wie kann ich IAM-Richtlinien verwenden, um benutzerspezifischen Zugriff auf bestimmte Ordner zu gewähren?

Hinweis: Wenn nur programmgesteuerter Zugriff erforderlich ist, können die ersten zwei Aussagen in der folgenden Richtlinie entfernt werden:

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

Sie können auch mit dem AWS-CLI-Befehlsbeispiel create-policy eine identitätsbasierte IAM-Richtlinie erstellen.

2.    Gewähren Sie einer IAM-Rolle oder einem Benutzer in Konto B Berechtigungen, um die IAM-Rolle zu übernehmen, die Sie in Konto A erstellt haben.

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::AccountA:role/AccountARole"
  }
}

Sie können auch mit dem AWS-CLI-Befehlsbeispiel create-policy eine identitätsbasierte IAM-Richtlinie erstellen.

3.    Übernehmen Sie von einer Rolle oder einem Benutzer in Konto B die Rolle in Konto A, damit IAM-Entitäten in Konto B die erforderlichen S3-Vorgänge ausführen können. Weitere Informationen finden Sie unter Wechseln zu einer Rolle (Konsole).

Hinweis: Durch die Übernahme einer IAM-Rolle in Konto A wird der Amazon-S3-Vorgang durch die Zugangsrichtlinien bestimmt. Die IAM-Rolle gilt als API-Aufruf einer lokalen IAM-Entität in Konto A. Eine Bucket-Richtlinie oder eine ACL für den kontoübergreifenden Zugriff ist nicht erforderlich. Weitere Informationen finden Sie unter Amazon S3-Aktionen.