Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Come posso risolvere i messaggi di errore di rifiuto esplicito quando effettuo chiamate API utilizzando ruoli o utenti IAM?
Voglio risolvere il messaggio di errore di rifiuto esplicito quando effettuo una chiamata API utilizzando un ruolo o un utente AWS Identity and Access Management (IAM).
Breve descrizione
Per poter effettuare una chiamata API con esito positivo, un'entità IAM (ruolo o utente) deve soddisfare le condizioni seguenti:
- Il ruolo o l'utente deve avere le autorizzazioni corrette per effettuare una chiamata API.
- Le autorizzazioni non sono rifiutate da alcuna istruzione in tutte le policy applicabili al contesto della richiesta.
Se un'entità IAM non soddisfa queste condizioni, la chiamata API ha esito negativo e restituisce un errore (AccessDenied) simile al seguente:
- "IAM user or role experiencing the issue: arn:XXXXXXXX:iam::XXXXXXXX:role/TestReadOnly"
- "Error: An error occurred (AccessDenied) when calling the RunInstances operation: User: arn:aws:iam::XXXXXXXX:user/tester is not authorized to perform: ec2:RunInstances on resource: role TestReadOnly with an explicit deny"
Nota: i passaggi per la risoluzione del problema descritti in questo articolo riguardano specificamente gli errori di rifiuto esplicito e non gli errori di rifiuto implicito. Per ulteriori informazioni sugli errori di rifiuto implicito, vedi la differenza tra rifiuti impliciti ed espliciti.
Risoluzione
Gli errori di rifiuto esplicito si verificano a causa di problemi in una o più delle policy seguenti:
- Policy basate sull'identità
- Policy basate sulle risorse
- Limite delle autorizzazioni
- Policy di controllo dei servizi
- Policy di sessione
Policy basate sull'identità
Le policy basate sull'identità controllano le operazioni consentite o rifiutate di un'entità. Segui questi passaggi di risoluzione per individuare i problemi relativi alle policy basate sull'identità.
Nota: è consigliabile utilizzare Deny con StringNotLike nelle condizioni per impedire accessi privilegiati accidentali.
1. Verifica che non siano presenti istruzioni di rifiuto nella policy basata sull'identità. Questo esempio contiene un'istruzione di rifiuto (Deny):
{ "Effect": "Deny", "Action": "iam:DeleteRole" "Resource": "*" }
2. Verifica se alla policy è applicata l'autenticazione a più fattori (MFA). Se la tua entità IAM si autentica senza utilizzare un altro fattore di autenticazione quando è applicata l'MFA, l'autorizzazione viene rifiutata. Ad esempio, se l'entità esegue l'autenticazione utilizzando AWS CLI senza MFA, la chiamata API viene rifiutata. Guarda questo esempio di applicazione dell'MFA:
{ "Sid": "DenyAllExceptListedIfNoMFA", "Effect": "Deny", "NotAction": [ "iam:CreateVirtualMFADevice", "iam:EnableMFADevice", "iam:GetUser", "iam:ListMFADevices", "iam:ListVirtualMFADevices", "iam:ResyncMFADevice", "sts:GetSessionToken" ], "Resource": "*", "Condition": { "BoolIfExists": {"aws:MultiFactorAuthPresent": "false"} } }
Questa policy rifiuta esplicitamente tutte le chiamate API, tranne quelle menzionate nell'elemento della policy NotAction.
3. Assicurati che la policy soddisfi tutte le condizioni necessarie. Se la policy ha più operatori di condizione o più chiavi, le condizioni vengono valutate utilizzando una logica AND. Ogni chiave RequestTag deve essere utilizzata in istruzioni separate per ottenere la stessa logica AND. Questo è un esempio di un problema comune che causa un errore della chiamata API:
{ "Sid": "AllowRunInstancesWithRestrictions2", "Effect": "Deny", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*" ], "Condition": { "ForAllValues:StringNotLike": { "aws:TagKeys": "Production" }, "StringEquals": { "ec2:InstanceType": "t2.micro" } } }
Per evitare un errore di rifiuto esplicito dell'accesso per queste chiamate API, assicurati che la condizione precedente sia soddisfatta.
Nota: la condizione aws:TagKeys fa distinzione tra maiuscole e minuscole.
Policy basate sulle risorse
Le policy basate sulle risorse consentono o rifiutano l'accesso a una risorsa. A differenza delle policy basate sull'identità IAM, che sono unificate, le policy basate sulle risorse sono progettate dai servizi. I passaggi seguenti di risoluzione del problema utilizzano policy basate sulle risorse di Amazon Simple Storage Service (Amazon S3) e una policy sugli endpoint VPC come esempi.
Valutazione della policy del bucket S3
La valutazione della policy del bucket Amazon S3 funziona come segue:
Nota: si presuppone che l'ACL del bucket sia impostata come predefinita.
- Per accedere a un bucket nello stesso account, un'entità IAM necessita delle autorizzazioni nella policy basata sull'identità IAM O nella policy del bucket.
- Per accedere a un bucket in un altro account, un'entità IAM necessita delle autorizzazioni nella policy del bucket E nella policy basata sull'identità IAM per ottenere l'accesso.
1. Verifica se sono presenti istruzioni di rifiuto nella policy basata sulle risorse. Questo esempio mostra un'istruzione di rifiuto (deny) nella policy del bucket:
{ "Effect": "deny", "Principal": { "AWS": "arn:aws:iam::111111111111:role/ROLENAME" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::MyExampleBucket" }
2. Verifica che gli ARN descritti nella policy siano corretti.
3. La policy del bucket rifiuta l'accesso se il valore aws:userid dell'utente corrente non è uguale a quello definito nella policy. Vedi questo esempio:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::MyExampleBucket", "arn:aws:s3:::MyExampleBucket/*" ], "Condition": { "StringNotLike": { "aws:userId": [ "AROAEXAMPLEID:*", "AIDAEXAMPLEID", "111111111111" ] } } } ] }
Endpoint VPC
La policy di un endpoint VPC è una policy delle risorse IAM collegata a un endpoint. Questa policy non ha la priorità sulle policy utente IAM o sulle policy specifiche del servizio (come le policy dei bucket S3), né le sostituisce.
Esistono due modi per controllare l'accesso ai dati di Amazon S3 quando si utilizza un endpoint di interfaccia per connettersi ad Amazon S3:
- Puoi controllare i principali AWS (account AWS, utenti IAM e ruoli IAM) che possono utilizzare l'endpoint VPC per accedere al servizio endpoint.
- Puoi controllare i VPC o gli endpoint VPC che hanno accesso ai tuoi bucket utilizzando le policy dei bucket Amazon S3.
L'esempio seguente è una policy dei bucket Amazon S3. La policy limita l'accesso a un bucket specifico, chiamato examplebucket, dall'endpoint VPC con l'ID vpce-11111. La policy rifiuta tutti gli accessi al bucket se non viene utilizzato l'endpoint specificato. La condizione aws:SourceVpce viene utilizzata per specificare l'endpoint.
{ "Version": "2012-10-17", "Id": "Policy123456789”, "Statement": [ { "Sid": "AccessSpecificVPCEOnly", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*"], "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpce": "vpce-11111” } } } ] }
Verifica sempre che l'endpoint VPC non rifiuti esplicitamente l'accesso alla risorsa.
Limite delle autorizzazioni
Il limite delle autorizzazioni è una policy gestita che stabilisce le autorizzazioni massime che una policy basata sull'identità può concedere a un'entità IAM. Questa policy gestita può limitare le autorizzazioni alle entità, il che può causare messaggi di errore di rifiuto esplicito.
Questo esempio mostra un'operazione consentita nella policy IAM ma rifiutata esplicitamente nel limite delle autorizzazioni. Vedi il limite delle autorizzazioni qui sotto:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:*" "Resource": "*" } ] }
L'utente ha le autorizzazioni seguenti:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" } }
Anche se l'utente ha autorizzazione RunInstances, riceve un messaggio di rifiuto esplicito quando invia la richiesta. Per risolvere questo errore, assicurati che sia il limite delle autorizzazioni che IAM consentano esplicitamente questa operazione.
Policy di controllo dei servizi
Una policy di controllo dei servizi (SCP) ti consente di gestire le autorizzazioni nella tua organizzazione. L'esempio seguente mostra un'istruzione di rifiuto (deny) nell'SCP. In questo esempio, l'SCP è collegata a un account membro o a una particolare unità organizzativa (UO). Rifiuta esplicitamente l'accesso all'operazione RunInstances:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances" "Resource": "*" } ] }
Per risolvere gli errori di rifiuto esplicito, procedi in uno dei modi seguenti:
- Scollega l'SCP dall'account.
- Modifica l'istruzione di rifiuto aggiungendo una condizione che escluda alcuni casi d'uso. Ad esempio, l'SCP in questo esempio NON rifiuta ec2:RunInstances se il principale IAM utilizza il ruolo CloudOps:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances" "Resource": "*", "Condition": { "ArnNotLike": { "aws:PrincipalARN": "arn:aws:iam::*:role/CloudOps" } } } ] }
Policy di sessione
Le policy di sessione sono policy avanzate che passi come parametri quando crei a livello di programmazione una sessione temporanea per un ruolo o un utente. Puoi creare una sessione di ruolo e passare policy di sessione utilizzando le operazioni API AssumeRole, AssumeRoleWithSAML o AssumeRoleWithWebIdentity.
Ad esempio, questa policy genera l'errore di rifiuto esplicito quando l'utente tenta di effettuare una chiamata API RunInstances. Controlla sempre se sono presenti istruzioni di rifiuto nella policy della sessione:
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "*" } }
Informazioni correlate
Access management for AWS resources
Permissions boundaries for IAM entities
How to restrict Amazon S3 bucket access to a specific IAM role
- Argomenti
- Security, Identity, & Compliance
- Lingua
- Italiano
