¿Cómo puedo obtener datos para ayudar a solucionar errores de acceso de permiso denegado o no autorizado de IAM?
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:
- Políticas de control de servicios (SCP)
- Políticas basadas en recursos
- Límites de permisos para las entidades de IAM
- Políticas de sesión
- Políticas basadas en identidad
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
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año