Criterio cross account del bucket AWS S3 combinato con account interno

Aug 21 2020

usiamo il bucket s3 per condividere file tra due società. Abbiamo creato un bucket S3 privato e abbiamo un utente dedicato per l'applicazione che utilizza questo bucket (utilizzando i suoi aws_key e aws_secret). Abbiamo capito che non abbiamo accesso a getObject, ma abbiamo inserito correttamente PutObject nel bucket.

Inoltre ho creato un ruolo con le autorizzazioni per questo bucket e l'ho assegnato a application_user, ma non ha risolto il problema.

Quindi l'obiettivo principale è leggere, elencare, inserire l'accesso da account esterno e utente IAM interno allo stesso bucket S3. Indicherò che la società esterna ha accesso ad esso, proprio ora con questa politica. Non ho accesso a un account aws esterno.

Di seguito è riportata una politica delle risorse per 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/*"
            ]
        }
    ]
}

Risposte

1 MLu Aug 26 2020 at 07:39

I permessi S3 sono un po 'complicati perché non hai solo i permessi Bucket di cui preoccuparti, ma anche ogni Oggetto che carichi ha i suoi permessi.

La tua politica dei secchi sopra consente a entrambe le società di caricare oggetti e funziona come puoi vedere. Tuttavia, quando l'azienda esterna carica un oggetto, i suoi permessi predefiniti consentono solo la lettura da parte dell'autore , ovvero dell'azienda esterna. Anche se è nel tuo bucket per impostazione predefinita, non puoi leggerlo se è stato caricato da qualcun altro. È in qualche modo controintuitivo.

La soluzione è assicurarsi che gli oggetti caricati abbiano ACL che consenta la lettura da entrambi gli account.

Dovrai anche aggiungere s3:PutObjectAclal tuo elenco di autorizzazioni Bucket Policy affinché funzioni.

Allo stesso modo, se stai caricando dalla riga di comando, puoi modificare l'oggetto acl dopo il caricamento con aws s3api put-object-acl.

Spero possa aiutare :)