教學課程:存取跨帳戶 AWS 資源 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:存取跨帳戶 AWS 資源

透過 Step Functions 中的跨帳戶存取支援,您可以共用不同 AWS 帳戶設定的資源。在本教學中,我們將引導您完成存取在名為生產的帳戶中定義的跨帳戶 Lambda 函數的程序。這個函數是從一個名為開發帳戶的狀態機調用。在本教學課程中,開發帳戶稱為來源帳戶生產帳戶是包含目標 IAM 角色的目標帳戶

首先,請在Task州的定義中指定狀態機器必須承擔的目標 IAM 角色,然後再叫用跨帳戶 Lambda 函數。然後,修改目標 IAM 角色中的信任政策,以允許來源帳戶暫時擔任目標角色。此外,若要呼叫資 AWS 源,請在目標 IAM 角色中定義適當的許可。最後,更新來源帳戶的執行角色,以指定承擔目標角色所需的權限。

您可以將狀態機設定為擔任 IAM 角色,以便從多個存取資源 AWS 帳戶。但是,根據州/省的定義,狀態機器在給定時間只能承擔一個 IAM 角色。Task

注意

目前,Step Functions 中無法使用跨區域 AWS SDK 整合和跨區域 AWS 資源存取。

必要條件

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

    重要

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

  • 在文本文件中記下跨帳戶資源的 Amazon 資源名稱(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. 若要開啟「工作流程工作室」,請

  4. 在 [動] 索引標籤上,將Task狀態拖放到畫布上。這會叫用正在使用此狀態的跨帳戶 Lambda 函數。Task

  5. 在「組態」索引標籤上,執行下列動作:

    1. 將狀態重新命名為Cross-account call

    2. 對於函數名稱,選擇輸入函數名稱,然後在方塊中輸入 Lambda 函數 ARN。例如 arn:aws:lambda:us-east-2:111122223333:function:Echo

    3. 對於提供身分與存取權管理角色 ARN,請指定目標 IAM 角色 ARN。例如 arn:aws:iam::111122223333:role/LambdaRole

      提示

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

  6. 選擇下一步

  7. 在 [檢閱產生的字碼] 頁上,選擇 [下一步]。

  8. 在 [指定狀態機器設定] 頁面上,指定新狀態機器的詳細資料,例如名稱、權限和記錄層級。

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

  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) AssumeRoleAPI 作業。此作業提供暫時的安全登入資料,可讓您存取目標帳戶中的 AWS 資源。

  1. 前往 https://console.aws.amazon.com/iam/ 開啟 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政策。您必須在狀態機器的執行角色中新增所需的權限,以允許其在一或多個中擔任目標 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. 在 [檢閱原則] 頁面上,輸入權限的名稱,然後選擇 [建立原則]。