CloudFormation 堆栈给出“API: s3:GetObject Access Denied”

Dan*_*iel 5 amazon-web-services aws-cloudformation

与 S3 存储桶结合使用时,我在部署 CF-stack 时遇到问题。S3 存储桶包含 API Gateway 需要访问的 swagger 定义。

我的 S3 存储桶有一个包含 IP 过滤器的存储桶策略,如下所示:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "IpFilter",
            "Effect": "Deny",
            "NotPrincipal": {
                "Service": [
                    "lambda.amazonaws.com",
                    "apigateway.amazonaws.com"
                ]
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-code-dev/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "1.2.3.4/32",
                        "5.6.7.8/32"
                    ]
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

目的是拒绝任何不是来自指定 IP 地址或指定服务的人访问此 S3 存储桶。

在部署我的堆栈时,我在部署 AWS::ApiGateway::RestApi 资源时遇到错误,状态原因为“API: s3:GetObject Access Denied”。

这显然与存储桶策略有关,因为如果我删除该策略,问题就会消失。关于政策中缺少什么的任何想法?