¿Cómo puedo obtener datos para ayudar a solucionar errores de acceso de permiso denegado o no autorizado de IAM?

6 minutos de lectura
0

Estoy intentando acceder a un recurso de AWS y he recibido un error «access denied» o «unauthorized». ¿Cómo puedo obtener datos para ayudar a solucionar estos errores de las llamadas a la API de AWS Identity and Access Management (IAM)?

Breve descripción

Puedes utilizar las consultas de Amazon Athena o la interfaz de la línea de comandos de AWS (AWS CLI) para obtener registros de errores de las llamadas a la API de IAM. A continuación, sigue las instrucciones para solucionar los errores de acceso denegado o de operación no autorizada con una política de IAM.

Resolución

Nota: Si recibes errores al ejecutar los comandos de la AWS CLI, asegúrate de utilizar la versión más reciente de la AWS CLI.

Opción 1: Utiliza las consultas de Athena para solucionar errores en las llamadas a la API de IAM buscando en los registros de CloudTrail

Nota: Antes de empezar, debe tener una ruta para iniciar sesión en un bucket de Amazon Simple Storage Service (Amazon S3). Esto se debe a que Athena utiliza eventos registrados en los archivos de registro de AWS CloudTrail que se entregan a un bucket de Amazon S3 para esa ruta.

1.    Sigue los pasos de la sección Creación de una tabla de Athena en ¿Cómo puedo crear tablas automáticamente en Athena para buscar a través de los registros de AWS CloudTrail?

Nota: Las tablas de Athena que se crean automáticamente se encuentran en la misma región de AWS que su bucket de Amazon S3.

2.    Abre la consola de Athena y, a continuación, elige el signo «+» para crear una nueva consulta.

3.    Introduce la siguiente consulta de ejemplo y, a continuación, selecciona Ejecutar.

En esta consulta de ejemplo, el formato de hora utiliza el formato básico ISO 8601 con la variable Z para UTC.

Nota: Sustituye your-arn por los nombres de recursos de Amazon (ARN) de IAM para sus recursos y your-table por el nombre de tu tabla.

SELECT from_iso8601_timestamp(eventTime) AS "Time", useridentity.arn AS "Identity ARN", eventID AS "Event ID",
         eventsource AS "Service", eventname AS "Action", errorCode AS "Error", errorMessage AS "Message"
FROM your-table
WHERE from_iso8601_timestamp(eventtime) >= from_iso8601_timestamp('2019-10-29T06:40:00Z')
        AND from_iso8601_timestamp(eventtime) < from_iso8601_timestamp('2019-10-29T06:55:00Z')
        AND userIdentity.arn = 'your-arn'
        AND eventType = 'AwsApiCall'
        AND errorCode is not null
        AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')
ORDER BY eventTime desc

4.    El resultado de esta tabla de ejemplo muestra los errores de permisos del ARN de identidad:

| Time                        | Event ID                             | Service                  | Action       | Error        | Message                                                                                                              |
|-----------------------------|--------------------------------------|--------------------------|--------------|--------------|----------------------------------------------------------------------------------------------------------------------|
| 2019-10-29 06:52:45.000 UTC | 0406f0c1-47a8-4f71-8a94-18267b84042a | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy |
| 2019-10-29 06:41:48.000 UTC | 14e5e77c-f682-45e1-8c88-12d15af293dd | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action |

Nota: Los resultados de los eventos de CloudTrail pueden tardar hasta 15 minutos.

5.    Si quieres, puedes obtener los errores de todos los usuarios eliminando esta línea de la consulta de ejemplo:

AND userIdentity.arn = 'your-arn'

6.    Si quieres, puedes obtener todos los errores de un período de tiempo seleccionado eliminando esta línea de la consulta de ejemplo:

AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')

Opción 2: Utiliza la AWS CLI para solucionar errores en las llamadas de permiso a la API de IAM

Nota: Este script de la AWS CLI requiere el procesador JSON de la línea de comandos jq. Para ver el tutorial y las instrucciones de descarga, consulta Formato de salida JSON. Para las distribuciones que usan el paquete yum, ejecuta el siguiente comando:

$ sudo yum install jq

1.    Ejecuta el siguiente comando de la AWS CLI:

Nota: Sustituye your-arn por los ARN de IAM para sus recursos.

( echo "Time,Identity ARN,Event ID,Service,Action,Error,Message";
  aws cloudtrail lookup-events --start-time "2019-10-29T06:40:00Z" --end-time "2019-10-29T06:55:00Z" --query "Events[*].CloudTrailEvent" --output text \
    | jq -r ". | select(.userIdentity.arn == \"your-arn\" and .eventType == \"AwsApiCall\" and .errorCode != null
    and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\"))))
    | [.eventTime, .userIdentity.arn, .eventID, .eventSource, .eventName, .errorCode, .errorMessage] | @csv"
) | column -t -s'",'

Nota: La tasa de solicitudes de búsqueda a CloudTrail está limitada a dos solicitudes por segundo, por cuenta y por región. Si se supera este límite, se produce un error de limitación.

2.    El resultado de esta tabla de ejemplo muestra los errores de permisos del ARN de identidad del período de tiempo especificado.

Nota: Puedes buscar eventos ocurridos en una región en los últimos 90 días.

Time                  Event ID                              Service                   Action        Error         Message
2019-10-29T06:52:45Z  0406f0c1-47a8-4f71-8a94-18267b84042a  cloudtrail.amazonaws.com  LookupEvents  AccessDenied  User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy
2019-10-29T06:41:48Z  14e5e77c-f682-45e1-8c88-12d15af293dd  cloudtrail.amazonaws.com  LookupEvents  AccessDenied  User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action

3.    (Opcional) Puedes obtener los errores de todos los usuarios eliminando esta línea:

.userIdentity.arn == \"your-arn\" and

4.    (Opcional) Puedes obtener todos los errores del período de tiempo seleccionado eliminando esta línea:

and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))

Solucionar errores de operación no autorizada

Athena y los resultados de ejemplo de la AWS CLI anteriores son pertinentes para las llamadas a la API LookupEvents de CloudTrail.

Las políticas de IAM que deniegan el acceso porque contienen una instrucción de denegación incluyen una frase específica en el mensaje de error para las denegaciones explícitas e implícitas. Los errores de denegación explícita de IAM contienen la frase «with an explicit deny in a <type> policy». Los errores de denegación implícita de IAM contienen la frase «because no <type> policy allows the <action> action».

El resultado cloudtrail:LookupEvents with an explicit deny indica que una política de IAM asociada es incorrecta.

Puede producirse una denegación explícita desde cualquiera de estos tipos de política. Por ejemplo, las políticas basadas en identidad, las políticas basadas en recursos, los límites de permisos, las SCP de las organizaciones y las políticas de sesión. Las instrucciones de denegación explícita siempre anulan las instrucciones de permiso. La denegación explícita existe en la política basada en identidad de los usuarios de IAM.

El resultado cloudtrail:LookupEvents because no identity-based policy allows indica que la política basada en identidad no permite esta acción de la API, lo que resulta en una denegación implícita. La política basada en identidad carece de una instrucción de permiso explícita para la acción de la API cloudtrail:LookupEvents.

Los tipos de políticas que AWS evalúa para establecer el acceso son:

Para obtener información adicional sobre cómo se evalúan y administran las políticas de IAM, consulta Policy evaluation logic y Managing IAM policies.


Información relacionada

Políticas y permisos en IAM

Solución de problemas de políticas de IAM

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años