Step Functions でクロスアカウント AWS リソースにアクセスする - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Step Functions でクロスアカウント AWS リソースにアクセスする

Step Functions はクロスアカウントアクセスをサポートしており、異なる AWS アカウント で設定されたリソースの共有が可能です。このチュートリアルでは、「Production」というアカウントで定義されたクロスアカウント Lambda 関数にアクセスする手順について説明します。この関数は「Development」というアカウントのステートマシンから呼び出されます。このチュートリアルでは、「Development」アカウントを「ソースアカウント」、「Production」アカウントを「ターゲット IAM ロールを含むターゲットアカウント」と呼びます。

クロスアカウントの Lambda 関数を呼び出す前に、まず Task 状態の定義で、ステートマシンが引き受ける必要があるターゲット IAM ロールを指定します。次に、ターゲット IAM ロールの信頼ポリシーを変更して、ソースアカウントがターゲットロールを一時的に引き受けられるようにします。また、AWS リソースを呼び出すため、ターゲット IAM ロールで適切なアクセス許可を定義します。最後に、ソースアカウントの実行ロールを更新して、ターゲットロールの引き受けに必要な許可を指定します。

複数の AWS アカウント からリソースにアクセスするための IAM ロールを引き受けるように、ステートマシンを設定できます。ただし、Task 状態の定義に基づいて、ステートマシンが一度に引き受けられる IAM ロールは、1 つだけです。

注記

現在、クロスリージョンの AWS SDK AWS 統合とクロスリージョンのリソースアクセスは Step Functions では使用できません。

前提条件

  • このチュートリアルでは、クロスアカウントアクセスの設定方法を、Lambda 関数の例を使用して説明します。他の AWS リソースも使用できますが、リソースが別のアカウントで定義済みであることを確認してください。

    重要

    IAM ロールとリソースベースのポリシーは、単一のパーティション内のアカウント間でのみアクセスを委任します。例えば、標準 aws パーティションの米国西部 (北カリフォルニア)と、aws-cn パーティションの中国 (北京) にアカウントがあるとします。中国 (北京) アカウントの Amazon S3 リソースベースのポリシーを使用して、標準 aws アカウントのユーザーにアクセスを許可することはできません。

  • テキストファイルにクロスアカウントリソースの Amazon リソースネーム (ARN) をメモしておきます。このチュートリアルの後半で、この ARN をステートマシンの Task 状態定義に入力します。以下は、Lambda 関数の ARN の例です。

    arn:aws:lambda:us-east-2:123456789012:function:functionName
  • ステートマシンが引き受ける必要があるターゲット IAM ロールが作成できたことを確認してください。

ステップ 1: ターゲットロールを指定するための Task 状態定義を更新する

クロスアカウントの Lambda 関数を呼び出す前に、ワークフローの Task 状態で、ステートマシンが引き受ける必要がある Credentials フィールド (アイデンティティを含む) を追加します。

次の手順で、クロスアカウント Lambda 関数へのアクセス方法を説明します。Echoこれらの手順に従うと、どの AWS リソースでも呼び出すことができます。

  1. Step Functions コンソールを開き、[ステートマシンの作成] を選択します。

  2. ‬[オーサリング方法を選択]‭ ページで ‬[ワークフローを視覚的に設計]‭‬ を選択し、すべてをデフォルトの選択のままにします。

  3. Workflow Studio を開くには、[次へ] を選択します。

  4. [アクション] タブで、Task 状態をキャンバスにドラッグアンドドロップします。これで、この Task 状態を使用しているクロスアカウントの Lambda 関数が呼び出されます。

  5. [設定] タブで以下の操作を行います。

    1. 状態の名前を Cross-account call に変更します。

    2. [関数名][関数名を入力] を選択し、ボックスに Lambda 関数の ARN を入力します。例えば、arn:aws:lambda:us-east-2:111122223333:function:Echo と指定します。

    3. [IAM ロールの ARN を指定] でターゲットの IAM ロール ARN を指定します。例えば、arn:aws:iam::111122223333:role/LambdaRole と指定します。

      ヒント

      またはその状態の JSON 入力で、IAM ロールの ARN を含む既存の key-value ペアへの参照パスも指定できます。これを行うには、[状態入力からランタイムに IAM ロール ARN を取得する] を選択します。参照パスを使用して値を指定する例については、IAM ロールJSONPathとしての の指定 ARNを参照してください。

  6. [次へ] をクリックします。

  7. [生成されたコードを確認] ページで [次へ] を選択します。

  8. [ステートマシン設定を指定] ページで、名前、権限、ログレベルなど、新しいステートマシンの詳細を指定します。

  9. [ステートマシンの作成] を選択します。

  10. ステートマシンの 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] API オペレーションを使用できます。このオペレーションから提供される一時的なセキュリティ認証情報を使用して、ターゲットアカウントの AWS リソースにアクセスできるようになります。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. コンソールのナビゲーションペインで、[ロール]を選択し、[検索] ボックスでターゲットの IAM ロールを検索します。例えば、LambdaRole と指定します。

  3. [信頼関係] タブを選択します。

  4. [信頼ポリシーを編集] を選択して、次のポリシーを貼り付けます。AWS アカウント 番号と IAM ロール ARN を必ず置き換えてください。sts:ExternalId フィールドでは、ロールを引き受けられるユーザーをさらに制御できます。ステートマシンの名前に含められるのは、AWS Security Token Service AssumeRole API がサポートする文字のみです。詳細については、「AWS Security Token Service API リファレンス」の「AssumeRole」を参照してください。

    { "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. 以降のアクションに進むには、このウィンドウを開いたままで次のステップに進みます。

ステップ 3: 必要なアクセス許可をターゲットロールに追加する

IAM ポリシーでの許可により、特定のリクエストが許可されるか拒否されるかが決まります。ターゲット IAM ロールには、Lambda 関数を呼び出すための適切なアクセス許可が必要です。

  1. [アクセス許可] タブを選択します。

  2. [アクセス許可を追加][インラインポリシーを作成] の順に選択します。

  3. [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 } ] }
  4. [ポリシーを確認] を選択します。

  5. [ポリシーを確認] ページで許可の名前を入力し、[ポリシーを作成] を選択します。

ステップ 4: 実行ロールに権限を追加してターゲットロールを引き受ける

Step Functions は、すべてのクロスアカウントサービス統合の AssumeRole ポリシーを自動的に生成するわけではありません。ステートマシンが 1 つ以上のターゲット IAM ロールを引き受けられるようにするには、必要な権限をステートマシンの実行ロールに追加する必要があります。AWS アカウント

  1. https://console.aws.amazon.com/iam/ の IAM コンソール内でステートマシンの実行ロールを開きます。これを実行するには:

    1. ステップ 1 でソースアカウント内に作成したステートマシンを開きます。

    2. [ステートマシンの詳細] ページで、[IAM ロールの ARN] を選択します。

  2. [許可] タブで [アクセス許可を追加] を選択し、次に[インラインポリシーを作成] を選択します。

  3. [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 } ] }
  4. [ポリシーを確認] を選択します。

  5. [ポリシーを確認] ページで許可の名前を入力し、[ポリシーを作成] を選択します。