Vogliamo memorizzare alcuni dati su S3 e consentire solo le istanze EC2 o un particolare utente con un particolare ruolo IAM di accedervi. Sfortunatamente stiamo avendo qualche problema a farlo.Come limitare l'accesso a S3 Bucket per un particolare ruolo IAM?
Abbiamo impostato una politica sul secchio come questo
{
"Version": "2012-10-17",
"Id": "SamplePolicy",
"Statement": [
{
"Sid": "Stmt1331136294179",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::our-account-number:user/the-user",
"arn:aws:iam::our-account-number:role/the-role"
]
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::the-bucket/*"
},
{
"Sid": "Stmt1331136364169",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::our-account-number:user/the-user",
"arn:aws:iam::our-account-number:role/the-role"
]
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::the-bucket/*"
}
]}
Quando si accede al secchio (usando boto) con gli utenti chiave funziona benissimo, da una macchina locale o di qualsiasi istanza EC2.
Ma, quando si accede al secchio da Boto otteniamo
ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
ho confermato che l'istanza ha il corretto ruolo IAM
curl http://169.254.169.254/latest/meta-data/iam/info/
{
"Code" : "Success",
"LastUpdated" : "2015-10-22T09:09:31Z",
"InstanceProfileArn" : "our-account-number:instance-profile/the-role",
"InstanceProfileId" : "instance-rpofile-id"
}
Ho anche provato a rimuovere il criterio dal secchio, che in effetti lo rende nuovamente accessibile. Qualche idea su come gestirlo?
L'esempio che ho condiviso qui è una versione semplificata che ho eseguito per il debug. In produzione, vogliamo forzare l'oggetto a essere crittografato con KMS e avere anche un criterio di accesso sulla chiave. Ci piace molto questa soluzione e preferiamo mantenerla se possiamo.
Grazie
Potete mostrare la vostra politica ruolo? –
'code { "Versione": "2012/10/17", "Dichiarazione": [{ "Effect": "Consenti", "Azione": "s3: *", "Risorsa": "*" } ] } ' –