本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Step Functions 中存取跨帳戶AWS資源
透過 Step Functions 中的跨帳戶存取支援,您可以共用在不同的 中設定的資源AWS 帳戶。在本教學課程中,我們會逐步引導您存取名為生產之帳戶中定義的跨帳戶 Lambda 函數。此函數是從名為開發之帳戶中的狀態機器叫用。在本教學課程中,開發帳戶稱為來源帳戶,而生產帳戶是包含目標 IAM 角色的目標帳戶。
若要開始,請在Task狀態的定義中,指定狀態機器在叫用跨帳戶 Lambda 函數之前必須擔任的目標 IAM 角色。然後,修改目標 IAM 角色中的信任政策,以允許來源帳戶暫時擔任目標角色。此外,若要呼叫 AWS資源,請在目標 IAM 角色中定義適當的許可。最後,更新來源帳戶的執行角色,以指定擔任目標角色所需的許可。
您可以將狀態機器設定為擔任 IAM 角色,以從多個 存取資源AWS 帳戶。不過,根據狀態的定義,Task狀態機器在特定時間只能擔任一個 IAM 角色。
注意
Step Functions 不提供跨區域 AWSSDK 整合和跨區域AWS資源存取。
先決條件
-
本教學課程使用 Lambda 函數的範例,示範如何設定跨帳戶存取。您可以使用任何其他AWS資源,但請確定您已在不同的帳戶中設定資源。
重要
IAM 角色和資源型政策只會在單一分割內跨帳戶委派存取許可。例如,假設您在標準
aws分割區的美國西部 (加利佛尼亞北部) 中有一個帳戶。您在aws-cn分割區的中國 (北京) 中也有一個帳戶。您不能使用中國 (北京) 中帳戶的 Amazon S3 資源型政策,對標準aws帳戶中的使用者允許存取許可。 -
在文字檔案中記下跨帳戶資源的 Amazon Resource Name (ARN)。在本教學課程稍後,您將在狀態機器
Task的狀態定義中提供此 ARN。以下是 Lambda 函數 ARN 的範例:arn:aws:lambda:us-east-2:account-id:function:functionName -
請確定您已建立狀態機器需要擔任的目標 IAM 角色。
步驟 1:更新任務狀態定義以指定目標角色
在工作流程Task的狀態中,新增Credentials欄位,其中包含在叫用跨帳戶 Lambda 函數之前,狀態機器必須擔任的身分。
下列程序示範如何存取稱為 的跨帳戶 Lambda 函數Echo。您可以依照下列步驟呼叫任何AWS資源。
-
開啟 Step Functions 主控台
,然後選擇建立狀態機器。 -
在選擇撰寫方法頁面上,選擇以視覺化方式設計工作流程,並保留所有預設選擇。
-
若要開啟工作流程 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。若要這樣做,請選擇在執行時間從狀態輸入取得 IAM 角色 ARN。如需使用參考路徑指定值的範例,請參閱 將 JSONPath 指定為 IAM 角色 ARN。
-
-
選擇下一步。
-
在檢閱產生的程式碼頁面上,選擇下一步。
-
在指定狀態機器設定頁面上,指定新狀態機器的詳細資訊,例如名稱、許可和記錄層級。
-
選擇 Create state machine (建立狀態機器)。
-
在文字檔案中記下狀態機器的 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的資源。
-
前往 https://console.aws.amazon.com/iam/
開啟 IAM 主控台。 -
在主控台的導覽窗格中,選擇角色,然後使用搜尋方塊來搜尋目標 IAM 角色。例如
。LambdaRole -
選擇信任關係標籤。
-
選擇編輯信任政策並貼上下列信任政策。請務必取代AWS 帳戶數字和 IAM 角色 ARN。
sts:ExternalId欄位進一步控制誰可以擔任該角色。狀態機器的名稱只能包含AssumeRoleAPI 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::account-id: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:region:account-id: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-accountAWSresource being accessed } ] } -
選擇檢閱政策。
-
在檢閱政策頁面上,輸入許可的名稱,然後選擇建立政策。
步驟 4:在執行角色中新增許可以擔任目標角色
Step Functions 不會自動為所有跨帳戶服務整合產生 AssumeRole 政策。您必須在狀態機器的執行角色中新增必要的許可,以允許它在一或多個 中擔任目標 IAM 角色AWS 帳戶。
-
在 IAM 主控台中開啟狀態機器的執行角色,網址為 https://https://console.aws.amazon.com/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 } ] } -
選擇檢閱政策。
-
在檢閱政策頁面上,輸入許可的名稱,然後選擇建立政策。