Cómo probar las credenciales para las herramientas de línea de comandos de AWS

149

¿Hay un comando / subcomando que se pueda pasar a la awsutilidad que pueda 1) verificar que las credenciales en el ~/.aws/credentialsarchivo sean válidas y 2) dar alguna indicación a qué usuario pertenecen las credenciales? Estoy buscando algo genérico que no haga suposiciones acerca de que el usuario tenga permisos para IAM o cualquier servicio específico.

El caso de uso para esto es una verificación de la cordura en el tiempo de despliegue para asegurarse de que las credenciales sean buenas. Idealmente, habría alguna forma de verificar el valor de retorno y cancelar la implementación si hay credenciales no válidas.

smitelli
fuente
3
¿Puedo sugerir que esto sería mejor preguntar en serverfault.com ? Stack Overflow es específicamente para preguntas de programación.
Tripp Kinetics
44
@TrippKinetics Sí, estaba en la cerca sobre dónde preguntar. En mi opinión, el meollo de la pregunta era más sobre consultar mediante programación una API en lugar de administrar servidores per se.
smitelli

Respuestas:

220

Use GetCallerIdentity :
aws sts get-caller-identity

A diferencia de otras llamadas API / CLI, siempre funcionará, independientemente de sus permisos de IAM.

Obtendrá salida en el siguiente formato:

{
    "Account": "123456789012", 
    "UserId": "AR#####:#####", 
    "Arn": "arn:aws:sts::123456789012:assumed-role/role-name/role-session-name"
}

El formato ARN exacto dependerá del tipo de credenciales, pero a menudo incluye el nombre del usuario (humano).

Utiliza los códigos de error estándar de AWS CLI que dan 0 en caso de éxito y 255 si no tiene credenciales.

Jason
fuente
55
Esta es una gran respuesta, pero si está utilizando MFA, tenga cuidado, es más complicado. Con MFA, debe usar credenciales de trabajo (i) combinadas con un token MFA para obtener diferentes credenciales temporales de trabajo (ii) y con esta solución, obtiene los mismos resultados para las credenciales (i) o (ii).
Mark Chackerian
3
@ MarkChackerian Ese no es siempre el caso. He creado un usuario cuyo MFA se aplica mediante la política de Trek10 . Con la sesión AMF ficha no activa, si ejecuto aws iam get-user --profile test-mfa, me sale: An error occurred (AccessDenied) when calling the GetUser operation. Sin embargo, las aws sts get-caller-identity --profile test-mfasalidas (de manera similar, sin token de sesión MFA activo) son la test-mfaCuenta, el ARN y el ID de usuario.
Ville
54

Hay una manera directa: aws iam get-userdiría los detalles sobre quién es usted (el usuario actual de IAM), siempre que el usuario tenga iamprivilegios.

Hay un par de llamadas CLI que admiten --dry-runmarcas como la aws ec2 run-instancesque le indica si tiene la configuración / crédito necesaria para realizar la operación.

También se --auth-dry-runcomprueba si tiene los permisos necesarios para el comando, sin ejecutar realmente el comando. Si tiene los permisos requeridos, el comando devuelve DryRunOperation; de lo contrario, devuelve una operación no autorizada. [De la documentación de AWS - Opciones comunes ]

Podrá enumerar las claves de acceso de IAM desde la consola de administración que puede verificar para ver quién ha sido asignado a cada clave.

La mejor manera de comprender qué usuario / rol tiene qué privilegios es utilizar IAM Policy Simulator .

Naveen Vijay
fuente
16
Irónicamente, el usuario que ejecuté la prueba recibió un AccessDeniederror, que incluía la arn:aws:iam::123...890:user/somebodycadena completa como parte de la salida del error.
smitelli
77
Es completamente posible que el usuario no tenga permiso para 'obtener usuario'. : - /
Jason
Sí, tengo esta situación. En la consola de AWS junto a User ARN, muestra N / A, y el cursor emergente explica que "User arn: aws: iam: ...: user / steve no está autorizado para realizar iam: GetUser en el recurso: user steve"
Steve Bennett