Criterio cross account del bucket AWS S3 combinato con account interno
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
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:PutObjectAcl
al 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 :)