我想要啟用 AWS Identity and Access Management (IAM) 驗證以跨帳戶存取我的 Amazon API Gateway HTTP API。
簡短說明
對於 API Gateway REST API,您可以使用資源政策為跨帳戶操作提供 IAM 驗證。但是,此選項不適用於 API Gateway HTTP API。
您可以使用 sts:AssumeRole API 動作來擔任 HTTP API 帳號的角色。擔任的角色會提供臨時安全性憑證,可用於在另一個帳戶中調用 HTTP API。
解決方法
建立 IAM 臨時憑證
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本。
1. 為託管 HTTP API 的帳戶 A 建立 IAM 政策。此政策可為 HTTP API execute-api ARN 提供調用權限。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"execute-api:Invoke",
],
"Resource": [
"arn:aws:execute-api:us-east-1:<AccountA-id>:<Api-id>/$default/*/*"
]
}
]
}
2. 在帳戶 A 中建立 IAM 角色,將「信任實體類型」新增為「AWS 帳戶」,然後輸入帳戶 B 的 ID。
3. 將步驟 1 中建立的 IAM 政策附加至步驟 2 中建立的 IAM 角色。
4. 為帳戶 B 建立 IAM 政策,以允許 sts:AssumeRole API 動作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::<AccountA-id>:role/<AssumedRoleName>"
}
]
}
5. 將 IAM 政策附加至帳戶 B 中的使用者。
6. 執行類似於下列項目的 AWS CLI 命令 assume-role:
$ aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<AssumedRoleName> --role-session-name role_session
範例輸出結果:
{
"Credentials": {
"AccessKeyId": "A1B2C3D4E5E6G7H8J9K0",
"SecretAccessKey": "abcdefghijk123456789",
"SessionToken":
"11111111111122222222223333333333344444444455555566666667777777777778888888999999999aaaaaaaaaabbbbbbbbbcccccccc==",
"Expiration": "2022-07-11T15:55:25+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AAAAAAABBBBBBBBBBB:role_session",
"Arn": "arn:aws:sts::<account-id>:assumed-role/<AssumedRoleName>/role_session"
}
}
檢查 AccessKeyId、SecretAccessKey 和 SessionToken 的憑證物件。您能夠使用由所擔任角色提供的這些臨時認證來調用 HTTP API。
測試 IAM 驗證
使用 Postman 應用程式,透過您為其啟用 IAM 身分驗證的方法,向您的 API 資源傳送請求。
**注意:**若要使用其他工具或環境手動驗證傳送至 API Gateway 的請求,請使用第 4 版簽署程序 (SigV4) 簽章流程。如需詳細資訊,請參閱簽署 AWS API 請求。
1. 在 Postman 中選擇「Authorization」(授權) 標籤,然後執行下列操作:
對於類型,選擇 AWS 簽章。
針對「AccessKey」、「SecretKey」和「SessionToken」輸入 assume-role API 呼叫中的值。
2. 針對「Enter request URL」(輸入請求 URL) 輸入類似下列內容的 API 調用 URL:
https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>
已驗證的請求會傳回「200 OK」(200 正常) 回應代碼。未經授權的請求會傳回訊息遺失身分驗證字符和 403 禁止回應代碼。
相關資訊
如何啟用 API Gateway REST API 的 IAM 身分驗證?