Come posso risolvere gli errori "Access Denied" quando gli utenti IAM di un altro account AWS tentano di accedere al mio bucket Amazon S3?

7 minuti di lettura
0

La policy del mio bucket Amazon Simple Storage Service (Amazon S3) garantisce l'accesso completo a un altro account AWS. Tuttavia, quando gli utenti AWS Identity and Access Management (AWS IAM) di quell'account tentano di accedere al mio bucket, ricevono un errore "Access Denied".

Breve descrizione

Se la policy del bucket consente già l'accesso a un altro account, gli utenti multi-account possono ricevere errori Access Denied per i seguenti motivi:

  • La policy IAM dell'utente non concede l'accesso al bucket.
  • Hai crittografato l'oggetto con il Servizio AWS di gestione delle chiavi (AWS KMS) e l'utente non ha accesso alla chiave AWS KMS.
  • Un'istruzione Deny nella policy del bucket o nella policy IAM blocca l'accesso dell'utente.
  • La policy dell'endpoint Amazon Virtual Private Cloud (Amazon VPC) blocca l'accesso al bucket.
  • La policy di controllo dei servizi (SCP) di AWS Organizations blocca l'accesso al bucket.
  • L'oggetto non appartiene all'account proprietario del bucket.
  • Hai attivato Pagamenti a carico del richiedente per il bucket Amazon S3.
  • Hai approvato una policy di sessione che blocca l'accesso al bucket.

Risoluzione

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

La policy IAM dell'utente non concede l'accesso al bucket

Per l'accesso multi-account, assicurati di concedere l'accesso al bucket nella policy IAM dell'account degli utenti e alla policy del bucket del tuo account.

Per aggiungere le autorizzazioni del bucket alla policy IAM nell'account degli utenti, completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, seleziona gli utenti o i ruoli IAM che non possono accedere al bucket.
  3. Nella scheda Policy delle autorizzazioni, espandi ogni policy per visualizzare il documento relativo alla policy JSON.
  4. Nei documenti delle policy JSON che contengono il nome del bucket, conferma che le policy consentano le azioni S3 corrette sul bucket.
  5. Se l'utente o il ruolo IAM non concede l'accesso al bucket, aggiungi una policy che conceda le autorizzazioni corrette.
    Il seguente esempio di policy IAM concede a un utente l'accesso per scaricare oggetti nella richiesta GetObject da DOC-EXAMPLE-BUCKET:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "ExampleStmt",
                "Action": "s3:GetObject",
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
                ]
            }
        ]
    }

Nota: se utilizzi profili dell'istanza o assumi un ruolo, assicurati che la policy disponga delle autorizzazioni corrette.

Hai crittografato l'oggetto con AWS KMS

Se sia la policy IAM che la policy del bucket concedono l'accesso multi-account, controlla nel bucket la crittografia predefinita con AWS KMS. Oppure controlla le proprietà dell'oggetto per la crittografia AWS KMS. Se hai crittografato l'oggetto con una chiave KMS, anche l'utente deve disporre delle autorizzazioni per utilizzare la chiave.

Per concedere a un utente IAM le autorizzazioni per scaricare e caricare in un bucket e utilizzare la chiave AWS KMS, completa i seguenti passaggi:

  1. Modifica la policy della chiave KMS aggiungendo la seguente istruzione:

    {
        "Sid": "ExampleStmt",
        "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
        ],
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:user/Jane"
        },
        "Resource": "*"
    }

    Nota: sostituisci l'esempio di ARN con l'ARN del tuo principale.

  2. Se la chiave AWS KMS appartiene all'account dell'utente IAM, non è necessario che aggiorni la policy della chiave. Se la chiave AWS KMS appartiene al tuo account, devi aggiornare le autorizzazioni dell'utente IAM per aggiungere la seguente istruzione alla policy IAM:

    {
        "Sid": "KMSAccess",
        "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }

    Nota: sostituisci l'esempio di ARN della chiave KMS con l'ARN della tua chiave KMS.

Per ulteriori informazioni, consulta Perché gli utenti multi-account ricevono errori di accesso negato quando tentano di accedere ai miei oggetti S3 che ho crittografato con una chiave gestita dal cliente di AWS KMS?

Un'istruzione Deny nella policy blocca l'accesso degli utenti

Controlla nella policy del bucket e nelle policy IAM degli utenti se sono presenti istruzioni che negano esplicitamente l'accesso dell'utente al bucket.

Per controllare la policy del bucket, completa i seguenti passaggi:

  1. Apri la console Amazon S3.
  2. Nell'elenco dei bucket, seleziona il bucket con la policy che desideri controllare.
  3. Scegli la scheda Autorizzazioni.
  4. In Policy del bucket, controlla le istruzioni con "Effect": "Deny".
  5. Modifica la policy del bucket per rimuovere qualsiasi istruzione "Effect": "Deny" che neghi l'accesso dell'utente al bucket.

Per controllare le policy IAM degli utenti, completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, seleziona gli utenti o i ruoli IAM che non possono accedere al bucket.
  3. In Policy di autorizzazione, espandi ogni policy per visualizzare i documenti delle policy JSON.
  4. Nei documenti delle policy JSON relativi al bucket S3, controlla le istruzioni che contengono "Effect": "Deny".
  5. Modifica le policy delle autorizzazione IAM dell'utente per modificare o rimuovere le istruzioni**"Effect": "Deny"** che negano l'accesso dell'utente al bucket.

La policy dell'endpoint VPC blocca l'accesso al bucket

Se gli utenti accedono al bucket con un'istanza Amazon Elastic Compute Cloud (Amazon EC2) tramite un endpoint VPC, controlla la policy degli endpoint VPC. Verifica che la policy degli endpoint VPC includa le autorizzazioni corrette per accedere al bucket S3.

Ad esempio, la seguente policy degli endpoint VPC consente l'accesso a DOC-EXAMPLE-BUCKET:

{
    "Id": "Policy1234567890123",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1234567890123",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ],
            "Principal": "*"
        }
    ]
}

Attenzione: l'elemento "Principale": "*" garantisce a tutti coloro che utilizzano l'endpoint VPC l'accesso al bucket. Assicurati di limitare l'ambito del valore Principale in base al caso d'uso.

L'SCP di Organizations blocca l'accesso al bucket

Se l'account dell'utente utilizza Organizations, controlla se nelle SCP sono presenti istruzioni Deny che bloccano l'accesso al bucket.

Il seguente esempio di policy nega esplicitamente l'accesso ad Amazon S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

L'oggetto non appartiene all'account proprietario del bucket

Per impostazione predefinita, l'account che carica l'oggetto è il suo proprietario, anche se il bucket è di proprietà di un altro account. Le autorizzazioni del bucket non si applicano automaticamente a un oggetto di proprietà di un altro account.

Per risolvere gli errori Access Denied dovuti alla proprietà dell'oggetto S3, utilizza le seguenti best practice:

  • Utilizza l'impostazione applicata dal proprietario del bucket per la proprietà dell'oggetti S3 in modo da disattivare le liste di controllo degli accessi (ACL) per i bucket.
  • Se non desideri disattivare le ACL per applicare la proprietà dell'oggetto ai nuovi oggetti, applica l'impostazione preferita dal proprietario del bucket. Assicurati di aggiornare la policy del bucket per richiedere l'ACL predefinita bucket-owner-full-control per tutte le richieste PUT al bucket. Il proprietario dell'oggetto può eseguire il seguente put-object-acl per concedere l'accesso al proprietario del bucket:
    aws s3api put-object-acl --bucket examplebucket --key keyname --acl bucket-owner-full-control
    Nota: per accedere all'oggetto, il proprietario dell'oggetto deve concedere esplicitamente l'accesso al proprietario del bucket. Utilizza l'account del proprietario dell'oggetto per eseguire il comando precedente.

Hai attivato Pagamento a carico del richiedente

Se hai attivato Pagamento a carico del richiedente per il bucket, gli utenti di altri account devono specificare il parametro x-amz-request-payer.

Gli utenti devono intraprendere le seguenti azioni:

  • Per le richieste DELETE, GET, HEAD, POST, e PUT, includi x-amz-request-payer : requester nell'intestazione.
  • Per gli URL firmati, includi x-amz-request-payer=requester nella richiesta.
  • Per i comandi AWS CLI, includi il parametro**--request-payer**:
    aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester
    

Una policy di sessione ha bloccato l'accesso al bucket

Assicurati che la policy di sessione che hai approvato non blocchi l'accesso al bucket S3.

Informazioni correlate

Come posso risolvere gli errori 403 di Accesso negato da Amazon S3?

A user with permission to add objects to my Amazon S3 bucket is getting Access Denied errors. Why? (Un utente autorizzato ad aggiungere oggetti al mio bucket Amazon S3 riceve errori Access Denied. Perché?)

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa