我想激活 AWS Identity and Access Management (IAM) 身份验证以跨账户访问我的 Amazon API Gateway HTTP API。
简短描述
对于 API 网关 REST API,您可以使用资源策略为跨账户提供 IAM 身份验证。但是,此选项不适用于 API Gateway HTTP API。
您可以使用 sts:AssumeRole API 操作来代入 HTTP API 账户的角色。代入的角色提供临时安全凭证,该凭证可用于在另一个账户中调用 HTTP API。
解决方法
创建 IAM 临时凭证
**注意:**如果在运行 AWS 命令行界面 (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 响应代码。未授权的请求会返回缺少身份验证令牌消息和 403 禁止访问响应代码。
相关信息
如何为 API Gateway REST API 激活 IAM 身份验证?