在 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狀態機器在特定時間只能擔任一個 IAM 角色。

注意

目前,Step Functions 中不提供跨區域 AWS SDK 整合和跨區域 AWS 資源存取。

先決條件

  • 本教學課程使用 Lambda 函數的範例示範如何設定跨帳戶存取。您可以使用任何其他 AWS 資源,但請確定您已在不同的帳戶中設定該資源。

    重要

    IAM 角色和資源型政策只會在單一分割內跨帳戶委派存取許可。例如,假設您在標準 aws 分割區的美國西部 (加利佛尼亞北部) 中有一個帳戶。您在 aws-cn 分割區的中國 (北京) 中也有一個帳戶。您不能使用中國 (北京) 中帳戶的 Amazon S3 資源型政策,對標準 aws 帳戶中的使用者允許存取許可。

  • 在文字檔案中記下跨帳戶資源的 Amazon Resource Name (ARN)。在本教學稍後,您將在狀態機器Task的狀態定義中提供此 ARN。以下是 Lambda 函數 ARN 的範例:

    arn:aws:lambda:us-east-2:123456789012:function:functionName
  • 請確定您已建立狀態機器需要擔任的目標 IAM 角色。

步驟 1:更新任務狀態定義以指定目標角色

在工作流程Task的狀態中,新增Credentials欄位,其中包含在叫用跨帳戶 Lambda 函數之前,狀態機器必須擔任的身分。

下列程序示範如何存取稱為 的跨帳戶 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

      提示

      或者,您也可以在包含 IAM 角色 ARN 的狀態 JSON 輸入中,指定現有鍵/值對的參考路徑。若要這樣做,請選擇在執行時間從狀態輸入取得 IAM 角色 ARN。如需使用參考路徑指定值的範例,請參閱 將 JSONPath 指定為 IAM 角色 ARN

  6. 選擇 Next (下一步)

  7. 檢閱產生的程式碼頁面上,選擇下一步

  8. 指定狀態機器設定頁面上,指定新狀態機器的詳細資訊,例如名稱、許可和記錄層級。

  9. 選擇 Create state machine (建立狀態機器)

  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) AssumeRole API 操作。此操作提供臨時安全登入資料,以允許存取目標帳戶中 AWS 的資源。

  1. 開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在主控台的導覽窗格中,選擇角色,然後使用搜尋方塊來搜尋目標 IAM 角色。例如:LambdaRole

  3. 選擇信任關係標籤。

  4. 選擇編輯信任政策並貼上下列信任政策。請務必取代 AWS 帳戶 數字和 IAM 角色 ARN。sts:ExternalId 欄位進一步控制誰可以擔任該角色。狀態機器的名稱只能包含 AssumeRole API AWS Security Token Service 支援的字元。如需詳細資訊,請參閱《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 政策。您必須在狀態機器的執行角色中新增所需的許可,以允許它在一或多個 中擔任目標 IAM 角色 AWS 帳戶。

  1. 在 IAM 主控台中開啟狀態機器的執行角色,網址為 https://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. 檢閱政策頁面上,輸入許可的名稱,然後選擇建立政策