¿Cómo soluciono los mensajes de error de denegación explícita al solicitar llamadas a la API mediante roles o usuarios de IAM?
Quiero que aparezca un mensaje de error de denegación explícita cuando solicito una llamada a la API con un rol o un usuario de AWS Identity and Access Management (IAM).
Descripción corta
Para que una entidad de IAM (rol o usuario) pueda realizar correctamente una llamada a la API, la entidad debe cumplir las siguientes condiciones:
- El rol o el usuario tienen los permisos correctos para solicitar una llamada a la API.
- Ninguna declaración deniega el permiso en ninguna de las políticas aplicables al contexto de la solicitud.
Si la entidad de IAM no cumple estas condiciones, la llamada a la API falla y devuelve un error (AccessDenied) similar al siguiente:
- «El usuario o rol de IAM tiene el problema: arn:XXXXXXXX:iam::XXXXXXXX:role/TestReadOnly»
- «Error: Se produjo un error (AccessDenied) al llamar a la operación RunInstances: El usuario arn:aws:iam::XXXXXXXX:user/tester no tiene autorización para ejecutar ec2:RunInstances en resource: role TestReadOnly con una denegación explícita»
Nota: Los pasos de solución de problemas de este artículo se refieren específicamente a los errores de denegación explícita y no a los errores de denegación implícita. Para obtener más información sobre los errores de denegación implícita, consulte Diferencia entre denegaciones implícitas y explícitas.
Resolución
Los errores de denegación explícita se producen debido a problemas en una o más de las siguientes políticas:
- Políticas basadas en identidad
- Políticas basadas en recursos
- Límite de permisos
- Políticas de control de servicios
- Política de sesión
Políticas basadas en identidad
La política basada en identidad controla la acción permitida o denegada de una entidad. Sigue estos pasos de solución de problemas para identificar problemas con las políticas basadas en identidad.
Nota: Se recomienda utilizar Deny con StringNotLike en condiciones para evitar un acceso autorizado involuntariamente.
1. Comprueba que no haya ninguna declaración de denegación en la política basada en identidad. Este ejemplo contiene una declaración de denegación:
{ "Effect": "Deny", "Action": "iam:DeleteRole" "Resource": "*" }
2. Comprueba si la autenticación multifactor (MFA) está incluida en la política. Si la entidad de IAM se autentica sin utilizar otro factor de autenticación cuando se aplica la MFA, se deniega el permiso. Por ejemplo, si la entidad se autentica mediante la AWS CLI sin MFA, se denegará la llamada a la API. Consulta este ejemplo de aplicación de la 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"} } }
Esta política niega explícitamente todas las llamadas a la API, excepto las que se mencionan en el elemento de política NotAction.
3. Asegúrate de que la política cumpla con todas las condiciones requeridas. Si la política tiene varios operadores de condiciones o varias claves, las condiciones se evalúan mediante la lógica AND. Cada clave RequestTag debe usarse en instrucciones independientes para obtener la misma lógica AND. Este es un ejemplo de un problema común que provoca un error en la llamada a la 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" } } }
Para evitar un error de denegación de acceso explícito en estas llamadas a la API, asegúrate de que se cumple la condición anterior.
Nota: La condición aws:TagKeys distingue entre mayúsculas y minúsculas.
Políticas basadas en recursos
La política basada en recursos permite o deniega el acceso a un recurso. A diferencia de las políticas basadas en identidad de IAM, que están unificadas, las políticas basadas en recursos las diseñan los servicios. En los siguientes pasos de solución de problemas, se utilizan políticas basadas en recursos de Amazon Simple Storage Service (Amazon S3) y una política de puntos de enlace de VPC como ejemplos.
Evaluación de la política de bucket de S3
La evaluación de la política de bucket de Amazon S3 funciona de la siguiente manera:
Nota: Esto supone que la ACL del bucket está configurada de forma predeterminada.
- Para acceder a un bucket de la misma cuenta, una entidad de IAM necesita permisos en la política basada en identidad de IAM O en la política de bucket.
- Para acceder a un bucket en otra cuenta, una entidad de IAM necesita permisos en la política de bucket Y la política basada en identidad de IAM para poder acceder.
1. Comprueba si hay declaraciones de denegación en la política basada en recursos. En este ejemplo se muestra una declaración de denegación en la política de bucket:
{ "Effect": "deny", "Principal": { "AWS": "arn:aws:iam::111111111111:role/ROLENAME" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::MyExampleBucket" }
2. Comprueba que los ARN descritos en la política sean correctos.
3. La política de bucket deniega el acceso si el aws:userid del usuario actual no coincide con lo que se define en la política. Consulta este ejemplo:
{ "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" ] } } } ] }
Punto de enlace de VPC
Una política de punto de enlace de VPC es una política de recursos de IAM que se adjunta a un punto de enlace. Esta política no anula ni reemplaza las políticas de usuario de IAM ni las políticas específicas del servicio (como las políticas de bucket de S3).
Hay dos maneras de controlar el acceso a los datos de Amazon S3 cuando se utiliza un punto de enlace de interfaz para conectarse a Amazon S3:
- Puedes controlar las entidades principales de AWS (cuentas de AWS, usuarios de IAM y roles de IAM) que pueden usar el punto de enlace de VPC para acceder al servicio de punto de enlace.
- Puedes controlar las VPC o los puntos de enlace de VPC que tienen acceso a los buckets mediante las políticas de bucket de Amazon S3.
El siguiente ejemplo es una política de bucket de Amazon S3. La política restringe el acceso a un bucket específico, denominado examplebucket, desde el punto de enlace de VPC con el ID vpce-11111. La política deniega todo acceso al bucket si no se utiliza el punto de enlace especificado. La condición aws:SourceVpce se usa para especificar el punto de enlace.
{ "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” } } } ] }
Compruebe siempre que el punto de enlace de VPC no deniegue explícitamente el acceso al recurso.
Límite de permisos
El límite de permisos es una política administrada que establece los permisos máximos que una política basada en identidad puede conceder a una entidad de IAM. Esta política administrada puede restringir los permisos a las entidades, lo que puede generar mensajes de error de denegación explícita.
En este ejemplo se muestra una acción que está permitida en la política de IAM, pero que se deniega explícitamente en el límite de permisos. Consulta el límite de permisos a continuación:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:*" "Resource": "*" } ] }
El usuario tiene los siguientes permisos:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" } }
Aunque el usuario tiene el permiso RunInstances, recibe un mensaje de denegación explícita cuando lo solicita. Para resolver este error, asegúrate de que tanto el límite de permisos como IAM permiten esta acción de forma explícita.
Políticas de control de servicios
Una política de control de servicio (SCP) te permite administrar los permisos en tu organización. En el siguiente ejemplo se muestra una declaración de denegación en el SCP. En este ejemplo, el SCP se adjunta a una cuenta de miembro o a una unidad organizativa (OU) en particular. Deniega explícitamente el acceso a la acción RunInstances:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances" "Resource": "*" } ] }
Para resolver los errores de denegación explícita, lleva a cabo una de estas acciones:
- Separa el SCP de la cuenta.
- Para modificar la sentencia de denegación, agrega una condición que excluya algunos casos de uso. Por ejemplo, este SCP de este ejemplo NO deniega ec2:RunInstances si la entidad principal de IAM usa el rol CloudOps:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances" "Resource": "*", "Condition": { "ArnNotLike": { "aws:PrincipalARN": "arn:aws:iam::*:role/CloudOps" } } } ] }
Políticas de sesión
Las políticas de sesión son políticas avanzadas que se aprueban como parámetro al crear una sesión temporal para un rol o un usuario de forma programática. Puedes crear una sesión de rol y aprobar políticas de sesión mediante las operaciones de API AssumeRole, AssumeRoleWithSAML o AssumeRoleWithWebIdentity.
Por ejemplo, esta política genera un error de denegación explícita cuando el usuario intenta realizar una llamada a la API RunInstances. Comprueba siempre las declaraciones de denegación en la política de sesión:
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "*" } }
Información relacionada
Recursos de AWS para administración de acceso
Límites de permisos para las entidades de IAM
Cómo restringir el acceso al bucket de Amazon S3 a un rol de IAM específico
Control del acceso desde puntos de enlace de VPC con políticas de bucket

Contenido relevante
- preguntada hace 2 meseslg...
- preguntada hace 2 meseslg...
- preguntada hace 4 meseslg...
- preguntada hace 3 meseslg...
- OFICIAL DE AWSActualizada hace 3 meses
- OFICIAL DE AWSActualizada hace 6 meses
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años