Perché gli utenti IAM di un altro account AWS ricevono errori di accesso negato anche se la mia policy dei bucket garantisce l'accesso completo a quell'account?

8 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 di AWS Identity and Access Management (IAM) di quell'account cercano di accedere al mio bucket, ricevono un errore di accesso negato.

Descrizione breve

Se la policy del bucket consente già l'accesso all'altro account, gli utenti che utilizzano più account possono ricevere errori di accesso negato per i seguenti motivi:

  • La policy IAM dell'utente non concede l'accesso al bucket.
  • L'oggetto è crittografato da AWS Key Management Service (AWS KMS) e l'utente non ha accesso alla chiave AWS KMS.
  • Una dichiarazione di rifiuto nella policy del bucket o nella policy IAM blocca l'accesso dell'utente.
  • La policy sull'endpoint di Amazon Virtual Private Cloud (Amazon VPC) blocca l'accesso al bucket.
  • La policy di controllo dei servizi di AWS Organizations blocca l'accesso al bucket.
  • L'oggetto non appartiene all'account AWS proprietario del bucket.
  • Hai attivato Richiedente paga per il bucket.
  • Hai approvato una policy di sessione che blocca l'accesso al bucket.

Risoluzione

Nota: Se ricevi errori durante l'esecuzione dei comandi AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente.

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 nell'Account A e alla policy del bucket nell'Account B.

Segui questi passaggi per verificare la policy IAM dell'utente nell'Account A:

1.    Apri la console IAM.

2.    Dalla console, apri l'utente IAM o il ruolo IAM che non può accedere al bucket.

3.    Nella scheda Autorizzazioni dell'utente IAM o del ruolo IAM, espandi ogni policy per visualizzare il documento relativo alla policy JSON.

4.    Nei documenti sulle policy JSON, cerca le policy con il nome del bucket. Quindi, conferma che tali policy consentano le azioni S3 corrette sul bucket.

5.    Se l'utente IAM o il ruolo IAM non concede l'accesso al bucket, aggiungi una policy che conceda le autorizzazioni corrette. Ad esempio, la seguente policy IAM concede a un utente l'accesso per scaricare oggetti (s3:GetObject) da DOC-EXAMPLE-BUCKET:

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

L'oggetto è crittografato da AWS KMS e l'utente non ha accesso alla chiave AWS KMS

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

Per concedere a un utente IAM le autorizzazioni per il download e il caricamento in un bucket quando si utilizza una chiave KMS per la crittografia, segui questi passaggi:

1.    Modifica la policy della chiave KMS per aggiungere una dichiarazione simile alla seguente:

**Nota:**Inserisci l'Amazon Resource Name (ARN) dell'utente IAM come Principale.

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

2.    Se la chiave KMS appartiene allo stesso account dell'utente IAM, non è necessario aggiornare la policy della chiave. Se la chiave KMS appartiene a un account diverso da quello dell'utente IAM, devi aggiornare anche le autorizzazioni dell'utente IAM. Aggiungi una dichiarazione sulla politica IAM simile alla seguente:

Nota: Inserisci l'ARN della chiave KMS come Risorsa.

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

Una dichiarazione di rifiuto nella policy del bucket o nella policy IAM blocca l'accesso dell'utente

Controlla la policy del bucket e le policy IAM dell'utente per eventuali dichiarazioni che negano esplicitamente l'accesso dell'utente al bucket.

Segui questi passaggi per verificare la policy del bucket:

1.    Apri la console Amazon S3.

2.    Dall'elenco dei bucket, apri il bucket con la policy dei bucket che desideri controllare.

3.    Scegli la scheda Autorizzazioni.

4.    Scegli la politica bucket.

5.    Cerca le affermazioni con "Effetto": "Nega".

6.    Modifica la policy del bucket per modificare o rimuovere qualsiasi "Effetto": Dichiarazioni "Nega" che negano l'accesso dell'utente al bucket.

Segui questi passaggi per verificare le policy IAM dell'utente:

1.    Apri la console IAM.

2.    Dalla console, apri l'utente IAM o il ruolo IAM che non può accedere al bucket.

3.    Nella scheda Autorizzazioni dell'utente IAM o del ruolo IAM, espandi ogni policy per visualizzare i documenti delle policy JSON.

4.    Nei documenti sulle policy JSON, cerca le politiche relative al bucket S3 con le istruzioni che contengono "Effetto": "Nega".

5.    Modifica le policy di autorizzazione IAM dell'utente per modificare o rimuovere **"Effetto": Dichiarazioni "Nega" **che negano erroneamente l'accesso dell'utente al bucket.

La policy sull'endpoint VPC sta bloccando l'accesso al bucket

Se gli utenti accedono al bucket con un'istanza Amazon Elastic Compute Cloud (Amazon EC2) indirizzata attraverso 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 sugli 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": "*"
    }
  ]
}

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

La policy di controllo dei servizi di AWS Organizations blocca l'accesso al bucket

Se l'account dell'utente ha attivato AWS Organizations, controlla le policy di controllo del servizio per assicurarti che l'accesso ad Amazon S3 sia consentito. Ad esempio, la seguente policy nega esplicitamente l'accesso ad Amazon S3 e genera un errore di accesso negato:

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

Per ulteriori informazioni sulle funzionalità di AWS Organizations, consulta Attivazione di tutte le funzionalità della tua organizzazione.

L'oggetto non appartiene all'account AWS proprietario del bucket

Per impostazione predefinita, un oggetto S3 è di proprietà dell'account AWS che lo ha caricato. Questo vale anche quando il bucket è di proprietà di un altro account. Le autorizzazioni del bucket non si applicano automaticamente a un oggetto quando l'oggetto è di proprietà di un altro account.

Per risolvere gli errori di accesso negato relativi alla proprietà degli oggetti, prova le seguenti soluzioni:

$ 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. Pertanto, utilizza l'account del proprietario dell'oggetto per eseguire questi comandi.

Hai attivato Richiedente paga per il bucket

Se hai attivato Richiedente paga per il tuo bucket, gli utenti di altri account devono specificare il parametro request-payer quando inviano richieste al tuo bucket. In caso contrario, tali utenti ricevono un errore di accesso negato.

Per risolvere questo errore, esegui 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 dell'interfaccia a riga di comando di AWS, includi il parametro**--request-payer**. Esempio:
$ aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester

Hai approvato una policy di sessione che blocca l'accesso al bucket

Una policy di sessione è una policy in linea che è possibile creare e approvare rapidamente nella sessione durante l'assunzione del ruolo. È possibile approvare la policy di sessione per definire ulteriormente le autorizzazioni della sessione di ruolo. Le policy di sessione sono policy avanzate che vengono approvate come parametri quando si crea, a livello di programmazione, una sessione temporanea per un ruolo o un utente federato. Le autorizzazioni effettive della sessione sono l'intersezione tra le policy basate sull'identità del ruolo e la policy di sessione. Pertanto, assicurati che la policy di sessione che hai approvato non blocchi l'accesso al bucket S3.

Informazioni correlate

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

Perché gli utenti su più account ricevono errori di accesso negato quando cercano di accedere al mio bucket crittografato da una chiave AWS KMS personalizzata?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa