

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 AWS recursos multicuenta en Step Functions
<a name="tutorial-access-cross-acct-resources"></a>

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 AWS recurso, defina los permisos adecuados en la función 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**  
La integración AWS del SDK entre regiones y el acceso a los AWS recursos entre regiones no están disponibles en Step Functions.

## Requisitos previos
<a name="tutorial-access-cross-acct-resources-prereq"></a>
+ En este tutorial se utiliza el ejemplo de una función de Lambda para demostrar cómo configurar el acceso entre cuentas. Puedes usar cualquier otro AWS recurso, pero asegúrate 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:{{account-id}}: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
<a name="tutorial-access-cross-acct-resources-update-task-def"></a>

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`. Puedes llamar a cualquier AWS recurso siguiendo estos pasos.

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) y seleccione **Crear máquina de estado**.

1. 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.

1. Para abrir Workflow Studio, elija **Siguiente**.

1. 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`.

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

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

   1. 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}}`.

   1. 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](amazon-states-language-paths.md#amazon-states-language-reference-paths) 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 un ARN de rol de IAM](state-task.md#example-credentials-specify-dynamic-jsonpath).

1. Elija **Siguiente**.

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

1. 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.

1. Elija **Crear máquina de estado**.

1. 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ás proporcionarlos ARNs 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
<a name="tutorial-access-cross-acct-resources-update-target-trust-policy"></a>

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.

Tras crear la relación de confianza, un usuario de la cuenta de origen puede utilizar la operación de la [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)API AWS Security Token Service (AWS STS). Esta operación proporciona credenciales de seguridad temporales que permiten el acceso a AWS los recursos de una cuenta de destino.

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

1. 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}}`.

1. Seleccione la pestaña **Relaciones de confianza**.

1. Elija **Editar política de confianza** y pegue la siguiente política de confianza. Asegúrese de sustituir el Cuenta de AWS número 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 los caracteres compatibles con la AWS Security Token Service `AssumeRole` API. Para obtener más información, consulta [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) en la *AWS Security Token Service Referencia de la API de *.

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "sts:AssumeRole",
         "Principal": {
           "AWS": "arn:aws:iam::{{account-id}}: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:{{region}}:{{account-id}}:stateMachine:testCrossAccount"   //// ARN of the state machine that will assume the role.
           }
         }
       }
     ]
   }
   ```

1. 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
<a name="tutorial-access-cross-acct-resources-add-permissions"></a>

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**.

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

1. 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
       }
     ]
   }
   ```

1. Elija **Revisar política**.

1. 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
<a name="tutorial-access-cross-acct-resources-update-exec-role"></a>

Step Functions no genera automáticamente la [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)política para todas las integraciones de servicios multicuenta. 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. Abre la función de ejecución de tu máquina de estados en la consola de IAM en. [https://console.aws.amazon.com/iam/](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](#tutorial-access-cross-acct-resources-update-task-def).

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

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

1. 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
       }
     ]
   }
   ```

1. Elija **Revisar política**.

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