Salta al contenuto

Perché gli utenti multi-account ricevono errori Access Denied quando tentano di accedere ai miei oggetti Amazon S3 che ho crittografato con una chiave AWS KMS gestita dal cliente?

5 minuti di lettura
0

Desidero risolvere gli errori "Access Denied" che gli utenti ricevono quando accedono al mio bucket Amazon Simple Storage Service (Amazon S3) da un altro account AWS. Crittografo il mio bucket Amazon S3 con una chiave gestita dal cliente del Servizio AWS di gestione delle chiavi (AWS KMS).

Breve descrizione

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.

Gli utenti ricevono l'errore "Access Denied" per i seguenti motivi:

Per risolvere i problemi precedenti, completa i seguenti passaggi di risoluzione.

Risoluzione

Controlla le tue autorizzazioni per S3:GetBucketPolicy e s3:PutBucketPolicy

Completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, seleziona l'identità utilizzata per accedere alla policy del bucket, ad esempio Utente o Ruolo.
  3. Seleziona il nome dell'identità IAM che utilizzi per accedere alla policy del bucket.
  4. Nella scheda Autorizzazioni dell'identità IAM, espandi ogni policy per visualizzare il documento relativo alla policy JSON.
  5. Nei documenti di policy JSON, cerca le policy correlate all'accesso ad Amazon S3. Quindi verifica di avere le autorizzazioni per le azioni s3:GetBucketPolicy e s3:PutBucketPolicy sul bucket.<br id=hardline_break/> Nota: se non esiste una policy con le azioni s:3GetBucketPolicy e s3:PutBucketPolicy, aggiungi queste autorizzazioni a una policy. Per istruzioni sull'aggiornamento delle autorizzazioni IAM, consulta Modificare le autorizzazioni per un utente IAM.<br id=hardline_break/> Il seguente esempio di policy IAM consente all'identità IAM di eseguire le azioni s3:GetBucketPolicy e s3:PutBucketPolicy su DOC-EXAMPLE-BUCKET:
    {  "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Sid": "ModifyBucketPolicy",  
          "Action": [  
            "s3:GetBucketPolicy",  
            "s3:PutBucketPolicy"  
          ],  
          "Effect": "Allow",  
          "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"  
        },  
        {  
          "Sid": "AccessS3Console",  
          "Action": [  
            "s3:GetBucketLocation",  
            "s3:ListAllMyBuckets"  
          ],  
          "Effect": "Allow",  
          "Resource": "arn:aws:s3:::*"  
        }  
      ]  
    }
    Nota: l'istruzione AccessS3Console nella precedente policy IAM garantisce l'accesso alla console Amazon S3. Non è specifica per le modifiche della policy del bucket.
  6. Nei documenti di policy JSON, cerca le istruzioni con "Effect": "Deny". Quindi verifica che non neghino all'identità IAM l'accesso a s3:GetBucketPolicy o s3:PutBucketPolicy.
  7. Assicurati di includere il nome della risorsa Amazon (ARN) del bucket nella sezione Resource della policy. Nell'esempio precedente, l'ARN è aws:s3:::DOC-EXAMPLE-BUCKET.<br id=hardline_break/> Nota: s3:GetBucketPolicy e s3:PutBucketPolicy sono azioni a livello di bucket.
  8. Controlla se hai applicato condizioni globali, come aws:SourceIP, nella policy IAM per limitare le azioni s3:GetBucketPolicy e s3:PutBucketPolicy. Se queste condizioni limitano l'accesso, rimuovile o aggiornale.

Aggiungi una policy del bucket se non esiste

Se non riesci a individuare policy che concedono le autorizzazioni s3:GetBucketPolicy o s3:PutBucketPolicy, aggiungi una policy per concederle all'identità IAM. Se individui policy che negano l'accesso a s3:GetBucketPolicy o s3:PutBucketPolicy, rimuovile.

Utilizza un'altra identità IAM con accesso al bucket e modifica la policy del bucket

Completa i seguenti passaggi:

  1. Apri la console Amazon S3.
  2. Nel pannello di navigazione a sinistra, scegli Bucket per uso generico o Bucket di directory.
  3. Dall'elenco dei bucket, apri il bucket con la policy che desideri modificare.
  4. Scegli la scheda Autorizzazioni.
  5. Scegli Policy del bucket.
  6. Cerca le istruzioni con "Effect": "Deny".
  7. Modifica la policy del bucket per aggiornare qualsiasi istruzione "Effect": “Deny” che negano all'identità IAM l'accesso a s3:GetBucketPolicy o s3:PutBucketPolicy.
  8. Controlla se la policy del bucket include condizioni come aws:PrincipalArn che limitano le azioni s3:GetBucketPolicy e s3:PutBucketPolicy dell'entità IAM. Se queste condizioni limitano l'accesso, rimuovile o aggiornale.

Elimina e ricrea una policy del bucket che nega l'accesso a tutti

Se nessuno ha accesso a s3:GetBucketPolicy, s3:PutBucketPolicy o a tutte le azioni Amazon S3 (s3:*), utilizza il comando AWS CLI delete-bucket-policy per eliminare la policy:

delete-bucket-policy   
-bucket example_bucket

Nota: sostituisci example_bucket con il nome del tuo bucket.

Se accidentalmente non hai più accesso al bucket, per cui non riesci a eliminare la policy, riottieni l'accesso al bucket. Dopo aver eliminato la policy del bucket, puoi crearne una nuova.

Disattiva il Blocco dell'accesso pubblico Amazon S3

Se la policy del bucket garantisce l'accesso pubblico, disattiva il Blocco dell'accesso pubblico Amazon S3 per il bucket. Per ulteriori informazioni, consulta Blocco dell'accesso pubblico allo storage Amazon S3 e Significato di "pubblico".

Nota: per impedire l'accesso pubblico a bucket privati, attiva il Blocco dell'accesso pubblico Amazon S3 per il bucket prima di disattivarlo a livello di account AWS.

Per AWS Organizations, elimina le policy di controllo dei servizi che non consentono l'accesso ad Amazon S3

Se utilizzi AWS Organizations, rivedi le policy di controllo dei servizi. Cerca eventuali istruzioni che negano esplicitamente l'azione s3:PutBucketPolicy o qualsiasi altra azione di una policy di Amazon S3. Elimina le policy di controllo dei servizi che applicano l'effetto Deny alle azioni s3:* quando l'organizzazione non richiede le policy.

Il seguente esempio di policy nega l'accesso a tutte le azioni di Amazon S3:

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