我正在尝试使用accountA
中存在的现有API网关。我有一些EC2实例,这些实例具有一些脚本来调用当前的API网关。这些实例可能(也可能不)与存在我的API网关的实例位于同一AWS账户(我们将另一个账户称为accountB
)。
对于身份验证部分,目前在API网关级别仅实现AWS_IAM
身份验证。 EC2实例(在两个帐户中)都具有附加的IAM角色,这些角色具有IAM权限来调用API。
相同的权限如下:
{
"Sid": "InvokeAPI",
"Effect": "Allow",
"Action": "execute-api:Invoke",
"Resource": "*"
}
当我尝试从accountA
中的实例调用API时,它按预期工作。但是,当我尝试从accountB
中的实例调用API时,网关会返回403错误并显示以下消息:
User: arn:aws:sts::accountB:assumed-role/invoke_api_iam_role/i-xxxxxxxxx is not authorized to access this resource
我试图查看API gateway resource policies并试图将accountB
的API网关的资源策略中的accountA
的EC2 IAM角色列入白名单,但仍然遇到相同的错误。 / p>
在API网关处实施的当前资源策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountB:role/invoke_api_iam_role"
},
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:us-east-1:accountA:myAPIID/*"
}
]
}
要通过awsv4签名对API网关的请求进行签名,我使用aws-requests-auth
请帮助解决此问题。
答案 0 :(得分:0)
事实证明,以上所有内容都是正确的,您需要将API部署到特定阶段以对其应用资源策略。