如何為 API Gateway HTTP API 提供跨帳戶 IAM 授權?

上次更新日期:2022 年 8 月 31 日

我想要啟用 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"
    }
}

確認 AccessKeyIdSecretAccessKeySessionToken 的憑證物件。這些由所擔任角色提供的臨時憑證可用於叫用 HTTP API。

測試 IAM 身分驗證

使用 Postman 應用程式,從而採用您啟用 IAM 身分驗證的方法,將請求傳送至您的 API 資源。

注意:若要手動驗證使用其他工具或環境傳送至 API Gateway 的請求,請使用第 4 版簽署程序 (SigV4)。如需詳細資訊,請參閱簽署 AWS API 請求

1.    在 Postman 中,選擇 Authorization (授權) 索引標籤,然後執行下列動作:
Type (類型) 中選擇 AWS Signature (AWS 簽章)。
針對 AccessKeySecretKeySessionToken,輸入 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 禁止) 回應代碼。


此文章是否有幫助?


您是否需要帳單或技術支援?