チュートリアル: Step Functions でのクロスアカウント AWS リソースへのアクセス - AWS Step Functions

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

チュートリアル: Step Functions でのクロスアカウント AWS リソースへのアクセス

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

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

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

注記

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

前提条件

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

    重要

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

  • クロスアカウントリソースの Amazon リソースネーム (ARN) をテキストファイルに書き留めます。このチュートリアルの後半では、ステートマシンTaskの状態定義ARNでこれを提供します。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. 関数名 で、関数名 を入力し、ARNボックスに Lambda 関数を入力します。例えば、arn:aws:lambda:us-east-2:111122223333:function:Echo と指定します。

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

      ヒント

      または、IAMロール を含む状態JSONの入力内の既存のキーと値のペアへの参照パスを指定することもできますARN。これを行うには、実行ARN時に状態入力 からIAMロールを取得する を選択します。参照パスを使用して値を指定する例については、IAM ロールJSONPathとしての の指定 ARNを参照してください。

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

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

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

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

  10. ステートマシンのIAMロールARNとステートマシンをテキストファイルに書きARN留めます。これらをターゲットアカウントの信頼ポリシーARNsで指定する必要があります。

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) AssumeRoleAPIオペレーションを使用できます。このオペレーションは、ターゲットアカウントの AWS リソースへのアクセスを可能にする一時的なセキュリティ認証情報を提供します。

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

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

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

  4. [信頼ポリシーを編集] を選択して、次のポリシーを貼り付けます。 AWS アカウント 番号 とIAMロール を必ず置き換えてくださいARN。sts:ExternalId フィールドでは、ロールを引き受けられるユーザーをさらに制御できます。ステートマシンの名前には、 が AWS Security Token Service AssumeRoleAPIサポートする文字のみを含める必要があります。詳細については、「 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. のIAMコンソールでステートマシンの実行ロールを開きますhttps://console.aws.amazon.com/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. [ポリシーを確認] ページで許可の名前を入力し、[ポリシーを作成] を選択します。