2015-10-22 14 views
9

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

+0

Potete mostrare la vostra politica ruolo? –

+0

'code { "Versione": "2012/10/17", "Dichiarazione": [{ "Effect": "Consenti", "Azione": "s3: *", "Risorsa": "*" } ] } ' –

risposta

5

Un errore con questo che ho fatto molte volte coinvolge il tuo ARN

Per alcune autorizzazioni sono necessarie sul secchio in sé (no/*) ... e un po 'è necessario il è contenuto.

mi piacerebbe tentare di utilizzare ciò che attualmente si dispone, includere solo entrambi, quindi qualcosa di simile ...

"Resource": ["arn:aws:s3:::the-bucket/*", "arn:aws:s3:::the-bucket"] 
3

Il problema qui è che per NotPrincipal è necessario fornire il ruolo sessione specifica. Sfortunatamente, quando si usa InstanceProfiles (o Lambda), questo ruolo di sessione è dinamico. AWS non supporta i caratteri jolly nel campo principale, quindi è praticamente impossibile utilizzare NotPrincipal con un InstanceProfile.

See AWS supporto risposta qui che riconosce come una limitazione nota: https://forums.aws.amazon.com/message.jspa?messageID=740656#740656

Problemi correlati