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

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

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

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

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

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

注意

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

必要條件

  • 本教學課程使用 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狀態中,新增一個Credentials欄位,其中包含狀態機器在叫用跨帳戶 Lambda 函數之前必須承擔的身分。

下列程序示範如何存取名為的跨帳戶 Lambda 函Echo數。您可以按照以下步驟調用任何 AWS 資源。

  1. 開啟 Step Functions 主控台,然後選擇建立狀態機器

  2. [選擇編寫方法] 頁面上,選擇 [視覺化設計工作流程],並保留所有預設選取項目。

  3. 若要開啟「工作流程工作室」,請

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

  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角色ARN的狀態JSON輸入中指定現有鍵值對的參考路徑。若要這麼做,請從狀態輸入中選擇 [ARN在執行階段取得IAM角色]。如需使用參考路徑指定值的範例,請參閱指定JSONPath為IAM角色 ARN

  6. 選擇 Next (下一步)

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

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

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

  10. ARN在文字檔中記下狀態機的IAM角色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政策。您必須在狀態機器的執行角色中新增必要的權限,以允許它在一或多個中擔任目標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. 在 [檢閱原則] 頁面上,輸入權限的名稱,然後選擇 [建立原則]。