AWS S3-Bucket-Cross-Account-Richtlinie gemischt mit internem Konto

AWS S3-Bucket-Cross-Account-Richtlinie gemischt mit internem Konto

Wir verwenden einen S3-Bucket, um Dateien zwischen zwei Unternehmen auszutauschen. Wir haben einen privaten S3-Bucket erstellt und einen dedizierten Benutzer für Anwendungen, die diesen Bucket verwenden (unter Verwendung seines AWS-Schlüssels und AWS-Geheimnisses). Wir haben herausgefunden, dass wir keinen Zugriff auf getObject haben, aber wir haben PutObject erfolgreich in den Bucket eingefügt.

Außerdem habe ich eine Rolle mit Berechtigungen für diesen Bucket erstellt und sie dem Anwendungsbenutzer zugewiesen, aber das Problem wurde dadurch nicht behoben.

Das Hauptziel besteht also darin, Lese-, Listen- und Eingabezugriff von externen Konten und internen IAM-Benutzern auf denselben S3-Bucket zu haben. Ich werde darauf hinweisen, dass externe Unternehmen derzeit mit dieser Richtlinie darauf zugreifen können. Ich habe keinen Zugriff auf externe AWS-Konten.

Nachfolgend finden Sie eine Ressourcenrichtlinie für S3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SharedS3Bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::199999999999:root",    <--- external account 
                    "arn:aws:iam::111111111111:user/application_user" <-- our application user
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::shared-bucket",
                "arn:aws:s3:::shared-bucket/*"
            ]
        }
    ]
}

Antwort1

Die S3-Berechtigungen sind ein wenig kompliziert, da Sie nicht nur dieBucket-Berechtigungenzu befürchten, sondern auch jederObjektdas Sie hochladen, verfügt über eigene Berechtigungen.

DeinBucket-Richtlinieoben erlaubt es beiden Unternehmen, Objekte hochzuladen, und es funktioniert, wie Sie sehen können. Wenn jedoch das externe Unternehmen ein Objekt hochlädt, sind es die Standardberechtigungennur Lesen durch den Ersteller zulassen, also von der externen Firma. Auch wenn es indeinBucket standardmäßigDukann es nicht lesen, wenn es von jemand anderem hochgeladen wurde. Das ist irgendwie kontraintuitiv.

Die Lösung besteht darin, sicherzustellen, dass die hochgeladenen Objekte über eine ACL verfügen, die das Lesen durch beide Konten erlaubt.

S3-Upload-Dialog

s3:PutObjectAclDamit dies funktioniert, müssen Sie auch Ihre Liste mit Bucket-Policy-Berechtigungen ergänzen .

Wenn Sie von der Befehlszeile hochladen, können Sie die Objekt-ACL nach dem Hochladen entsprechend mit ändern aws s3api put-object-acl.

Hoffentlich hilft das :)

verwandte Informationen