我想要激活 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"
}
}
检查 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 响应代码。未授权的请求将返回消息缺少身份验证令牌和 403 禁止响应代码。
相关信息
如何为 API Gateway REST API 激活 IAM 身份验证?