AWS API Gateway-设置跨账户访问的问题

时间:2020-10-09 13:28:14

标签: amazon-web-services authentication amazon-ec2 aws-api-gateway

我正在尝试使用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

请帮助解决此问题。

1 个答案:

答案 0 :(得分:0)

事实证明,以上所有内容都是正确的,您需要将API部署到特定阶段以对其应用资源策略。