¿Cómo puedo solucionar los problemas de acceso denegado o de operación no autorizada con una política de IAM?

11 minutos de lectura
0

Estoy intentando realizar una acción en un recurso de AWS y he recibido un error de «acceso denegado» o de «operación no autorizada». ¿Cómo puedo solucionar estos problemas de permisos?

Breve descripción

Para solucionar los problemas relacionados con las políticas de AWS Identity and Access Management (IAM):

Resolución

Identifique a la persona que llama a la API y entienda los mensajes de error

Importante:

Asegúrese de que las llamadas a la API se realizan en nombre de la entidad de IAM correcta antes de revisar las políticas de IAM. Si el mensaje de error no incluye la información de la persona que llama a la API, siga estos pasos para identificarla:

  1. Abra la Consola de administración de AWS.
  2. En la esquina superior derecha de la página, seleccione la flecha junto a la información de la cuenta.
  3. Si ha iniciado sesión como rol de IAM, consulte «Actualmente activo como» para ver el nombre del rol asumido y la «ID de cuenta» para ver la ID de la cuenta.
  4. Si ha iniciado sesión como usuario federado, consulte «Usuario federado» para ver el nombre del rol de federación y el nombre de la sesión del rol.

-o-

Use el comando de la AWS CLI get-caller-identity para identificar a la persona que llama a la API. También puede usar el comando de la AWS CLI con la marca --debug para identificar el origen de las credenciales a partir de un resultado similar al siguiente:

2018-03-13 16:23:57,570 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

Compruebe los permisos de la política de IAM

Verifique si se han concedido los permisos necesarios a la persona que llama a la API consultando las políticas adjuntas de IAM. Para obtener más información, consulte Cómo determinar si una solicitud se permite o se deniega dentro de una cuenta.

Evalúe los SCP de AWS Organizations

Si la cuenta de AWS forma parte de una organización de AWS, se pueden aplicar SCP en el nivel jerárquico para permitir o rechazar acciones. Todas las entidades de IAM de la cuenta de AWS heredan los permisos de SCP. Asegúrese de que la persona que llama a la API no esté rechazada explícitamente en el SCP.

Asegúrese de que la API a la que se llama no se deniegue explícitamente en una política SCP de una organización que afecte al usuario que llama

Revise las políticas basadas en identidades y recursos

Asegúrese de que haya una declaración de permiso explícita en la política basada en la identidad de las entidades de IAM para la persona que llama a la API. A continuación, asegúrese de que la API admite permisos en el nivel de recurso. Si la persona que llama a la API no admite permisos en el nivel de recurso, asegúrese de que el comodín *«\ » esté especificado en el elemento de recurso de la declaración de política de IAM.

Puede adjuntar políticas basadas en recursos a un recurso del servicio de AWS para proporcionarle acceso. Para obtener más información, consulte Políticas basadas en identidades y políticas basadas en recursos.

Para ver el resumen de la política de IAM:

  1. Abra la consola de IAM.
  2. En el panel de navegación, elija Políticas.
  3. Seleccione la flecha junto al nombre de la política para expandir su vista de detalles.

En el siguiente ejemplo, la política no funciona porque no todas las acciones de la API de Amazon Elastic Compute Cloud (Amazon EC2) admiten permisos en el nivel de recurso:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SorryThisIsNotGoingToWorkAsExpected",
            "Effect": "Allow",
            "Action": ["ec2:*"],
            "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*"
        }
    ]
}

Los usuarios de IAM que intentan lanzar una instancia de Amazon EC2 en la región us-east-1 con el comando run-instances de AWS CLI reciben un mensaje de error parecido al siguiente:

"An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message:…"

Para solucionar este problema, cambie el recurso por un comodín «*». Esto se debe a que Amazon EC2 solo admite permisos parciales en el nivel de recurso.

Para decodificar el mensaje de error de autorización y obtener más información sobre el motivo de este error, utilice la acción de API DecodeAuthorizationMessage similar a la siguiente:

$ aws sts decode-authorization-message --encoded-message <encoded-message-from-the-error>

Compruebe los límites de los permisos

Si la entidad de IAM tiene un límite de permisos adjuntado, el límite establece los permisos máximos que tiene la entidad.

Evalúe las políticas de sesión

Si la persona que llama a la API es un rol de IAM o un usuario federado, las políticas de sesión se aprueban durante la sesión. Los permisos para una sesión son la intersección entre las políticas de sesión y las políticas basadas en identidades de la entidad de IAM utilizada para crear la sesión. Asegúrese de que la llamada a la API exista en la política y la entidad de IAM.

Asegúrese de que las API admitan las claves de condición de la política

Las claves de condición de AWS se pueden usar para comparar los elementos de una solicitud de API realizada a AWS con los valores de clave especificados en una política de IAM. Las claves de condición pueden ser globales o definidas por el servicio de AWS. Las claves de condición específicas de un servicio de AWS solo se pueden usar dentro de ese servicio (por ejemplo, las condiciones de EC2, en acciones de API de EC2). Para obtener más información, consulte Actions, resources, and condition context keys for AWS services.

Un elemento de condición puede contener varias condiciones y, dentro de cada bloque de condiciones, puede haber varios pares clave-valor. Para obtener más información, consulte Creando una condición con varias claves o valores.

En este ejemplo de política, existe una coincidencia para el elemento de la condición si el usuario de IAM admin llama la solicitud de API de IAM y la dirección IP de origen es 1.1.1.0/24 o 2.2.2.0/24.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:username": "admin"
        },
        "IpAddress": {
          "aws:SourceIp": [
            "1.1.1.0/24",
            "2.2.2.0/24"
          ]
        }
      }
    }
  ]
}

Errores de política de IAM y ejemplos de soluciones de problemas

Observe los siguientes ejemplos para identificar el mensaje de error, la persona que llama a la API, la API y los recursos a los que se llama:

Ejemplo de mensaje de errorPersona que llama a la APIAPIRecursosCuándo
A: “Se produjo un error (operación no autorizada) al llamar a la operación Describir instancias: No está autorizado a realizar esta operación.“DesconocidoDescribir InstanciasDesconocidohora en que se produce el error
B:«Se produjo un error (Accessdenied) al llamar a la operación AssumeRole: Usuario: arn:aws:iam::123456789012:El usuario/test no está autorizado a realizar: STS:AssumeRole en el recurso: arn:aws:iam::123456789012: role/EC2-FullAccess»arn:aws:iam::123456789012:usuario/pruebaAsumir un Rolarn:aws:iam::123456789012:role/EC2-F Acceso completohora en que se produce el error
C: “Se produjo un error (AccessDenied) al llamar a la operación getSessionToken: No se puede llamar a GetSessionToken con las credenciales de sesión“DesconocidoGetSessionTokenDesconocidohora en que se produce el error
D: “Se produjo un error (operación no autorizada) al llamar a la operación associateIAmInstanceProfile: No está autorizado a realizar esta operación. Mensaje de error de autorización codificado: ....“DesconocidoPerfil de instancia de IAM asociadoDesconocidohora en que se produce el error

Usando este método de evaluación, puede identificar la causa de los mensajes de error que se pueden mostrar por problemas con los permisos en relación con distintos servicios de AWS. Para obtener más información, consulte los siguientes mensajes de error y los pasos para solucionar los problemas:

Mensaje de error de ejemplo A:

Este mensaje de error indica que no tienes permiso para llamar a la API DescribeInstances.

Para solucionar este error, siga estos pasos:

  1. Identifique a la persona que llama a la API.
  2. Confirme que la acción de API ec2:DescribeInstances no esté incluida en ninguna instrucción «rechazar».
  3. Confirme que la acción de API ec2:DescribeInstances esté incluida en las instrucciones «permitida».
  4. Confirme que no se haya especificado ningún recurso para esta acción de API. Nota: Esta acción de API no soporta permisos en el nivel de recurso.
  5. Confirme si la acción DescribeInstances admite todas las condiciones de IAM especificadas en la instrucción «permitida» y si existen coincidencias para las condiciones.

Para obtener más información, consulte DescribeInstanceStatus.

Mensaje de error de ejemplo B:

Este mensaje de error incluye el nombre de la API, la persona que llama a la API y el recurso de destino. Asegúrese de que la identidad de IAM que llamó a la API tenga el acceso correcto a los recursos. Revise las políticas de IAM usando el método de evaluación anterior.

Para solucionar este error, siga estos pasos con el fin de confirmar la política de confianza del rol de IAM: EC2-Acceso Completo:

  1. Confirme que ni arn:aws:iam::123456789012:user/test ni arn:aws:iam::123456789012:root se hayan incluido en instrucciones «rechazar» de la política de confianza.
  2. Confirme que ni arn:aws:iam::123456789012:user/test ni arn:aws:iam::123456789012:root se hayan incluido en la instrucción «permitida» de la política de confianza.
  3. Confirme que todas las condiciones de IAM especificadas en esa instrucción «permitida» sean compatibles con la acción de API sts:AssumeRole y que existan coincidencias para ellas.

Siga estos pasos para confirmar las políticas de IAM asociadas a la persona que llama a la API (arn:aws:iam::123456789012:user/test):

  1. Confirme que no se haya incluido arn:aws:iam::123456789012:role/EC2-Acceso Completo en ninguna instrucción «rechazar» con la acción de API sts:AssumeRole.
  2. Si arn:aws:iam::123456789012:root figura en la instrucción «permitida» de la política de confianza, confirme que se haya incluido arn:aws:iam::123456789012:role/EC2-FullAccess en la instrucción «permitida» de las políticas de IAM con la acción de API sts:AssumeRole.
  3. Confirme que todas las condiciones de IAM especificadas en esa instrucción «permitida» sean compatibles con la acción de API sts:AssumeRole y que coincidan.

Mensaje de error de ejemplo C:

Este mensaje de error indica que get-session-token no está soportado en las credenciales temporales. Para obtener más información, consulte Comparación de las operaciones de la API de AWS STS.

Mensaje de error de ejemplo D:

Este mensaje de error regresa un mensaje codificado que puede proporcionar detalles sobre el error de autorización. Para decodificar el mensaje de error y obtener los detalles del error de permiso, consulte DecodeAuthorizationMessage. Tras decodificar el mensaje de error, identifique a la persona que llama a la API y revise los permisos y las condiciones a nivel de recursos.

Para resolver este error, siga estos pasos para revisar los permisos de la política de IAM:

  1. Si el mensaje de error indica que la API se ha denegado explícitamente, elimine las acciones de API ec2:AssociateIamInstanceProfile o iam:PassRole de la instrucción coincidente.
  2. Confirme que ec2:AssociateIamInstanceProfile e iam:PassRole figuren en la instrucción «permitida» con destinos de recursos correctos y admitidos. Por ejemplo, confirme que los destinos de recursos de la acción de API ec2:AssociateIamInstanceProfile sean instancias de EC2 y que los destinos de recursos de iam:PassRole sean roles de IAM.
  3. Si las acciones de API ec2:AssociateIamInstanceProfile e iam:PassRole se encuentran en la misma instrucción «permitida», confirme que las acciones de API ec2:AssociateIamInstanceProfile e iam:PassRole admitan todas las condiciones y que las condiciones coincidan.
  4. Si las acciones de API ec2:AssociateIamInstanceProfile e iam:PassRole API se encuentran en instrucciones «permitida» separadas, confirme que todas las condiciones en cada una de las instrucciones «permitida» sean compatibles con una de las acciones y que las condiciones coincidan.

Para obtener más información, consulte Lógica de evaluación de políticas y Cómo determinar si una solicitud se permite o se niega dentro de una cuenta.


Información relacionada

Solución de problemas de políticas de IAM

¿Por qué recibo un error de «Acceso denegado» o «Información no válida» cuando intento asumir un rol de IAM entre cuentas?

Referencia de los elementos de las políticas JSON de IAM