Acceso a recursos entre cuentas de AWS en Step Functions - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Acceso a recursos entre cuentas de AWS en Step Functions

Con la compatibilidad con acceso entre cuentas en Step Functions, puede compartir recursos configurados en diferentes Cuentas de AWS. En este tutorial, explicamos el proceso de acceso a una función de Lambda entre cuentas definida en una cuenta denominada Producción. Esta función se invoca desde una máquina de estado en una cuenta llamada Desarrollo. En este tutorial, se hace referencia a la cuenta Desarrollo como cuenta de origen y a la cuenta Producción como cuenta de destino que contiene el rol de IAM de destino.

Para empezar, en la definición del estado Task debe especificar el rol de IAM de destino que debe asumir la máquina de estado antes de invocar la función de Lambda entre cuentas. A continuación, modifique la política de confianza en el rol de IAM de destino para permitir que la cuenta de origen asuma el rol de destino temporalmente. Además, para llamar al recurso AWS, defina los permisos adecuados en el rol de IAM de destino. Por último, actualice el rol de ejecución de la cuenta de origen para especificar el permiso necesario para asumir el rol de destino.

Puede configurar la máquina de estado para que asuma un rol de IAM para acceder a los recursos desde varias Cuentas de AWS. No obstante, una máquina de estado solo puede asumir un rol de IAM en un momento dado sobre la base de la definición de estado Task.

nota

Actualmente, la integración del SDK de AWS entre regiones y el acceso a los recursos de AWS entre regiones no están disponibles en Step Functions.

Requisitos previos

  • En este tutorial se utiliza el ejemplo de una función de Lambda para demostrar cómo configurar el acceso entre cuentas. Puede usar cualquier otro recurso de AWS, pero asegúrese de haber configurado el recurso en una cuenta diferente.

    importante

    Los roles de IAM y las políticas basadas en recursos delegan el acceso entre cuentas solo dentro de una única partición. Suponga, por ejemplo, que tiene una cuenta en EE. UU. Oeste (Norte de California) en la partición estándar aws. También tiene una cuenta en China (Pekín) en la partición aws-cn. No puede utilizar una política de Amazon S3 basada en recursos en su cuenta en China (Pekín) para permitir el acceso a los usuarios de su cuenta aws estándar.

  • Anote el Nombre de recurso de Amazon (ARN) del recurso entre cuentas en un archivo de texto. Más adelante en este tutorial, proporcionará este ARN en la definición de estado Task de la máquina de estado. El siguiente es un ejemplo de un ARN de función de Lambda:

    arn:aws:lambda:us-east-2:123456789012:function:functionName
  • Asegúrese de haber creado el rol de IAM de destino que debe asumir la máquina de estado.

Paso 1: actualice la definición del estado de la tarea para especificar el rol de destino

En el estado Task del flujo de trabajo, añada un campo Credentials que contenga la identidad que debe asumir la máquina de estado antes de invocar la función de Lambda entre cuentas.

El siguiente procedimiento demuestra cómo acceder a una función de Lambda entre cuentas llamada Echo. Puede seguir estos pasos para llamar a cualquier recurso de AWS.

  1. Abra la consola de Step Functions y seleccione Crear máquina de estado.

  2. En la página Elegir un método de creación, elija Diseñe su flujo de trabajo de forma visual y mantenga todas las selecciones predeterminadas.

  3. Para abrir Workflow Studio, elija Siguiente.

  4. En la pestaña Acciones, arrastre y suelte un estado Task en el lienzo. Esto invoca la función de Lambda entre cuentas que utiliza este estado Task.

  5. En la pestaña Configuración, haga lo siguiente:

    1. Cambie el nombre del estado a Cross-account call.

    2. En Nombre de la función, elija Introducir nombre de la función y, a continuación, introduzca el ARN de la función de Lambda en el cuadro. Por ejemplo, arn:aws:lambda:us-east-2:111122223333:function:Echo.

    3. En Proporcionar ARN del rol de IAM, especifique el ARN del rol de IAM de destino. Por ejemplo, arn:aws:iam::111122223333:role/LambdaRole.

      sugerencia

      También puede especificar una ruta de referencia a un par clave-valor existente en la entrada JSON del estado que contiene el ARN del rol de IAM. Para ello, elija Obtener ARN del rol de IAM en tiempo de ejecución a partir de la entrada de estado. Para ver un ejemplo de cómo especificar un valor mediante una ruta de referencia, consulte Especificar JSONPath como rol IAM ARN.

  6. Elija Siguiente.

  7. En la página Revisar código generado, elija Siguiente.

  8. En la página Especificar configuración de la máquina de estado, especifique los detalles de la nueva máquina de estado, como el nombre, los permisos y el nivel de registro.

  9. Elija Crear máquina de estado.

  10. Anote el ARN del rol de IAM de la máquina de estado y el ARN de la máquina de estado en un archivo de texto. Deberá incluir estos ARN en la política de confianza de la cuenta de destino.

La definición de estado Task debería ser similar a la definición siguiente.

{ "StartAt": "Cross-account call", "States": { "Cross-account call": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole" }, "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo", }, "End": true } } }

Paso 2: actualice la política de confianza del rol de destino

El rol de IAM debe existir en la cuenta de destino; debe modificar la política de confianza para permitir que la cuenta de origen asuma este rol temporalmente. Además, puede controlar quién puede asumir el rol de IAM de destino.

Después de crear la relación de confianza, un usuario de la cuenta de origen puede utilizar la operación de la API AssumeRole de AWS Security Token Service (AWS STS). Esta operación proporciona credenciales de seguridad temporales que permiten el acceso a los recursos de AWS de una cuenta de destino.

  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación de la consola, elija Funciones y, a continuación, utilice el cuadro de búsqueda para buscar el rol de IAM de destino. Por ejemplo, LambdaRole.

  3. Seleccione la pestaña Relaciones de confianza.

  4. Elija Editar política de confianza y pegue la siguiente política de confianza. No olvide reemplazar el número de Cuenta de AWS y el ARN del rol de IAM. El campo sts:ExternalId controla, además, quién puede asumir el rol. El nombre de la máquina de estados debe incluir solo caracteres compatibles con la API AssumeRole de AWS Security Token Service. Para obtener más información, consulte AssumeRole en la Referencia de la API de AWS Security Token Service.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:role/ExecutionRole" // The source account's state machine execution role ARN }, "Condition": { // Control which account and state machine can assume the target IAM role "StringEquals": { "sts:ExternalId": "arn:aws:states:us-east-1:123456789012:stateMachine:testCrossAccount" //// ARN of the state machine that will assume the role. } } } ] }
  5. Mantenga esta ventana abierta y continúe con el siguiente paso para realizar más acciones.

Paso 3: agregue el permiso necesario en el rol de destino

Los permisos de las políticas de IAM determinan si una solicitud específica se permite o se deniega. El rol de IAM de destino debe tener el permiso correcto para invocar la función de Lambda.

  1. Elija la pestaña Permisos.

  2. Seleccione Agregar permisos y, a continuación, Crear política insertada.

  3. Elija la pestaña JSON y reemplace el contenido existente por el permiso siguiente. No olvide de reemplazar el ARN de la función de Lambda.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:Echo" // The cross-account AWS resource being accessed } ] }
  4. Elija Revisar política.

  5. En la página Revisar política, escriba un nombre y luego elija Crear política.

Paso 4: agregue un permiso en el rol de ejecución para asumir el rol de destino

Step Functions no genera automáticamente la política AssumeRole para todas las integraciones de servicios entre cuentas. Debe añadir el permiso necesario al rol de ejecución de la máquina de estado para que pueda asumir un rol de IAM de destino en una o más Cuentas de AWS.

  1. Abra el rol de ejecución de la máquina de estado en la consola de IAM en https://console.aws.amazon.com/iam/. Para ello:

    1. Abra la máquina de estado que creó en el Paso 1 en la cuenta de origen.

    2. En la página Detalle de la máquina de estado, elija ARN del rol de IAM.

  2. En la pestaña Permisos, elija Agregar permisos y luego Crear política insertada.

  3. Elija la pestaña JSON y reemplace el contenido existente por el permiso siguiente. No olvide de reemplazar el ARN de la función de Lambda.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/LambdaRole" // The target role to be assumed } ] }
  4. Elija Revisar política.

  5. En la página Revisar política, escriba un nombre y luego elija Crear política.