Salta al contenuto

Come posso concedere a un utente in un altro account AWS l'accesso per caricare oggetti nel mio bucket Amazon S3?

4 minuti di lettura
0

Desidero concedere a un utente AWS Identity and Access Management (AWS IAM) in un altro account AWS l'accesso al mio bucket Amazon Simple Storage Service (Amazon S3). Inoltre, desidero concedere l'accesso multi-account in modo che l'utente possa caricare oggetti nel mio bucket Amazon S3.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Per concedere l'accesso a un utente in un altro account per caricare oggetti in un bucket S3, aggiorna le policy IAM per l'utente o per il suo account. È consigliabile controllare l'accesso tramite l'account con la proprietà dell'oggetto applicata dal proprietario del bucket.

Se il bucket utilizza le liste di controllo degli accessi (ACL) anziché la proprietà applicata dal proprietario del bucket, valuta la possibilità di utilizzare la configurazione di Amazon S3 BucketOwnerEnforced, che disattiva le ACL. Controlla se il bucket utilizza le ACL con questo comando get-bucket-ownership-controls:

aws s3api get-bucket-ownership-controls --bucket DOC-EXAMPLE-BUCKET

Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket.

Se l'output mostra BucketOwnerPreferred o ObjectWriter invece di BucketOwnerEnforced, il bucket utilizza le ACL. L'autore del caricamento, non il proprietario del bucket, possiede gli oggetti caricati in più account.

Proprietà dell’oggetto applicata dal proprietario del bucket

Per concedere l'accesso a un bucket a livello di account, utilizza la proprietà dell'oggetto applicata dal proprietario del bucket. Per concedere a un utente IAM dell'Account A l'accesso per caricare oggetti in un bucket S3 dell'Account B, segui questi passaggi:

  1. Nell'Account A, crea una policy IAM per gli utenti che devono accedere al bucket dell'Account B:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",  
            "s3:ListBucket",  
            "s3:GetBucketLocation"
          ],
          "Resource": [
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
          ]
        }
      ]
    }

    Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket.

  2. Dall'Account A, ottieni il nome della risorsa Amazon (ARN) dell'utente IAM.

  3. Dall'Account B, crea una policy di bucket che conceda all'utente multi-account l'autorizzazione a caricare oggetti:

    {
      "Version": "2012-10-17",
      "Statement": [
          {  
              "Sid": "CrossAccountUploadAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
              "Action": [  
                  "s3:PutObject"  
              ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          },  
          {  
              "Sid": "CrossAccountListAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
              "Action": [  
                  "s3:ListBucket",  
                  "s3:GetBucketLocation"  
              ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"  
          }  
        ]
    }

    Nota: per il valore Principal, assicurati di inserire l'ARN dell'utente IAM nell'Account A. Sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket.

Proprietà dell'oggetto applicata dall'ACL

Per concedere l'accesso a un bucket che utilizza la proprietà dell'oggetto applicata dall'ACL, concedi l'autorizzazione PutObjectAcl nella policy di bucket e nella policy dell'utente IAM.

  1. Dall'Account A, collega una policy all'utente IAM. La policy deve consentire all'utente di eseguire le azioni PutObject e PutObjectAcl nel bucket dell'Account B:

    {    
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:PutObject",  
            "s3:PutObjectAcl",  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
          ],  
          "Resource": [  
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET",  
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          ]  
        }  
      ]  
    }

    Nota: prima di specificare una ACL per il caricamento, devi avere l'autorizzazione s3:PutObjectAcl. Altrimenti ricevi un errore Access Denied quando carichi un oggetto con un'ACL, ad esempio l'ACL bucket-owner-full control.

  2. Dall'Account B, collega una policy di bucket che conceda all'utente IAM nell'Account A l'autorizzazione per eseguire le azioni s3:PutObject e s3:PutObjectAcl:

    {  
      "Version": "2012-10-17",  
      "Statement": [  
          {  
              "Sid": "DelegateS3ObjectAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::999999999999:user/UploadData"  
              },    
              "Action": [  
                  "s3:PutObject",  
                  "s3:PutObjectAcl"  
               ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          },  
          {  
              "Sid": "DelegateS3BucketAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
                "Action": [  
                    "s3:ListBucket",  
                    "s3:GetBucketLocation"  
                ],  
                "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"  
            }  
        ]  
    }

Informazioni correlate

Esempio 2: il proprietario del bucket concede autorizzazioni per il bucket multi-account