Accesso tra account in Athena a bucket Amazon S3 - Amazon Athena

Accesso tra account in Athena a bucket Amazon S3

Uno scenario comune di Amazon Athena è la concessione dell'accesso agli utenti in un account diverso da quello del proprietario del bucket, in modo che possano eseguire le query. In questo caso, occorre utilizzare una policy dei bucket per concedere l'accesso.

Nota

Per ulteriori informazioni sull'accesso tra account ai cataloghi dati di AWS Glue da Athena, vedi Accesso tra account ai cataloghi dati AWS Glue.

La seguente policy dei bucket di esempio, creata e applicata al bucket s3://amzn-s3-demo-bucket dal proprietario del bucket, concede l'accesso a tutti gli utenti nell'account 123456789123, che è un account diverso.

JSON
{ "Version":"2012-10-17", "Id": "MyPolicyID", "Statement": [ { "Sid": "MyStatementSid", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789123:root" }, "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

Per concedere l'accesso a un determinato utente in un account, occorre sostituire la chiave Principal con una chiave che specifica l'utente anziché root. Ad esempio, per il profilo utente Dave, è necessario utilizzare arn:aws:iam::123456789123:user/Dave.

Accesso tra account a un bucket crittografato con una chiave AWS KMS personalizzata

Se hai un bucket Amazon S3 crittografato con una chiave AWS Key Management Service (AWS KMS) personalizzata, potrebbe essere necessario concedere l'accesso agli utenti da un altro account Amazon Web Services.

Per concedere l'accesso a un bucket crittografato con AWS KMS nell'Account A a un utente nell'Account B sono richieste le seguenti autorizzazioni:

  • La policy del bucket nell'Account A deve concedere l'accesso al ruolo assunto dall'Account B.

  • La policy della chiave AWS KMS nell'Account A deve concedere l'accesso al ruolo assunto dall'utente nell'Account B.

  • Il ruolo AWS Identity and Access Management (IAM) assunto dall'Account B deve concedere all'utente l'accesso sia al bucket sia alla chiave nell'Account A.

Nelle procedure seguenti viene descritto come concedere ciascuna di queste autorizzazioni.

Per concedere l'accesso al bucket nell'Account A all'utente nell'Account B
  • Nell'Account A, esaminare la policy del bucket S3 e verificare che sia presente un'istruzione che consenta l'accesso dall'ID dell'Account B.

    Ad esempio, la seguente policy del bucket consente l'accesso s3:GetObject all'ID 111122223333 dell'account:

    JSON
    { "Id": "ExamplePolicy1", "Version":"2012-10-17", "Statement": [ { "Sid": "ExampleStmt1", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Principal": { "AWS": [ "111122223333" ] } } ] }
Per concedere l'accesso all'utente nell'Account B dalla policy della chiave AWS KMS nell'Account A
  1. Nella policy della chiave AWS KMS per l'Account A, concedi al ruolo assunto dall'Account B le autorizzazioni per le operazioni seguenti:

    • kms:Encrypt

    • kms:Decrypt

    • kms:ReEncrypt*

    • kms:GenerateDataKey*

    • kms:DescribeKey

    Nell'esempio seguente viene concesso l'accesso alla chiave a un solo ruolo IAM.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowUseOfTheKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/role_name" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] }
  2. Dall'Account A, esamina la policy delle chiavi utilizzando la visualizzazione delle policy della Console di gestione AWS.

  3. Nella policy della chiave, verificare che l'istruzione seguente elenchi l'Account B come principal.

    "Sid": "Allow use of the key"
  4. Se l'istruzione "Sid": "Allow use of the key" non è presente, attenersi alla seguente procedura:

    1. Visualizzare la policy della chiave utilizzando la visualizzazione predefinita della console.

    2. Aggiungere l'ID dell'Account B come account esterno con accesso alla chiave.

Concessione dell'accesso al bucket e alla chiave nell'Account A dal ruolo IAM assunto dall'Account B
  1. Dall'Account B, apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Apri il ruolo IAM associato all'utente nell'Account B.

  3. Esamina l'elenco delle policy di autorizzazione applicate al ruolo IAM.

  4. Assicurarsi che venga applicata una policy che conceda l'accesso al bucket.

    L'istruzione di esempio seguente concede al ruolo IAM l'accesso alle operazioni s3:GetObject e s3:PutObject sul bucket amzn-s3-demo-bucket:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "ExampleStmt2", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
  5. Assicurarsi che venga applicata una policy che consenta l'accesso alla chiave.

    Nota

    Se il ruolo IAM assunto dall'Account B dispone già dell'accesso come amministratore, non è necessario concedere l'accesso alla chiave dalle policy IAM dell'utente.

    L'istruzione di esempio seguente concede al ruolo IAM l'accesso per utilizzare la chiave arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "ExampleStmt3", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey", "kms:ReEncrypt*" ], "Effect": "Allow", "Resource": "arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd" } ] }

Accesso tra account agli oggetti del bucket

Gli oggetti caricati da un account (Account C) diverso dall'account proprietario del bucket (Account A) potrebbero richiedere ACL esplicite a livello di oggetto che concedano l'accesso in lettura all'account di query (Account B). Per evitare questo requisito, l'Account C deve assumere un ruolo nell'Account A prima di collocare gli oggetti nel bucket dell'Account A. Per ulteriori informazioni, consulta Come posso fornire l'accesso tra account agli oggetti che si trovano nei bucket Amazon S3?.