2014-11-11 4 views
5

Ho creato con successo un utente, le credenziali e un bucket.
Ora devo concedere l'accesso al bucket a questo utente.È possibile ottenere l'ID utente canonico dagli utenti AWS IAM, dall'API .NET?

C'è un modo per ottenere questo valore di CanonicalUser dal codice?
L'oggetto utente IAM fornisce solo i valori ARN, Path, UserId e UserName, ma nessuno di questi è valido per la concessione.

using (var s3 = new Amazon.S3.AmazonS3Client("[user_key]", "[secret_user_key]", RegionEndpoint.GetBySystemName("eu-west-1"))) 
{ 
    var response = s3.GetACL("[bucket_id]"); 
    var acl = response.AccessControlList; 
    acl.AddGrant(
     new S3Grantee() { 
      CanonicalUser = **???** 
     }, 
     new S3Permission(S3Permission.FULL_CONTROL) 
    ); 
    s3.PutACL(
     new PutACLRequest() { 
      AccessControlList = acl, 
      BucketName = "[bucket_id]" 
     } 
    ); 
} 
+0

ho finito per mettere la politica sull'utente IAM. Questo documento di policy sta specificando agli utenti l'accesso al bucket. (http://docs.aws.amazon.com/IAM/latest/UserGuide/PolicyVariables.html) – KTW

risposta

1

No, non è possibile ottenere l'id utente canonica dal codice - hai colpito un aspetto un po 'strano e probabilmente eredità a causa del diverso modo di manage access permissions for S3 resources, vedere la risposta del team di AWS per How to find out Canonical ID for an IAM user?:

Non è possibile aggiungere utenti IAM agli ACL come beneficiario. Avrò la documentazione aggiornata per chiarire che gli utenti IAM non sono supportati negli ACL. Ci sono un paio di soluzioni è possibile utilizzare per concedere questo accesso degli utenti ai contenuti Amazon S3: [...]

Si potrebbe infatti voler riconsiderare utilizzando il più versatile S3 bucket policies invece (vedi sotto) - tuttavia, se si ha accesso alle credenziali di root del conto, si potrebbe trovare l'ID utente canonica associato al tuo account AWS come indicato nel Specifying a Principal in a Policy (si badi bene, questo non funziona con le credenziali utente IAM):

  1. Vai a http://aws.amazon.com e dallo Il mio account/Console menu a discesa, selezionare Credenziali di sicurezza.
  2. Accedi utilizzando le credenziali dell'account appropriate.
  3. Fare clic su Identificativi account.

io sottolineare ancora una volta che AWS raccomanda vivamente di utilizzare solo gli utenti IAM in questi giorni, si veda per es Root Account Credentials vs. IAM User Credentials:

Poiché non è possibile controllare i privilegi di root le credenziali, è necessario memorizzare in un luogo sicuro e di utilizzare invece AWS Identity and Access Management (IAM) le credenziali dell'utente per il giorno-to giorno interazione con AWS.

Questo requisito ID utente canonica per S3 è una rara eccezione, e come ho detto probabilità di essere considerato un retaggio artefatto dovuto allo strato di ACL S3 predating IAM, quindi meglio evitare, se possibile.

3

Si può facilmente ottenere CanonicalUser ID utilizzando ListAllMyBuckets chiamata API [1] (S3: è richiesto il permesso ListAllMyBuckets):

$ aws s3api list-buckets --query Owner 
{ 
    "DisplayName": "lord-vader", 
    "ID": "f420064cb076f772e10584fc40ab777c09f6b7d154342cf358f1bd1e573c9cf7" 
} 

Nel AWSJavaSDK utilizzare il metodo AmazonS3.getS3AccountOwner involucro [2].

  1. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTServiceGET.html
  2. http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getS3AccountOwner--