

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Step Functions에서 교차 계정 AWS 리소스 액세스
크로스 계정 리소스에 액세스

Step Functions의 크로스 계정 액세스 지원을 통해 다양한 AWS 계정에서 구성된 리소스를 공유할 수 있습니다. 이 자습서에서는 **Production**이라는 계정에 정의된 크로스 계정 Lambda 함수에 액세스하는 프로세스를 안내합니다. 이 함수는 **Development**라는 계정의 상태 머신에서 간접적으로 호출됩니다. 이 자습서에서는 **Development** 계정을 *소스 계정*이라고 하고 **Production** 계정을 대상 IAM 역할이 포함된 *대상 계정*이라고 합니다.

먼저 `Task` 상태 정의에서 크로스 계정 Lambda 함수를 간접적으로 호출하기 전에 상태 머신에서 위임해야 하는 대상 IAM 역할을 지정합니다. 그런 다음, 소스 계정에서 대상 역할을 일시적으로 위임할 수 있도록 대상 IAM 역할의 신뢰 정책을 수정합니다. 또한 AWS 리소스를 호출하려면 대상 IAM 역할에서 적절한 권한을 정의합니다. 마지막으로, 소스 계정 실행 역할을 업데이트하여 대상 역할을 위임하는 데 필요한 권한을 지정합니다.

여러 AWS 계정의 리소스에 액세스하기 위해 IAM 역할을 위임하도록 상태 머신을 구성할 수 있습니다. 하지만 상태 머신은 `Task` 상태 정의에 따라 한 번에 IAM 역할 하나만 위임할 수 있습니다.

**참고**  
리전 간 AWS SDK 통합 및 리전 간 AWS 리소스 액세스는 Step Functions에서 사용할 수 없습니다.

## 사전 조건

+ 이 자습서에서는 Lambda 함수의 예제를 사용하여 크로스 계정 액세스를 설정하는 방법을 보여줍니다. 다른 AWS 리소스를 사용할 수 있지만 다른 계정에서 리소스를 구성했는지 확인합니다.
**중요**  
IAM 역할 및 리소스 기반 정책은 단일 파티션 내에서만 계정 간에 액세스 권한을 위임합니다. 예를 들어 표준 `aws` 파티션의 미국 서부(캘리포니아 북부)에 계정이 있다고 가정합니다. `aws-cn` 파티션의 중국(베이징)에도 계정이 있습니다. 중국(베이징)의 계정에서 Amazon S3 리소스 기반 정책을 사용하여 표준 `aws` 계정의 사용자에 대한 액세스를 허용할 수 없습니다.
+ 텍스트 파일에 크로스 계정 리소스의 Amazon 리소스 이름(ARN)을 기록합니다. 이 자습서의 후반부에서 상태 머신의 `Task` 상태 정의에 이 ARN을 제공합니다. 다음은 Lambda 함수 ARN의 예제입니다.

  ```
  arn:aws:lambda:us-east-2:account-id:function:functionName
  ```
+ 상태 머신에서 위임해야 하는 대상 IAM 역할을 만들었는지 확인합니다.

## 1단계: Task 상태 정의를 업데이트하여 대상 역할 지정


워크플로의 `Task` 상태에서 크로스 계정 Lambda 함수를 간접적으로 호출하기 전에 상태 머신에서 위임해야 하는 ID가 포함된 `Credentials` 필드를 추가합니다.

다음 절차에서는 `Echo`라는 크로스 계정 Lambda 함수에 액세스하는 방법을 보여줍니다. 다음 단계에 따라 모든 AWS 리소스를 호출할 수 있습니다.

1. [Step Functions 콘솔](https://console.aws.amazon.com/states/home?region=us-east-1#/)을 열고 **상태 머신 생성**을 선택합니다.

1. **작성 방법 선택** 페이지에서 **시각적으로 워크플로 설계**를 선택하고 기본 선택 사항을 모두 유지합니다.

1. Workflow Studio를 열려면 **다음**을 선택합니다.

1. **작업** 탭에서 `Task` 상태를 끌어 캔버스에 놓습니다. 그러면 이 `Task` 상태를 사용하는 크로스 계정 Lambda 함수가 간접적으로 호출됩니다.

1. **구성** 탭에서 다음을 수행합니다.

   1. 상태 이름을 **Cross-account call**로 변경합니다.

   1. **함수 이름**에 **함수 이름 입력**을 선택한 다음 상자에 Lambda 함수 ARN을 입력합니다. 예를 들어 `arn:aws:lambda:us-east-2:111122223333:function:Echo`입니다.

   1. **IAM 역할 ARN 제공**에 대상 IAM 역할 ARN을 지정합니다. 예를 들어 `arn:aws:iam::111122223333:role/LambdaRole`입니다.
**작은 정보**  
또는 IAM 역할 ARN이 포함된 상태의 JSON 입력에 기존 키-값 페어에 대한 [참조 경로](amazon-states-language-paths.md#amazon-states-language-reference-paths)를 지정할 수도 있습니다. 이렇게 하려면 **상태 입력에서 런타임 시 IAM 역할 ARN 가져오기**를 선택합니다. 참조 경로를 사용하여 값을 지정하는 예제는 [JSONPath를 IAM 역할 ARN으로 지정](state-task.md#example-credentials-specify-dynamic-jsonpath) 섹션을 참조하세요.

1. **다음**을 선택합니다.

1. **생성된 코드 검토** 페이지에서 **다음**을 선택합니다.

1. **상태 머신 설정 지정** 페이지에서 이름, 권한 및 로깅 수준과 같은 새 상태 머신에 대한 세부 정보를 지정합니다.

1. **상태 머신 생성**을 선택합니다.

1. 상태 머신의 IAM 역할 ARN과 상태 머신 ARN을 텍스트 파일에 기록해 둡니다. 대상 계정의 신뢰 정책에 이러한 ARN을 제공해야 합니다.

이제 `Task` 상태 정의가 다음 정의와 비슷하게 표시되어야 합니다.

```
{
  "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
    }
  }
}
```

## 2단계: 대상 역할의 신뢰 정책 업데이트


IAM 역할은 대상 계정에 있어야 하며 원본 계정이 이 역할을 일시적으로 위임할 수 있도록 신뢰 정책을 수정해야 합니다. 또한 대상 IAM 역할을 위임할 수 있는 사용자를 제어할 수 있습니다.

신뢰 관계를 생성한 후 소스 계정의 사용자는 AWS Security Token Service (AWS STS) [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 작업을 사용할 수 있습니다. 이 작업은 대상 계정의 AWS 리소스에 액세스할 수 있는 임시 보안 자격 증명을 제공합니다.

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 콘솔의 탐색 창에서 **역할**을 선택한 다음 검색 상자를 사용하여 대상 IAM 역할을 검색합니다. 예를 들어 `LambdaRole`입니다.

1. **신뢰 관계** 탭을 선택합니다.

1. **신뢰 정책 편집**을 선택하고 다음 신뢰 정책을 붙여넣습니다. AWS 계정 번호와 IAM 역할 ARN을 바꿔야 합니다. `sts:ExternalId` 필드는 역할을 위임할 수 있는 사용자를 추가로 제어합니다. 상태 시스템의 이름에는 `AssumeRole` API가 AWS Security Token Service 지원하는 문자만 포함되어야 합니다. 자세한 내용은 *AWS Security Token Service API 참조*의 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)을 참조하세요.

   ```
   {
     "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. 이 창을 열어 두고 다음 단계로 진행하여 추가 작업을 수행합니다.

## 3단계: 대상 역할에 필요한 권한 추가


IAM 정책에서 권한은 특정 요청의 허용 또는 거부 여부를 결정합니다. 대상 IAM 역할에는 Lambda 함수를 간접적으로 호출할 수 있는 올바른 권한이 있어야 합니다.

1. **권한** 탭을 선택합니다.

1. **권한 추가**를 선택하고 **인라인 정책 생성**을 선택합니다.

1. **JSON** 탭을 선택하고 기존 콘텐츠를 다음 권한으로 바꿉니다. Lambda 함수 ARN을 교체해야 합니다.

   ```
   {
     "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. **정책 검토**를 선택합니다.

1. **정책 검토** 페이지에 권한 이름을 입력한 다음 **정책 생성**을 선택합니다.

## 4단계: 대상 역할을 위임할 수 있는 권한을 실행 역할에 추가


Step Functions는 모든 크로스 계정 서비스 통합에 대한 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 정책을 자동으로 생성하지 않습니다. AWS 계정하나 이상에서 대상 IAM 역할을 위임할 수 있도록 상태시스템 실행 역할에 필요한 권한을 추가해야 합니다.

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))에서 상태 머신 실행 역할을 엽니다. 방법:

   1. [1단계에서 만든 상태 머신을 소스 계정](#tutorial-access-cross-acct-resources-update-task-def)에서 엽니다.

   1. **상태 머신 세부 정보** 페이지에서 **IAM 역할 ARN**을 선택합니다.

1. **권한** 탭에서 **권한 추가**를 선택한 다음 **인라인 정책 생성**을 선택합니다.

1. **JSON** 탭을 선택하고 기존 콘텐츠를 다음 권한으로 바꿉니다. Lambda 함수 ARN을 교체해야 합니다.

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "sts:AssumeRole",
         "Resource": "arn:aws:iam::111122223333:role/LambdaRole"  // The target role to be assumed
       }
     ]
   }
   ```

1. **정책 검토**를 선택합니다.

1. **정책 검토** 페이지에 권한 이름을 입력한 다음 **정책 생성**을 선택합니다.