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

10 minuti di lettura
0

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

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Utilizza il documento di Automazione AWS Systems Manager

Come aiuto per determinare i problemi durante la lettura di oggetti da un bucket S3 pubblico specificato, utilizza il documento di automazione AWSSupport-TroubleshootS3PublicRead su AWS Systems Manager.

Controlla le impostazioni di proprietà del bucket e dell'oggetto

Per gli errori AccessDenied dalle richieste GetObject o HeadObject, controlla se l'oggetto e il bucket hanno lo stesso proprietario. Inoltre, controlla se il proprietario del bucket dispone delle autorizzazioni di lettura o di controllo completo nella lista di controllo degli accessi (ACL).

Nota: quando si crea un nuovo bucket, le ACL sono disattivate per impostazione predefinita. È consigliabile utilizzare le policy di AWS Identity and Access Management (IAM) anziché le ACL per controllare l'accesso alle risorse S3.

Verifica quale account è proprietario degli oggetti

Per impostazione predefinita, l'account AWS proprietario del bucket in cui è archiviato l'oggetto è anche proprietario dell'oggetto. Se altri account possono caricare oggetti nel tuo bucket, controlla le autorizzazioni degli oggetti a cui gli utenti non riescono ad accedere.

Per verificare se il bucket e l'oggetto hanno lo stesso proprietario, completa i passaggi seguenti:

  1. Esegui il comando di AWS CLI list-buckets per ottenere l'ID canonico Amazon S3 per il tuo account:

    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 riescono ad accedere:

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

    Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del bucket ed exampleprefix con il valore del prefisso. Puoi usare il comando list-objects per controllare più oggetti contemporaneamente.

  3. Se gli ID canonici non corrispondono, non sei il proprietario dell'oggetto. Il proprietario dell'oggetto può eseguire il comando put-object-acl per concederti il pieno controllo dell'oggetto:

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

    Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del bucket che contiene gli oggetti ed exampleobject.jpg con il nome della chiave.

  4. Dopo che il proprietario dell'oggetto avrà cambiato l'ACL dell'oggetto in bucket-owner-full-control, il proprietario del bucket potrà accedere all'oggetto. Per cambiare anche il proprietario dell'oggetto nell'account del bucket, esegui il comando cp dall'account del bucket per copiare l'oggetto su se stesso.

Crea un ruolo IAM con le autorizzazioni per il tuo bucket

Se il ruolo IAM e il proprietario del bucket appartengono allo stesso account, è sufficiente che il ruolo IAM o il bucket dispongano delle autorizzazioni. Non è necessario che le autorizzazioni siano disponibili sia per il ruolo IAM che per il bucket.

Per aggiungere autorizzazioni tra account diversi, crea un ruolo IAM nel tuo account con le autorizzazioni per il tuo bucket. Quindi concedi a un altro account l'autorizzazione per assumere il ruolo IAM. Per ulteriori informazioni, consulta IAM tutorial: Delegate access across AWS accounts using IAM roles.

Controlla la policy del bucket o le policy utente IAM

Rivedi la policy del bucket o le policy utente IAM associate per individuare eventuali istruzioni che potrebbero rifiutare l'accesso. Verifica che le richieste al tuo bucket soddisfino le condizioni della policy del bucket o delle policy IAM. Verifica se sono presenti istruzioni Deny errate, azioni mancanti o errori ortografici in una policy.

Condizioni di istruzioni Deny

Controlla se vi sono istruzioni Deny con condizioni che bloccano l'accesso in base a quanto segue:

  • Autenticazione a più fattori (MFA)
  • Chiavi di crittografia
  • Indirizzo IP specifico
  • Cloud privati virtuali (VPC) o endpoint VPC specifici
  • Utenti o ruoli IAM specifici

Nota: se richiedi l'MFA e gli utenti usano AWS CLI per inviare richieste, assicurati che gli utenti configurino AWS CLI per l'utilizzo dell'MFA.

Ad esempio, nella policy del bucket seguente, Statement1 consente l'accesso pubblico per scaricare oggetti (s3:GetObject) da DOC-EXAMPLE-BUCKET. Tuttavia, Statement2 rifiuta 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. Poiché le istruzioni Deny hanno la priorità sulle istruzioni Allow, agli utenti che tentano di scaricare oggetti dall'esterno di vpce-1a2b3c4d viene rifiutato 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 del bucket o policy IAM

Verifica che la policy dei bucket o le policy IAM consentano le azioni di Amazon S3 che i tuoi utenti devono eseguire. Ad esempio, la policy del bucket seguente non include l'autorizzazione all'azione s3:PutObjectAcl:

{  
  "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"  
        ]  
      }  
    }  
  ]  
}

Se l'utente IAM tenta di modificare l'ACL di un oggetto, riceve un errore di accesso negato.

Altri errori nelle policy

Verifica se sono presenti spazi aggiuntivi, un ARN errato o altri errori ortografici nella policy del bucket o nelle policy utente IAM.

Se una policy IAM ha uno spazio aggiuntivo nell'ARN, l'ARN viene valutato in modo errato e l'utente riceve un errore di accesso negato. Ad esempio, una policy IAM con uno spazio aggiuntivo nell'ARN: arn:aws:s3::: DOC-EXAMPLE-BUCKET/* viene valutata come arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/.

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

Verifica che i ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)limiti delle autorizzazioni IAM[ impostati sulle entità IAM consentano l'accesso ad Amazon S3.

Controlla le impostazioni di blocco dell'accesso pubblico Amazon S3 del bucket

Se riscontri errori di accesso negato nelle richieste di lettura pubblica consentite, controlla le impostazioni di blocco dell'accesso pubblico Amazon S3 del bucket sull'account e sul bucket.Queste impostazioni possono sostituire le autorizzazioni che consentono l'accesso pubblico in lettura.

Rivedi le credenziali degli utenti

Controlla le credenziali che gli utenti hanno configurato per accedere ad Amazon S3. Gli utenti devono configurare gli AWS SDK e l'AWS CLI per l'utilizzo delle credenziali dell'identità IAM che ha accesso al bucket.

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

aws configure list

Se gli utenti usano un'istanza Amazon Elastic Compute Cloud (Amazon EC2) per accedere al bucket, verifica che l'istanza utilizzi 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 dal Servizio di token di sicurezza AWS (AWS STS), rivedi la policy di sessione associata. Quando un amministratore usa la chiamata API AssumeRole o il comando assume-role per creare credenziali di sicurezza temporanee, può passare policy specifiche della sessione.

Per trovare le policy di sessione associate, cerca gli eventi AssumeRole nella cronologia eventi di AWS CloudTrail, nello stesso intervallo di tempo delle richieste di accesso non riuscite. Quindi, esamina il campo requestParameters nei log CloudTrail per individuare i parametri policy o policyArns. Verifica che la policy o l'ARN della policy associata conceda le autorizzazioni Amazon S3 necessarie.

Ad esempio, il seguente frammento di un log CloudTrail mostra che le credenziali temporanee includono una policy di sessione inline 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 dell'endpoint Amazon VPC disponga delle autorizzazioni corrette per accedere alle risorse S3

Se gli utenti utilizzano un'istanza EC2 instradata attraverso un endpoint Amazon Virtual Private Cloud (Amazon VPC) per accedere al bucket, controlla la policy dell'endpoint VPC.

Ad esempio, la policy dell'endpoint VPC seguente consente l'accesso solo a DOC-EXAMPLE-BUCKET. Gli utenti che utilizzano l'endpoint VPC per inviare richieste 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 punto di accesso Amazon S3

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

Le autorizzazioni concesse nella policy di un punto di accesso hanno effetto solo quando anche la policy del bucket associato consente lo stesso accesso. Verifica che sia la policy del bucket, sia la policy del punto di accesso concedano le autorizzazioni corrette.

Verifica che l'oggetto si trovi nel bucket e che il nome dell'oggetto non contenga caratteri speciali

Controlla se l'oggetto richiesto si trova nel bucket. Se non è presente, la richiesta non troverà l'oggetto e Amazon S3 presumerà che l'oggetto non esista. Se non disponi delle autorizzazioni s3:ListBucket, verrà visualizzato un errore di accesso negato anziché 404 Not Found.

Nota: vi è una procedura diversa per recuperare gli oggetti che hanno caratteri speciali nel nome.

Esegui il comando AWS CLI head-object per verificare se un oggetto è nel bucket:

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

Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket.

Se l'oggetto è nel bucket, l'errore di accesso negato non maschera l'errore 404 Not Found. 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 l'errore 404 Not Found. Risolvi il problema relativo all'oggetto mancante.

Verifica la configurazione della crittografia AWS KMS

Se un utente IAM dispone di autorizzazioni complete per un oggetto ma non riesce comunque ad accedere all'oggetto, controlla se all'oggetto è applicata la crittografia del Servizio AWS di gestione delle chiavi (AWS KMS) (SSE-KMS). Puoi utilizzare la console Amazon S3 per visualizzare le proprietà dell'oggetto e controllarne le informazioni SSE-KMS.

Se l'oggetto è crittografato con una chiave gestita dal cliente, la policy della chiave KMS deve consentire di eseguire l'azione kms:GenerateDataKey o kms:Decrypt. Per ulteriori informazioni, consulta Allows access to the AWS account and enables IAM policies.

Se l'utente IAM appartiene a un account diverso da quello della chiave AWS KMS, modifica la policy IAM in modo che conceda l'autorizzazione Kms:Decrypt. Ad esempio, per scaricare gli oggetti SSE-KMS, devi specificare l'autorizzazione kms:Decrypt sia nella policy della chiave che nella policy IAM. Per ulteriori informazioni sull'accesso multi-account tra l'utente IAM e la chiave KMS, consulta Allowing users in other accounts to use a KMS key.

Per i bucket attivati con Pagamento a carico del richiedente, verifica che gli utenti abbiano specificato il parametro request-payer

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

L'esempio di comando AWS CLI seguente include il parametro corretto per accedere a un bucket multi-account su cui è attivo il Pagamento a carico del richiedente:

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

Controlla le SCP di AWS Organizations

Se usi AWS Organizations, controlla le policy di controllo dei servizi per assicurarti che l'accesso ad Amazon S3 sia consentito. Le SCP specificano le autorizzazioni massime per gli account interessati. Ad esempio, l'SCP seguente rifiuta 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 Enabling all features for an organization with AWS Organizations.

Informazioni correlate

Troubleshoot access denied (403 Forbidden) errors in Amazon S3

Getting Amazon S3 request IDs for AWS Support

AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa