Direkt zum Inhalt

Wie kann ich einem/einer Benutzer:in in einem anderen AWS-Konto den Zugriff gewähren, um Objekte in meinen Amazon-S3-Bucket hochzuladen?

Lesedauer: 3 Minute
0

Ich möchte einem/einer AWS Identity and Access Management (IAM)-Benutzer:in in einem anderen AWS-Konto Zugriff auf meinen Amazon Simple Storage Service (Amazon S3)-Bucket gewähren. Außerdem möchte ich kontoübergreifenden Zugriff gewähren, damit der/die Benutzer:in Objekte in meinen Amazon-S3-Bucket hochladen kann.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Um einem/einer Benutzer:in in einem anderen Konto Zugriff zum Hochladen von Objekten in deinen S3-Bucket zu gewähren, aktualisiere die IAM-Richtlinien entweder für den/die Benutzer:in oder sein/ihr Konto. Es hat sich bewährt, den Zugriff über das Konto zu kontrollieren, wobei der Bucket-Eigentümer die Objekteigentümerschaft erzwingt.

Wenn dein Bucket Zugriffssteuerungslisten (ACLs) anstelle der vom/von der Bucket-Eigentümer:in erzwungenen Eigentümerschaft verwendet, solltest du die Amazon-S3-Konfiguration BucketOwnerEnforced in Betracht ziehen, die ACLs deaktiviert. Überprüfe mit dem folgenden Befehl get-bucket-ownership-controls, ob der Bucket ACLs verwendet:

aws s3api get-bucket-ownership-controls --bucket DOC-EXAMPLE-BUCKET

Hinweis: Ersetze DOC-EXAMPLE-BUCKET durch deinen Bucket-Namen.

Wenn in der Ausgabe BucketOwnerPreferred oder ObjectWriter statt BucketOwnerEnforced angezeigt wird, verwendet der Bucket ACLs. Der Uploader, nicht der Bucket-Eigentümer, besitzt kontoübergreifend hochgeladene Objekte.

Vom Bucket-Eigentümer erzwungene Objekteigentümerschaft

Um Zugriff für einen Bucket auf Kontoebene zu gewähren, verwende die vom Bucket-Eigentümer erzwungene Objekteigentümerschaft. Gewähre einem/einer IAM-Benutzer:in von Konto A aus Zugriff, um Objekte in einen S3-Bucket in Konto B hochzuladen. Gehe dazu wie folgt vor:

  1. Erstelle in Konto A eine IAM-Richtlinie für Benutzer, die Zugriff auf den Bucket von Konto B benötigen:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",  
            "s3:ListBucket",  
            "s3:GetBucketLocation"
          ],
          "Resource": [
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
          ]
        }
      ]
    }

    Hinweis: Ersetze DOC-EXAMPLE-BUCKET durch deinen Bucket-Namen.

  2. Rufe von Konto A den Amazon-Ressourcennamen (ARN) des IAM-Benutzers ab.

  3. Erstelle von Konto B aus eine Bucket-Richtlinie, die dem/der kontoübergreifenden Benutzer:in die Berechtigung erteilt, Objekte hochzuladen:

    {
      "Version": "2012-10-17",
      "Statement": [
          {  
              "Sid": "CrossAccountUploadAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
              "Action": [  
                  "s3:PutObject"  
              ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          },  
          {  
              "Sid": "CrossAccountListAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
              "Action": [  
                  "s3:ListBucket",  
                  "s3:GetBucketLocation"  
              ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"  
          }  
        ]
    }

    Hinweis: Gib für den Wert Prinzipal unbedingt den ARN des IAM-Benutzers in Konto A ein. Ersetze DOC-EXAMPLE-BUCKET durch deinen Bucket-Namen.

ACL hat die Objekteigentümerschaft erzwungen

Um Zugriff für einen Bucket zu gewähren, der die durch die ACL erzwungene Objekteigentümerschaft verwendet, gewähre die PutObjectAcl-Berechtigung in der Bucket-Richtlinie und der IAM-Benutzerrichtlinie.

  1. Füge von Konto A aus eine Richtlinie an den/die IAM-Benutzer:in an. Die Richtlinie muss es dem/der Benutzer:in ermöglichen, die Aktionen PutObject und PutObjectAcl auszuführen:

    {    
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:PutObject",  
            "s3:PutObjectAcl",  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
          ],  
          "Resource": [  
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET",  
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          ]  
        }  
      ]  
    }

    Hinweis: Bevor du eine ACL für den Upload angibst, musst du über die s3:PutObjectAcl-Berechtigung verfügen. Andernfalls erhältst du den Fehler „Access Denied“, wenn du ein Objekt mit einer ACL hochlädst, z. B. mit der bucket-owner-full control-ACL.

  2. Füge von Konto B aus eine Bucket-Richtlinie an, die dem/der IAM-Benutzer:in in Konto A die Berechtigung erteilt, die Aktionen s3:PutObject und s3:PutObjectAcl auszuführen:

    {  
      "Version": "2012-10-17",  
      "Statement": [  
          {  
              "Sid": "DelegateS3ObjectAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::999999999999:user/UploadData"  
              },    
              "Action": [  
                  "s3:PutObject",  
                  "s3:PutObjectAcl"  
               ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          },  
          {  
              "Sid": "DelegateS3BucketAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
                "Action": [  
                    "s3:ListBucket",  
                    "s3:GetBucketLocation"  
                ],  
                "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"  
            }  
        ]  
    }

Ähnliche Informationen

Beispiel 2: Bucket-Eigentümer:in, der/die kontoübergreifende Bucket-Berechtigungen gewährt