¿Cómo especificar un rol de IAM para una instancia de Amazon EC2 que se inicia a través de la CLI de AWS?

20

Estoy usando el comando "aws ec2 run-Instances" (de la interfaz de línea de comandos de AWS (CLI) ) para iniciar una instancia de Amazon EC2 . Quiero establecer un rol de IAM para la instancia EC2 que estoy iniciando. El rol de IAM está configurado y puedo usarlo con éxito al iniciar una instancia desde la interfaz de usuario web de AWS. Pero cuando trato de hacer esto usando ese comando, y la opción "--iam-instance-profile", falló. Hacer "ayuda de instancias de ejecución aws ec2" muestra los subcampos Arn = y Name = para el valor. Cuando intento buscar el Arn usando "aws iam list-instance-profiles" me da este mensaje de error:

Se produjo un error del cliente (AccessDenied): Usuario: arn: aws: sts :: xxxxxxxxxxxx: asumido-rol / shell / i-15c2766d no está autorizado para realizar: iam: ListInstanceProfiles en el recurso: arn: aws: iam :: xxxxxxxxxxxx: instancia -perfil/

(donde xxxxxxxxxxxx es mi número de cuenta de 12 dígitos de AWS)

Busqué la cadena Arn a través de la interfaz de usuario web y la usé a través de "--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell" en el comando run-Instances, y eso falló con :

Se produjo un error del cliente (Operación no autorizada): no está autorizado para realizar esta operación.

Si dejo por completo la opción "--iam-instance-profile", la instancia se iniciará pero no tendrá la configuración de rol de IAM que necesito. Entonces, el permiso parece tener algo que ver con usar "--iam-instance-profile" o acceder a los datos de IAM. Repetí varias veces en caso de fallas de AWS (a veces ocurren) y no hubo éxito.

Sospeché que quizás haya una restricción de que una instancia con un rol de IAM no pueda iniciar una instancia con un rol de IAM más potente. Pero en este caso, la instancia en la que estoy haciendo el comando tiene el mismo rol de IAM que estoy tratando de usar. llamado "shell" (aunque también intenté usar otro, no tuve suerte).

  • ¿La configuración de un rol de IAM ni siquiera está permitida desde una instancia (a través de sus credenciales de rol de IAM)?

  • ¿Se necesita un permiso de rol de IAM más alto para usar roles de IAM que el que se necesita para lanzar una instancia simple?

  • ¿Es "--iam-instance-profile" la forma adecuada de especificar un rol de IAM?

  • ¿Necesito usar un subconjunto de la cadena Arn o formatearlo de alguna otra manera?

  • ¿Es posible configurar un rol de IAM que pueda hacer cualquier acceso al rol de IAM (tal vez un "Super Root IAM" ... inventando este nombre)?

Para su información, todo implica que Linux se ejecute en las instancias. Además, estoy ejecutando todo esto desde una instancia porque no pude instalar estas herramientas en mi escritorio. Eso y no quiero poner mis credenciales de usuario de IAM en ningún almacenamiento de AWS como lo aconseja AWS aquí .

después de contestado:

No mencioné el permiso de la instancia de inicio de "PowerUserAccess" (vs. "AdministratorAccess") porque no me di cuenta de que se necesitaba acceso adicional en el momento en que se hizo la pregunta. Supuse que el rol de IAM era "información" adjunta al lanzamiento. Pero realmente es más que eso. Es una concesión de permiso.

Skaperen
fuente

Respuestas:

23

Actualizar

Mike Pope ha publicado un buen artículo sobre Conceder permiso para lanzar instancias EC2 con roles IAM (Permiso PassRole) en el Blog de seguridad de AWS , que explica el tema desde el punto de vista de AWS.


Respuesta inicial

La respuesta de Skaperen es parcialmente correcta (+1), pero ligeramente imprecisa / engañosa de la siguiente manera (la explicación parece demasiado compleja para un comentario, de ahí esta respuesta por separado):

Para lanzar una instancia EC2 con un rol de IAM se requiere acceso administrativo a la instalación de IAM.

Esto es correcto como tal y apunta hacia el problema subyacente, pero los permisos administrativos requeridos son bastante limitados, por lo que la siguiente conclusión ...

Debido a que los roles de IAM otorgan permisos, claramente hay un problema de seguridad que debe abordarse. No querrá que los roles de IAM sean un medio para permitir la escalada de permisos.

... es un poco engañoso, en la medida en que el posible problema de seguridad se puede abordar adecuadamente. El tema se trata en Conceder a las aplicaciones que se ejecutan en instancias de Amazon EC2 acceso a recursos de AWS :

Puede usar roles de IAM para administrar credenciales para aplicaciones que se ejecutan en instancias de Amazon EC2. Cuando usa roles, no tiene que distribuir las credenciales de AWS a las instancias de Amazon EC2. En cambio, puede crear un rol con los permisos que necesitarán las aplicaciones cuando se ejecuten en Amazon EC2 y realizar llamadas a otros recursos de AWS. Cuando los desarrolladores inician una instancia de Amazon EC2, pueden especificar el rol que creó para asociar con la instancia. Las aplicaciones que se ejecutan en la instancia pueden usar las credenciales de rol para firmar solicitudes.

Ahora, dentro del caso de uso en cuestión, los desarrolladores mencionados [que] lanzan una instancia de Amazon EC2 son, de hecho, instancias de EC2, lo que parece generar el problema de seguridad de la captura 22 que Skaperen describió. Sin embargo, ese no es realmente el caso, como lo ilustra la política de muestra en la sección Permisos necesarios para usar roles con Amazon EC2 :

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:ListInstanceProfiles",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"ec2:*",
      "Resource":"*"
    }]
}

De iam:PassRolehecho, es el único permiso de IAM requerido, y aunque técnicamente es de naturaleza administrativa, esto no es de gran alcance; por supuesto, la política de muestra anterior aún permitiría escalar los permisos a través de la lista y, a su vez, pasar cualquier función disponible, pero esto puede evitarse especificando solo aquellos roles que se desean / son seguros de pasar para el caso de uso en cuestión; esto se describe en la sección Restringir qué roles se pueden pasar a las instancias de Amazon EC2 (usando PassRole) :

Puede usar el permiso PassRole para evitar que los usuarios pasen un rol a Amazon EC2 que tiene más permisos de los que ya se le han otorgado, y luego ejecutar aplicaciones con los privilegios elevados para ese rol. En la política de roles, permita la acción PassRole y especifique un recurso (como arn: aws: iam :: 111122223333: role / ec2Roles / *) para indicar que solo se puede pasar un rol específico o un conjunto de roles a una instancia de Amazon EC2 .

La política de muestra respectiva ilustra exactamente el caso de uso en cuestión, es decir, otorga permiso para iniciar una instancia con un rol utilizando la API Amazon EC2 :

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect":"Allow",
      "Action":"ec2:RunInstances",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"arn:aws:iam::123456789012:role/Get-pics"
    }]
}
Steffen Opel
fuente
Gracias por la información sobre iam: PassRole. Es más detalle de lo que había aprendido antes, muestra mucho más de lo que se puede hacer configurando los permisos de esta manera.
Skaperen
1

Para lanzar una instancia EC2 con un rol de IAM se requiere acceso administrativo a la instalación de IAM. Esto se aplica incluso si la nueva instancia debe tener exactamente el mismo rol que la instancia que realiza el lanzamiento. La instancia desde la que estaba iniciando tenía el permiso "PowerUserAccess", que permitía iniciar una instancia, pero no el acceso a roles de IAM. Una vez que avancé el permiso en la instancia de lanzamiento a "AdministratorAccess", funcionó.

Debido a que los roles de IAM otorgan permisos, claramente hay un problema de seguridad que debe abordarse. No querrá que los roles de IAM sean un medio para permitir la escalada de permisos. Pero esto también significa que, para otorgar cualquier rol de IAM, la instancia de inicio debe tener "Acceso de administrador" o estar utilizando claves de acceso / secreto de usuario (con dicho permiso) desde dentro de la instancia (no recomendado), lo que permitiría otorgar cualquier rol de IAM.

Sería útil poder iniciar una instancia con el mismo permiso (mismo rol de IAM) que la instancia que realiza el inicio, pero EC2 o IAM no tienen este nivel de granularidad o no tienen los medios para verificarlo de manera segura .

Skaperen
fuente
1
Analizó / describió el problema subyacente correctamente (+1), pero sus conclusiones son ligeramente imprecisas / engañosas: he agregado una respuesta separada para explicar adecuadamente cómo IAM aborda el posible problema de seguridad.
Steffen Opel