Come posso fornire l'accesso multi-account agli oggetti presenti nei bucket Amazon S3?

10 minuti di lettura
0

Desidero concedere a un altro account AWS l'accesso a un oggetto che si trova in un bucket Amazon Simple Storage Service (Amazon S3).

Breve descrizione

In Amazon S3, puoi concedere agli utenti di un altro account AWS l'accesso multi-account granulare agli oggetti di proprietà del tuo account.

In base al tipo di accesso che desideri fornire, utilizza una delle soluzioni seguenti per concedere l'accesso multi-account agli oggetti:

  • Policy di AWS Identity and Access Management (IAM) e policy del bucket basate su risorse per l'accesso solo a livello di programmazione agli oggetti del bucket S3
  • Policy IAM e liste di controllo degli accessi (ACL) basate su risorse per l'accesso solo a livello di programmazione agli oggetti del bucket S3
    Nota: quando l'impostazione Proprietario del bucket applicato è abilitata, tutte le ACL del bucket e dell'oggetto vengono disattivate. Pertanto, non puoi utilizzare le ACL per concedere l'accesso multi-account. Per impostazione predefinita, per tutti i bucket appena creati è abilitata l'impostazione Proprietario del bucket applicato. È inoltre consigliabile gestire l'accesso multi-account tramite le policy IAM e le policy del bucket (anziché le ACL). Per ulteriori informazioni, consulta Controlling ownership of objects and deactivating ACLs for your bucket.
  • Ruoli IAM multi-account per l'accesso a livello di programmazione e da console agli oggetti del bucket S3

Se il richiedente è un principale IAM, l'account proprietario del principale deve concedere le autorizzazioni S3 tramite una policy IAM. In base al tuo caso d'uso specifico, il proprietario del bucket deve concedere le autorizzazioni anche tramite una policy del bucket o una ACL. Dopo aver effettuato l'operazione, l'accesso multi-account a livello di programmazione ai bucket equivale all'accesso agli stessi bucket di account.

Per l'accesso multi-account con i punti di accesso Amazon S3 o il sistema AWS di gestione delle chiavi, consulta l'argomento Perché gli utenti multi-account ricevono errori di accesso negato quando cercano di accedere a oggetti S3 crittografati da una chiave AWS KMS personalizzata?

Per i set di dati di grandi dimensioni a cui è necessario accedere come oggetti multi-account, è consigliabile utilizzare i punti di accesso S3. Per ulteriori informazioni, consulta Simplify and scale access management to shared datasets with cross-account Amazon S3 Access Points.

Risoluzione

Policy IAM e policy del bucket basate su risorse

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Per gestire il controllo degli accessi multi-account e verificare le autorizzazioni dell'oggetto S3, utilizza le policy del bucket basate su risorse. Applica una policy del bucket a livello di bucket per definire i seguenti valori:

  • Elemento Principale: gli utenti in grado di accedere agli oggetti all'interno del bucket
  • Elemento Risorsa: gli oggetti a cui è possibile accedere
  • Elemento Operazione: il modo in cui gli utenti possono accedere agli oggetti all'interno del bucket

Quando applichi una policy del bucket a livello di bucket, puoi definire un accesso granulare a diversi oggetti all'interno del bucket. Puoi anche rivedere la policy del bucket per visualizzare gli utenti in grado di accedere agli oggetti in un bucket S3.

Per gestire l'accesso ai bucket S3 tramite le policy del bucket, attieniti alla seguente procedura:
Nota: nei passaggi seguenti, l'account A è il tuo account mentre l'account B è l'account a cui desideri concedere l'accesso agli oggetti. 

  1. Crea un bucket S3 nell'account A.

  2. Crea un ruolo o un utente IAM nell'account B.

  3. Concedi al ruolo IAM dell'account B l'autorizzazione a scaricare (GetObject) e caricare (PutObject) oggetti da e verso un bucket specifico. Usa la policy IAM per concedere anche al ruolo IAM dell'account B le autorizzazioni per effettuare una chiamata a PutObjectAcl che concede le autorizzazioni per l'oggetto al proprietario del bucket:

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
    
            }
        ]
    }

    Nota: aggiorna la policy per includere le variabili utente. Puoi inoltre limitare l'accesso a una cartella specifica del bucket nell'account A. Per effettuare questa operazione, specifica il nome della cartella nell'elemento Risorsa, ad esempio "arn:aws:s3:::AccountABucketName/FolderName/*". Per ulteriori informazioni, consulta How can I grant a user access to a specific folder in my Amazon S3 bucket?Puoi anche creare una policy basata sull'identità IAM con il comando create-policy di AWS CLI.

  4. Configura la policy del bucket per l'account A in modo da concedere le autorizzazioni al ruolo o all'utente IAM creato nell'account B. Usa questa policy del bucket per concedere a un utente le autorizzazioni GetObject e PutObject per gli oggetti in un bucket di proprietà dell'account A:

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
                },
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": [
                    "arn:aws:s3:::AccountABucketName/*"
                ]
            }
        ]
    }

    Puoi anche creare una policy del bucket Amazon S3 utilizzando il comando put-bucket-policy di AWS CLI.

Nota: per limitare l'accesso a una cartella specifica del bucket, definisci il nome della cartella nell'elemento Risorsa, ad esempio "arn:aws:s3:::AccountABucketName/FolderName/*". Utilizzando l'autorizzazione s3:PutObject con una condizione, il proprietario del bucket ottiene il pieno controllo sugli oggetti caricati da altri account. La chiamata API PutObject API applica l'ACL con intestazioni specifiche. 

Policy IAM e ACL basate su risorse

Puoi inoltre utilizzare le ACL degli oggetti per gestire le autorizzazioni per scenari specifici. Per ulteriori informazioni, consulta Quando utilizzare una policy d’accesso basata su liste di controllo accessi (ACL) (per bucket e oggetti).

Le ACL di Amazon S3 consentono agli utenti di definire solo i seguenti set di autorizzazioni: READ, WRITE, READ_ACP, WRITE_ACP e FULL_CONTROL. Puoi utilizzare solo un account o uno dei gruppi predefiniti di Amazon S3 come beneficiario per l'ACL di Amazon S3. Quando si specifica un indirizzo e-mail o un ID utente canonico per un account, l'ACL si applica a tutte le identità dell'account del beneficiario. Ad esempio, non puoi utilizzare un’ACL per limitare l'accesso a singoli utenti o ruoli IAM. Inoltre, non puoi applicare le ACL a oggetti diversi che condividono gli stessi prefissi.

Nota: il proprietario del bucket potrebbe non avere il pieno controllo sugli oggetti caricati dal beneficiario dell'ACL. Questo perché l’ACL non supporta la condizione per l'operazione S3 autorizzata dall'ACL.

Per gestire l'accesso al bucket S3 tramite le ACL del bucket e dell'oggetto, completa i seguenti passaggi:

  1. Crea un ruolo o un utente IAM nell'account B.
  2. Concedi al ruolo o all'utente le autorizzazioni per eseguire le operazioni Amazon S3 richieste. Gli utenti che effettuano chiamate a PutObject e GetObject devono disporre delle autorizzazioni elencate nella sezione Policy basate su risorse e policy IAM.
  3. Configura l'ACL del bucket per includere almeno l'autorizzazione WRITE per l'account B. In questo modo, i ruoli o gli utenti IAM dell'account B possono caricare oggetti in un bucket di proprietà dell'account A:
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> WRITE </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    Nota: per individuare il tuo CanonicalUserID, consulta Finding an AWS account canonical user ID.
  4. Configura le ACL dell'oggetto per includere almeno l'autorizzazione READ per l'account B. In questo modo, i ruoli o gli utenti IAM dell'account B possono scaricare oggetti da un bucket di proprietà dell'account A:
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> READ </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    Le autorizzazioni ACL variano in base alla risorsa, al bucket o all'oggetto S3 a cui viene applicata l’ACL. Per ulteriori informazioni, consulta Access control list (ACL) overview. Quando crei il tuo bucket o carichi un oggetto in un bucket esistente, configura le ACL del bucket e dell'oggetto. Per ulteriori informazioni, consulta Configuring ACLs.

Ruoli IAM multi-account

Non tutti i servizi AWS supportano le policy basate su risorse. Ciò vuol dire che puoi utilizzare i ruoli IAM multi-account per centralizzare la gestione delle autorizzazioni quando concedi l'accesso multi-account a diversi servizi. Questo metodo consente l'accesso multi-account agli oggetti posseduti o caricati da un altro account o servizio AWS. Se non utilizzi ruoli IAM multi-account, devi modificare l'ACL dell'oggetto. Per ulteriori informazioni, consulta How Amazon S3 authorizes a request for an object operation.

Per gestire l'accesso ai bucket S3 tramite i ruoli IAM multi-account, attieniti alla seguente procedura:

  1. Crea un ruolo IAM nell'account A.
  2. Concedi al ruolo le autorizzazioni per eseguire le operazioni S3 richieste. Nella policy di attendibilità del ruolo, concedi a un ruolo o a un utente dell'account B le autorizzazioni per assumere il ruolo nell'account A:
    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    Nota: i ruoli IAM necessitano di una policy di attendibilità che definisca quali principali possono assumere il ruolo e in quali condizioni. I ruoli IAM possono disporre di diverse policy di autorizzazione che stabiliscono le autorizzazioni e le risorse utilizzabili dal principale che assume il ruolo. 
    Puoi creare un ruolo con la policy di attendibilità anche eseguendo il comando create-role di AWS CLI.
    La policy di accesso seguente consente a un utente che ha assunto questo ruolo di scaricare e caricare oggetti a livello di programmazione tramite la console Amazon S3. Per ulteriori informazioni, consulta How can I grant a user access to a specific folder in my Amazon S3 bucket?
    Nota: se è richiesto solo l'accesso a livello di programmazione, puoi rimuovere le prime due istruzioni della policy:
    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "s3:ListAllMyBuckets"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::*"
                ]
            },
            {
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:s3:::AccountABucketName"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
            }
        ]
    }
    In alternativa, puoi creare una policy basata sull'identità IAM eseguendo il comando create-policy di AWS CLI.
  3. Concedi a un ruolo o utente IAM nell'account B le autorizzazioni per assumere il ruolo IAM creato nell'account A. È necessario aggiungere la policy di esempio seguente come policy di autorizzazione per l'utente o del ruolo IAM:
    {  "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::AccountA:role/AccountARole"
      }
    }
    In alternativa, puoi creare una policy basata sull'identità IAM eseguendo il comando create-policy di AWS CLI.
  4. Da un ruolo nell'account B, assumi il ruolo nell'account A in modo che le identità IAM dell'account B possano eseguire le operazioni S3 richieste. Per ulteriori informazioni, consulta Switching to a role (Console).
    Nota: quando assumi un ruolo IAM nell'account A, Amazon S3 determina l'operazione in base alla policy di accesso. Il ruolo IAM funziona come una chiamata API effettuata da un'identità IAM locale nell'account A. Non è necessaria alcuna policy del bucket o ACL per l'accesso multi-account. Per ulteriori informazioni, consulta Amazon S3 actions.

Informazioni correlate

Actions, resources, and condition keys for Amazon S3

Bucket policy examples

Access policy guidelines

Setting up for cross-account native backup and restore in Amazon RDS for Microsoft SQL Server

User and role policy examples

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa