使用现有策略的 AWS Gateway 中的无服务器白名单 IP

Posted

技术标签:

【中文标题】使用现有策略的 AWS Gateway 中的无服务器白名单 IP【英文标题】:Serverless Whitelist IP in AWS Gateway using existing policy 【发布时间】:2020-05-14 14:56:28 【问题描述】:

我正在使用 AWS 基础设施(AWS API Gateway + Lambda)并且我想阻止对我的开发环境的外部访问,我创建了一个使用 IAM 来根据源 IP 过滤 IP 的策略:


    "Version": "2012-10-17",
    "Statement": 
        "Effect": "Deny",
        "Action": "execute-api:Invoke",
        "Resource": "*",
        "Condition": 
            "NotIpAddress": 
                "aws:SourceIp": [
                    "192.168.0.1"
                ]
            ,
            "Bool": 
                "aws:ViaAWSService": "false"
            
        
    


我现在要做的是将该策略附加到我使用无服务器部署的 lambda;我试过这个:

provider:
  name: aws
  runtime: nodejs12.x
  resourcePolicy:
    - arn:aws:iam::1234567890:policy/myCustomPolicy

但它不起作用......

我知道有些人按照 Serverless 文档直接创建和分配 resource policy during the lambda deployment,但我不想这样做,因为我想从 AWS 管理策略(我不想每次我必须更改策略时都想重新部署无服务器)。

有人对此有一个可行的示例/建议吗?

【问题讨论】:

【参考方案1】:

经过相当广泛的互联网研究,显然无法从网关参考现有政策。

主要原因是网关策略是资源策略而不是 IAM 策略更多详细信息here。

作为替代解决方案,我最终所做的是将该策略提取到一个公共文件中,我的存储库现在如下所示:

│
├── services
│   └── service-api
│     └── handler.js, serverless.yml
│
├── serverless-common.yml
└──.gitlab-ci.yml

在每个服务内的 serverless.yml 文件中,我引用了 serverless-common.yml 中的策略:

provider:
  name: aws
  runtime: nodejs12.x
  resourcePolicy: $file(../../serverless.common.yml):custom.resourcePolicies.$opt:stage, 'none'

functions:
  hello:
    handler: handler.hello
    events:
      - http: 
          path: health
          method: get

并且在 serverless-common.yml 中

custom:
  resourcePolicies:
    dev:
      - Effect: Allow
        Principal: "*"
        Action: execute-api:Invoke
        Resource:
          - execute-api:/*/*/*
        Condition:
          IpAddress:
            aws:SourceIp: 
              - "176.25.129.133" # Whitelisted IP
    pro:
      - Effect: Allow
        Principal: "*"
        Action: execute-api:Invoke
        Resource:
          - execute-api:/*/*/*

这是我能找到的最清晰的解决方案,因为框架和 AWS 不允许您参考外部策略,至少通过这种方式,您可以只在一个地方拥有列入白名单的 IP 并参考它来自无服务器部署。

【讨论】:

以上是关于使用现有策略的 AWS Gateway 中的无服务器白名单 IP的主要内容,如果未能解决你的问题,请参考以下文章

如何在 API Gateway 和 React 应用程序之间启用 AWS 中的 CORS 策略?

AWS API Gateway Cognito 授权模拟

在方法请求中使用 AWS_IAM 授权时需要 AWS Gateway 自定义授权者吗?

如何使用 AWS Cloudformer 为现有 API Gateway 创建云形成模板?

如何使用 AWS CloudFormation 在 AWS API Gateway 上应用安全策略?

如何将生命周期策略添加到 AWS CDK Typescript 中的现有 S3 存储桶