我想要啟用 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 角色,將「Trusted Entity Type」(受信任的實體類型) 新增為「AWS Account」(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 (授權) 索引標籤,然後執行下列動作:
在 Type (類型) 中選擇 AWS Signature (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 回應代碼。未經授權的請求會傳回 Missing Authentication Token (缺少身分驗證字符) 訊息和 403 Forbidden (403 禁止) 回應代碼。
相關資訊
如何為 API Gateway REST API 啟用 IAM 身分驗證?