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

11 minuti di lettura
0

I miei utenti stanno cercando di accedere agli oggetti nel mio bucket Amazon Simple Storage Service (Amazon S3), ma Amazon S3 mostra l'errore 403 di Accesso negato.

Risoluzione

Utilizza il documento sull'Automazione AWS Systems Manager

Utilizza il documento di automazione AWSSupport-TroubleshootS3PublicRead su AWS Systems Manager. Questo documento di automazione consente di diagnosticare i problemi durante la lettura di oggetti da un bucket S3 pubblico specificato.

Verifica la proprietà del bucket e dell'oggetto

Per gli errori AccessDenied dalle richieste GetObject o HeadObject, controlla se l'oggetto è anche di proprietà del proprietario del bucket. Inoltre, verifica se il proprietario del bucket dispone delle autorizzazioni di lettura o di controllo completo della lista di controllo degli accessi (ACL).

Conferma l'account proprietario degli oggetti

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. Se altri account possono caricare oggetti nel tuo bucket, controlla l'account che possiede gli oggetti a cui i tuoi utenti non possono accedere.

Nota: se visualizzi errori durante l'esecuzione dei comandi AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

1.    Esegui il comando list-buckets interfaccia della linea di comando AWS (AWS CLI) per ottenere l'ID canonico Amazon S3 per il tuo account interrogando l'ID proprietario.

aws s3api list-buckets --query "Owner.ID"

2.    Esegui il comando list-objects per ottenere l'ID canonico Amazon S3 dell'account proprietario dell'oggetto a cui gli utenti non possono accedere. Sostituisci DOC-EXAMPLE-BUCKET con il nome del bucket e exampleprefix con il valore del prefisso.

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix exampleprefix

Suggerimento: utilizza il comando list-objects per controllare diversi oggetti.

3.    Se gli ID canonici non corrispondono, l'oggetto non è tuo. Il proprietario dell'oggetto può concederti il pieno controllo dell'oggetto eseguendo il comando put-object-acl. Sostituisci DOC-EXAMPLE-BUCKET con il nome del bucket che contiene gli oggetti. Sostituisci exampleobject.jpg con il nome della tua chiave.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg --acl bucket-owner-full-control

4.    Dopo che il proprietario dell'oggetto ha modificato l'ACL dell'oggetto in bucket-owner-full-control, il proprietario del bucket può accedere all'oggetto. Tuttavia, la modifica dell'ACL da sola non modifica la proprietà dell'oggetto. Per cambiare il proprietario dell'oggetto nell'account del bucket, esegui il comando cp dall'account del bucket per copiare l'oggetto su se stesso.

Copia tutti i nuovi oggetti in un bucket in un altro account

1.    Imposta una policy del bucket che richieda il caricamento degli oggetti con l'ACL bucket-owner-full-control.

2.    Abilita e imposta S3 Object Ownership sul proprietario del bucket preferito nella Console di gestione AWS.

Il proprietario dell'oggetto viene quindi aggiornato automaticamente al proprietario del bucket quando l'oggetto viene caricato con l'ACL bucket-owner-full-control.

Crea un ruolo IAM con le autorizzazioni per il tuo bucket

Per le autorizzazioni continue tra più account, crea un ruolo IAM nel tuo account con le autorizzazioni per il tuo bucket. Quindi, concedi a un altro account AWS il permesso di assumere quel ruolo IAM. Per ulteriori informazioni, consulta Tutorial: delega l'accesso tra gli account AWS utilizzando i ruoli IAM.

Controlla la policy del bucket o le policy degli utenti IAM

Rivedi la policy del bucket o le policy utente IAM associate per eventuali dichiarazioni che potrebbero negare l'accesso. Verifica che le richieste al tuo bucket soddisfino le condizioni della bucket policy o delle policy IAM. Verifica la presenza di dichiarazioni di rifiuto errate, azioni mancanti o spaziatura errata in una policy.

Condizioni di rifiuto della dichiarazione

Controlla le dichiarazioni di rifiuto per le condizioni che bloccano l'accesso in base a quanto segue:

  • autenticazione a più fattori (MFA)
  • chiavi di crittografia
  • indirizzo IP specifico
  • VPC o endpoint VPC specifici
  • utenti o ruoli IAM specifici

Nota: se hai bisogno di una MFA e gli utenti inviano richieste tramite AWS CLI, assicurati che gli utenti configurino AWS CLI per utilizzare la MFA.

Ad esempio, nella seguente policy del bucket, Statement1 consente l'accesso pubblico per scaricare oggetti (s3:GetObject) da DOC-EXAMPLE-BUCKET. Tuttavia, Statement2 nega esplicitamente a tutti l'accesso al download di oggetti da DOC-EXAMPLE-BUCKET a meno che la richiesta non provenga dall'endpoint VPC vpce-1a2b3c4d. In questo caso, la dichiarazione di rifiuto ha la precedenza. Ciò significa che agli utenti che tentano di scaricare oggetti dall'esterno di vpce-1a2b3c4d viene negato l'accesso.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": "*"
    },
    {
      "Sid": "Statement2",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-1a2b3c4d"
        }
      },
      "Principal": "*"
    }
  ]
}

Policy dei bucket o policy IAM

Verifica che la policy dei bucket o le policy IAM consentano le azioni di Amazon S3 di cui i tuoi utenti hanno bisogno. Ad esempio, la seguente policy del bucket non include l'autorizzazione all'azione s3:PutObjectAcl. Se l'utente IAM tenta di modificare l'elenco di controllo degli accessi (ACL) di un oggetto, visualizza un errore Access Denied.

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

Altri errori di policy

Verifica che non vi siano spazi aggiuntivi o ARN errati nella policy del bucket o nelle policy utente IAM.

Ad esempio, se una policy IAM ha uno spazio aggiuntivo nell'Amazon Resource Name (ARN) come segue: arn:aws:s3::: DOC-EXAMPLE-BUCKET/*. In questo caso, l'ARN viene quindi valutato erroneamente come arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/ e dà all'utente IAM un errore di Accesso negato.

Verifica che i limiti delle autorizzazioni IAM consentano l'accesso ad Amazon S3

Rivedi i limiti delle autorizzazioni IAM impostati sulle identità IAM che stanno tentando di accedere al bucket. Verifica che i limiti delle autorizzazioni IAM consentano l'accesso ad Amazon S3.

Controlla le impostazioni di blocco dell'accesso pubblico Amazon S3

Se visualizzi errori di Accesso negato nelle richieste di lettura pubbliche consentite, controlla le impostazioni di blocco dell'accesso pubblico Amazon S3 del bucket.

Rivedi le impostazioni del blocco dell'accesso pubblico Amazon S3 sia a livello di account che di bucket. Queste impostazioni possono sovrascrivere le autorizzazioni che consentono l'accesso pubblico in lettura. Il blocco dell'accesso pubblico Amazon S3 può essere applicato a singoli bucket o account AWS.

Rivedi le credenziali dell'utente

Controlla le credenziali che i tuoi utenti hanno configurato per accedere ad Amazon S3. Gli SDK AWS e l'AWS CLI devono essere configurati per utilizzare le credenziali dell'utente o del ruolo IAM con accesso al bucket.

Per l'AWS CLI, esegui il comando configura per verificare le credenziali configurate:

aws configure list

Se gli utenti accedono al tuo bucket tramite un'istanza Amazon Elastic Compute Cloud (Amazon EC2), verifica che l'istanza stia utilizzando il ruolo corretto. Connettiti all'istanza, quindi esegui il comando get-caller-identity:

aws sts get-caller-identity

Rivedi le credenziali di sicurezza temporanee

Se gli utenti visualizzano errori di Accesso negato dalle credenziali di sicurezza temporanee concesse tramite il servizio di token di sicurezza AWS (AWS STS), rivedi la policy di sessione associata. Quando un amministratore crea credenziali di sicurezza temporanee utilizzando la chiamata API AssumeRole o il comando assume-role, può passare policy specifiche della sessione.

Per trovare le policy di sessione associate agli errori di Accesso negato di Amazon S3, cerca gli eventi AssumeRole nella cronologia degli eventi di AWS CloudTrail. Assicurati di cercare gli eventi AssumeRole nello stesso lasso di tempo delle richieste non riuscite di accesso ad Amazon S3. Quindi, esamina il campo requestParameters nei log CloudTrail pertinenti per qualsiasi parametro policy o policyArns. Verifica che la policy o la policy ARN associata conceda le autorizzazioni Amazon S3 necessarie.

Ad esempio, il seguente frammento di un log di CloudTrail mostra che le credenziali temporanee includono una policy di sessione in linea che concede le autorizzazioni s3:GetObject a DOC-EXAMPLE-BUCKET:

"requestParameters": {
	"roleArn": "arn:aws:iam::123412341234:role/S3AdminAccess",
	"roleSessionName": "s3rolesession",
	"policy": "{
	"Version": "2012-10-17",
	"Statement": [{
			"Effect": "Allow",
			"Action": [
				"s3:GetObject"
			],
			"Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"]
		}
	}
]
}
"
}

Verifica che la policy sugli endpoint di Amazon VPC includa le autorizzazioni corrette per accedere ai tuoi bucket e oggetti S3

Se gli utenti accedono al tuo bucket con un'istanza EC2 indirizzata tramite un endpoint VPC, controlla la policy degli endpoint VPC.

Ad esempio, la seguente policy sugli endpoint VPC consente l'accesso solo a DOC-EXAMPLE-BUCKET. Gli utenti che inviano richieste tramite questo endpoint VPC non possono accedere a nessun altro bucket.

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

Rivedi la policy IAM del tuo access point Amazon S3

Se utilizzi un punto di accesso Amazon S3 per gestire l'accesso al tuo bucket, consulta la policy IAM del punto di accesso.

Le autorizzazioni concesse in una policy del punto di accesso sono efficaci solo se anche la policy del bucket sottostante consente lo stesso accesso. Verifica che la policy del bucket e la policy del punto di accesso concedano le autorizzazioni corrette.

Verifica che l'oggetto non sia un oggetto mancante o contenga caratteri speciali

Controlla se l'oggetto richiesto esiste nel bucket. In caso contrario, la richiesta non trova l'oggetto e Amazon S3 presume che l'oggetto non esista. Se non disponi delle autorizzazioni s3:ListBucket appropriate, viene visualizzato un errore di Accesso negato (anziché 404 Not Found).

Un oggetto con un carattere speciale (ad esempio uno spazio) richiede una gestione speciale per essere recuperato.

Esegui il comando AWS CLI head-object per verificare se esiste un oggetto nel bucket. Sostituisci DOC-EXAMPLE-BUCKET con il nome del bucket che desideri controllare.

aws s3api head-object --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg

Se l'oggetto esiste nel bucket, l'errore di Accesso negato non maschera un errore 404 Non trovato. Controlla gli altri requisiti di configurazione per risolvere l'errore di Accesso negato.

Se l'oggetto non è nel bucket, l'errore di Accesso negato maschera un errore 404 Non trovato. Risolvi il problema relativo all'oggetto mancante.

Verifica la configurazione della crittografia AWS KMS

Nota quanto segue sulla crittografia AWS KMS (SSE-KMS):

  • Se un utente IAM non può accedere a un oggetto per il quale dispone delle autorizzazioni complete, controlla se l'oggetto è crittografato da SSE-KMS. Puoi utilizzare la console Amazon S3 per visualizzare le proprietà dell'oggetto, che includono le informazioni di crittografia lato server dell'oggetto.
  • Se l'oggetto è crittografato con SSE-KMS, assicurati che la policy delle chiavi KMS conceda all'utente IAM le autorizzazioni minime richieste per l'utilizzo della chiave. Ad esempio, se l'utente IAM utilizza la chiave solo per scaricare un oggetto S3, deve disporre delle autorizzazioni kms:Decrypt. Per ulteriori informazioni, consulta Consente l'accesso all'account AWS e abilita le policy IAM.
  • Se l'identità e la chiave IAM si trovano nello stesso account, le autorizzazioni kms:Decrypt devono essere concesse utilizzando la policy della chiave. La policy della chiave deve fare riferimento alla stessa identità IAM della policy IAM.
  • Se l'utente IAM appartiene a un account diverso dalla chiave AWS KMS, anche queste autorizzazioni devono essere concesse nella policy IAM. Ad esempio, per scaricare gli oggetti crittografati SSE-KMS, le autorizzazioni kms:Decrypt devono essere specificate sia nella policy della chiave che nella policy IAM. Per ulteriori informazioni sull'accesso tra più account tra l'utente IAM e la chiave KMS, consulta Consentire agli utenti di altri account di utilizzare una chiave KMS.

Verifica che il parametro request-payer sia specificato dagli utenti (se utilizzi Pagamento a carico del richiedente)

Se il tuo bucket ha Pagamento a carico del richiedente attivato, gli utenti di altri account devono specificare il parametro request-payer quando inviano richieste al tuo bucket. Per verificare se Pagamento a carico del richiedente è abilitato, utilizza la console Amazon S3 per visualizzare le proprietà del bucket.

Il seguente esempio di comando AWS CLI include il parametro corretto per accedere a un bucket tra account con Pagamento a carico del richiedente:

aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester

Verifica la tua policy di controllo dei servizi di AWS Organizations

Se utilizzi AWS Organizations, consulta le policy di controllo dei servizi per assicurarti che l'accesso ad Amazon S3 sia consentito. Le policy di controllo del servizio specificano le autorizzazioni massime per gli account interessati. 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 Abilitazione di tutte le funzionalità della tua organizzazione.

Informazioni correlate

Risoluzione dei problemi di Amazon S3

Ottenere gli ID di richiesta Amazon S3 per il supporto AWS

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa