Come posso aggiungere ACL con pieno controllo del proprietario del bucket ai miei oggetti in Amazon S3?

Ultimo aggiornamento: 10/12/2021

Sto cercando di aggiungere una lista di controllo accessi (ACL) con pieno controllo del proprietario del bucket agli oggetti esistenti in Amazon Simple Storage Service (Amazon S3). In che modo posso farlo?

Breve descrizione

Di default, in uno scenario tra account in cui altri account AWS caricano oggetti nel bucket Amazon S3, gli oggetti rimangono di proprietà dell'account di caricamento. Quando si aggiunge l'ACL con pieno controllo del proprietario del bucket, il proprietario del bucket ha il pieno controllo su qualsiasi nuovo oggetto scritto da altri account.

Se il responsabile della scrittura dell'oggetto non specifica le autorizzazioni per l'account di destinazione a livello di ACL di oggetto, l'account di destinazione può soltanto eliminare gli oggetti.

Quando si aggiunge la ACL con pieno controllo del proprietario del bucket, il proprietario del bucket ha il pieno controllo su tutti i nuovi oggetti scritti da altri account AWS. Questa ACL è necessaria anche se il bucket di destinazione ha abilitato la Proprietà dell'oggetto S3. Se è abilitata, la Proprietà dell'oggetto S3 aggiorna il proprietario dei nuovi oggetti all'account di destinazione.

Importante: la concessione dell'accesso tra account tramite le ACL del bucket e dell'oggetto non funziona per i bucket con Proprietà dell'oggetto S3 con impostazione forzata del proprietario del bucket. Nella maggior parte dei casi, le ACL non sono necessarie per concedere autorizzazioni a oggetti e bucket. Invece, utilizza le policy di AWS Identity Access and Management (IAM) e le policy dei bucket S3 per concedere autorizzazioni a oggetti e bucket.

Per gli oggetti esistenti, il proprietario dell'oggetto può concedere al proprietario del bucket il pieno controllo dell'oggetto aggiornando l'ACL dell'oggetto. Quando si scrivono nuovi oggetti, la ACL con pieno controllo del proprietario del bucket può essere specificata durante un'operazione PUT o COPY.

Affinché un utente nell'Account A conceda l'ACL predefinita per il pieno controllo del proprietario del bucket agli oggetti nell'account B, devono essere concesse le seguenti autorizzazioni:

  • Il tuo utente o ruolo IAM nell'Account A deve consentire l'accesso al bucket nell'Account B
  • La tua policy del bucket nell'Account B deve consentire l'accesso al ruolo o all'utente IAM nell'Account A

È possibile concedere l'accesso agli oggetti con pieno controllo del proprietario del bucket nei seguenti modi:

  • ACL predefinite
  • Operazioni in batch S3 (per operazioni in batch su vasta scala)

Nota: assicurati di rivedere la policy dell'endpoint VPC quando aggiungi la ACL predefinita con pieno controllo del proprietario del bucket agli oggetti S3.

Risoluzione

Il tuo utente o ruolo IAM nell'Account A deve consentire l'accesso al bucket nell'Account B

Nota: se l'utente o il ruolo IAM deve aggiornare l' ACL dell'oggetto durante il caricamento, l'utente deve disporre delle autorizzazioni per s3:PutObjectAcl nella policy IAM.

Crea un ruolo IAM nell'Account A. Concedi le autorizzazioni ruolo/utente per eseguire PutObjectAcl sugli oggetti nell'Account B.

La seguente policy di esempio concede al ruolo IAM nell'account A l'accesso per eseguire le operazioni GetObject, PutObject e PutObjectAcl sugli oggetti nell'Account B:

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

La tua policy del bucket nell'Account B deve consentire l'accesso al ruolo o all'utente IAM nell'Account A

Le policy dei bucket possono variare in base ai requisiti della ACL predefinita durante il caricamento degli oggetti. Ad esempio, queste due policy del bucket concedono l'accesso all'utente o al ruolo IAM nell'Account A in modi diversi:

  • Policy 1: consente l'accesso all'utente o al ruolo IAM nell'Account A senza richiedere che le operazioni PUT di Amazon S3 includano la ACL predefinita con pieno controllo del proprietario del bucket.
  • Policy 2: impone a tutte le operazioni PUT di Amazon S3 di includere la ACL predefinita con pieno controllo del proprietario del bucket.

Policy 1: consente l'accesso all'utente o al ruolo IAM nell'Account A senza richiedere che le operazioni PUT di Amazon S3 includano la ACL predefinita con pieno controllo del proprietario del bucket

Per consentire l'accesso al ruolo IAM nell'Account A senza richiedere una ACL, crea una policy del bucket nell'Account B (dove gli oggetti vengono caricati). Questa policy del bucket deve concedere l'accesso all'utente o al ruolo IAM nell'Account A. La seguente policy del bucket consente al ruolo nell'Account A di eseguire le operazioni GetObject, PutObject e PutObjectAcl sugli oggetti nell'Account B:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountA:role/AccountARole"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::AccountB-Bucket/*"
            ]
        }
    ]
}

Policy 2: impone a tutte le operazioni PUT di Amazon S3 di includere l'ACL predefinita con pieno controllo del proprietario del bucket

La seguente policy del bucket specifica che un utente o un ruolo nell'Account A può caricare oggetti in un bucket nell'Account B (dove devono essere caricati gli oggetti). I caricamenti possono essere eseguiti solo quando la ACL dell'oggetto è impostata su "bucket-owner-full-control". Ad esempio:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Only allow writes to my bucket with bucket owner full control",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::AccountA:role/AccountARole"
                ]
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::AccountB-Bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

Nota: quando viene applicata la policy del bucket precedente, l'utente deve includere l'ACL predefinita con pieno controllo del proprietario del bucket durante l'operazione PutObject. In caso contrario, l'operazione ha esito negativo, generando un errore di accesso negato. Per informazioni su come Amazon S3 abilita la proprietà degli oggetti di altri account AWS, consulta Controllare la proprietà degli oggetti caricati utilizzando la Proprietà dell'oggetto S3.

Fornire l'accesso con pieno controllo del proprietario del bucket

ACL predefinite

Per consentire la ACL predefinita con pieno controllo del proprietario del bucket durante il caricamento di un oggetto, esegui il comando put-object dall'Account A (l'account del proprietario dell'oggetto):

aws s3api put-object --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Per consentire la ACL predefinita con pieno controllo del proprietario del bucket durante un'operazione di copia, esegui il comando copy-object dall'Account A (l'account del proprietario dell'oggetto):

aws s3api copy-object --copy-source accountA-bucket/example.txt --key example.txt --bucket accountB-bucket --acl bucket-owner-full-control

In alternativa, è anche possibile eseguire il comando cp dall'Account A per consentire la ACL predefinita con pieno controllo del proprietario del bucket:

aws s3 cp s3://accountA-bucket/test.txt s3://accountB-bucket/test2.txt --acl bucket-owner-full-control

Per un'operazione di copia di più oggetti, il proprietario dell'oggetto (Account A) può eseguire il seguente comando:

aws s3 cp s3://accountA-bucket/ s3://accountB-bucket/ --acl bucket-owner-full-control --recursive

Se l'oggetto esiste in un bucket in un account diverso (Account B), allora il proprietario dell'oggetto può concedere l'accesso come proprietario del bucket con questo comando:

aws s3api put-object-acl --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Operazioni in batch S3

Per aggiungere una ACL predefinita con pieno controllo del proprietario del bucket su un numero elevato di oggetti Amazon S3, utilizza Operazioni in batch S3. Operazioni in batch S3 può eseguire una singola operazione su un elenco di oggetti specificati. È anche possibile utilizzare le Operazioni in batch S3 per impostare ACL su un numero elevato di oggetti. Operazioni in batch S3 supporta ACL personalizzate e predefinite fornite da Amazon S3 con un set predefinito di autorizzazioni di accesso.

Nota: l'operazione Sostituisci lista di controllo accessi (ACL) sostituisce le ACL di Amazon S3 per ogni oggetto elencato nel manifesto.

Considerazione aggiuntiva

Accesso consentito da una policy dell'endpoint VPC

Se un ruolo IAM carica oggetti su S3 utilizzando un'istanza instradata attraverso un endpoint Virtual Private Cloud (VPC), allora controlla la policy dell'endpoint VPC. Ad esempio, se un oggetto viene caricato su S3 utilizzando un'istanza Amazon Elastic Compute Cloud (Amazon EC2) in un VPC, allora è necessario rivedere la policy dell'endpoint VPC. Assicurati che la policy dell'endpoint consenta l'accesso all'operazione PutObjectAcl nel modo seguente:

{
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::AccountB-Bucket/*"
        }
    ]
}

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?