如何为 API Gateway HTTP API 提供跨账户 IAM 授权?

2 分钟阅读
0

我想要激活 AWS Identity and Access Management(IAM)身份验证以跨账户访问我的 Amazon API Gateway HTTP API。该如何进行设置?

简短描述

对于 API 网关 REST API,您可以使用资源策略提供跨账户的 IAM 身份验证。但是,此选项不适用于 API 网关 HTTP API。

您可以使用 sts:AssumeRole API 操作以担任 HTTP API 账户的角色。担任的角色提供临时安全凭证,可用于在其他账户中调用 HTTP API。

解决方法

创建 IAM 临时凭证

**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

1.    为托管 HTTP API 的账户 A 创建 IAM policy。此策略为 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 policy 附加到在步骤 2 中创建的 IAM 角色。

4.    为账户 B 创建 IAM policy 以允许 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 policy 附加到账户 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 响应代码。未授权的请求将返回消息缺少身份验证令牌403 禁止响应代码。


相关信息

如何为 API Gateway REST API 激活 IAM 身份验证?

AWS 官方
AWS 官方已更新 2 年前