翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 リソースでも呼び出すことができます。
-
Step Functions コンソール
を開き、[ステートマシンの作成] を選択します。 -
[オーサリング方法を選択] ページで [ワークフローを視覚的に設計] を選択し、すべてをデフォルトの選択のままにします。
-
Workflow Studio を開くには、[次へ] を選択します。
[アクション] タブで、
Task
状態をキャンバスにドラッグアンドドロップします。これで、このTask
状態を使用しているクロスアカウントの Lambda 関数が呼び出されます。-
[設定] タブで以下の操作を行います。
-
状態の名前を
Cross-account call
に変更します。 -
[関数名] で [関数名を入力] を選択し、ボックスに Lambda 関数の ARN を入力します。例えば、
arn:aws:lambda:us-east-2:111122223333:function:
と指定します。Echo
-
[IAM ロールの ARN を指定] でターゲットの IAM ロール ARN を指定します。例えば、
arn:aws:iam::111122223333:role/LambdaRole
と指定します。ヒント
またはその状態の JSON 入力で、IAM ロールの ARN を含む既存の key-value ペアへの参照パスも指定できます。これを行うには、[状態入力からランタイムに IAM ロール ARN を取得する] を選択します。参照パスを使用して値を指定する例については、IAM ロールJSONPathとしての の指定 ARNを参照してください。
-
-
[次へ] をクリックします。
-
[生成されたコードを確認] ページで [次へ] を選択します。
-
[ステートマシン設定を指定] ページで、名前、権限、ログレベルなど、新しいステートマシンの詳細を指定します。
-
[ステートマシンの作成] を選択します。
-
ステートマシンの 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 リソースにアクセスできるようになります。
-
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
コンソールのナビゲーションペインで、[ロール]を選択し、[検索] ボックスでターゲットの IAM ロールを検索します。例えば、
と指定します。LambdaRole
-
[信頼関係] タブを選択します。
-
[信頼ポリシーを編集] を選択して、次のポリシーを貼り付けます。AWS アカウント 番号と IAM ロール ARN を必ず置き換えてください。
sts:ExternalId
フィールドでは、ロールを引き受けられるユーザーをさらに制御できます。ステートマシンの名前に含められるのは、AWS Security Token ServiceAssumeRole
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. } } } ] }
-
以降のアクションに進むには、このウィンドウを開いたままで次のステップに進みます。
ステップ 3: 必要なアクセス許可をターゲットロールに追加する
IAM ポリシーでの許可により、特定のリクエストが許可されるか拒否されるかが決まります。ターゲット IAM ロールには、Lambda 関数を呼び出すための適切なアクセス許可が必要です。
-
[アクセス許可] タブを選択します。
-
[アクセス許可を追加]、[インラインポリシーを作成] の順に選択します。
-
[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: 実行ロールに権限を追加してターゲットロールを引き受ける
Step Functions は、すべてのクロスアカウントサービス統合の AssumeRole ポリシーを自動的に生成するわけではありません。ステートマシンが 1 つ以上のターゲット IAM ロールを引き受けられるようにするには、必要な権限をステートマシンの実行ロールに追加する必要があります。AWS アカウント
-
https://console.aws.amazon.com/iam/
の IAM コンソール内でステートマシンの実行ロールを開きます。これを実行するには: -
ステップ 1 でソースアカウント内に作成したステートマシンを開きます。
-
[ステートマシンの詳細] ページで、[IAM ロールの ARN] を選択します。
-
-
[許可] タブで [アクセス許可を追加] を選択し、次に[インラインポリシーを作成] を選択します。
-
[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 } ] } -
[ポリシーを確認] を選択します。
-
[ポリシーを確認] ページで許可の名前を入力し、[ポリシーを作成] を選択します。