Pregunta: Necesito cambiar de rol a través de un script. ¿Es suficiente el permiso de sts: AssumeRole para eso?

Elaboración: inicio sesión en mi cuenta de AWS habilitada para MFA a través de la consola. Esta función en la que inicio sesión de forma predeterminada no tiene ningún permiso para ejecutar nada. Para hacer girar un EC2, necesito cambiar de rol. Voy a 'Cambiar rol' y, usando una cuenta y un rol, cambio a un rol diferente que tiene permiso para crear una instancia EC2. Quiero lograr lo mismo a través de scripts de Ansible.

Un fragmento de mi script yml se parece a lo siguiente:

    tasks:
  - sts_assume_role:
      role_arn: "{{role_arn}}"
      role_session_name: "{{role_session_name}}"
      region: "{{app_region}}"
      aws_access_key: "{{ aws_access_key_id }}"
      aws_secret_key: "{{ aws_secret_access_key }}"
    register: assumed_role
  - debug:
      msg: "aws_access_key: {{ assumed_role.sts_creds.access_key }} ,
            aws_secret_key: {{ assumed_role.sts_creds.secret_key }},
            security_token: {{ assumed_role.sts_creds.session_token }}"

Sin embargo, esto da como resultado un error similar a:

Se produjo un error de cliente (AccessDenied) al llamar a la operación AssumeRole: User: arn: aws: iam ::: user / no está autorizado para realizar: sts: AssumeRole en resource: arn: aws: iam ::: role /

Este es el mismo error que obtengo de aws cli también.

Si bien entiendo que no tengo el permiso de sts: AssumeRole para lograr esto, lo he planteado al equipo interno de mi empresa. Sin embargo, por alguna razón desconocida, les está tomando demasiado tiempo incluso con múltiples seguimientos.

Todo lo que quiero saber es que obtener este permiso sería suficiente, ¿o necesitaría más privilegios? Por supuesto, esto supone que sts: AssumeRole es el privilegio correcto para esto. Además, ¿necesito MFA en algún lugar de esto cuando lo hago a través de un script? Utilizo MFA manualmente solo la primera vez que inicio sesión en mi cuenta predeterminada desde la consola.

Gracias de antemano por la ayuda y mis disculpas si esto suena demasiado básico, pero solo estoy tratando de poner las cosas en marcha bajo una severa crisis de tiempo.

2
Pankaj 15 feb. 2018 a las 07:42

2 respuestas

La mejor respuesta

Así que supongo que el problema no fue con los permisos, sino porque hubo un problema con boto2 (https://github.com/ansible/ansible-modules-extras/issues/2532).

Tuve que agregar parámetros adicionales para sts_assume_role:

 tasks:
  - sts_assume_role:
      role_arn: "{{role_arn}}"
      mfa_serial_number: "{{mfa_serial}}"
      mfa_token: "{{ lookup('env', 'MFA') }}"
      role_session_name: "{{role_session_name}}"
      region: "{{app_region}}"
      aws_access_key: "{{ aws_access_key_id }}"
      aws_secret_key: "{{ aws_secret_access_key }}"

@Sudo tenía razón en el sentido de que se hizo cumplir la política de MFA, pero el complemento boto2 roto fue la causa principal del dolor, ya que incluso después de ingresar los detalles de MFA, CLI todavía no funciona para mí (no he intentado arreglar ya que mi objetivo final era cambiar de rol a través de ansible).

Un código de Python que obtuve de aws docs fue la prueba de que los permisos no eran el problema, pero algún complemento estaba roto, lo que llevó a este hallazgo. ( https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_sample-code.html )

0
Pankaj 22 feb. 2018 a las 07:44

Sin la política de confianza del rol o la política de permisos del usuario de IAM, solo puedo adivinar si el usuario de IAM tiene un hacer cumplir la política de MFA adjunta, es decir, negar cualquier cosa a menos que tenga MFA o el rol que está tratando de asumir necesita para usar MFA.

Por lo tanto, puede usar GetSessionToken pasando el token de MFA para obtener credenciales temporales y hacer AssumeRole API o pasar el token MFA mientras está llamando a la API AssumeRole.

3
sudo 15 feb. 2018 a las 07:54