首页 > 解决方案 > 使用 AWS SAM 和 DynamoDB 限制 Lambda 权限

问题描述

我一直在尝试使用 Cloudformation/SAM 将堆栈放在一起。下面的 lambda 函数是在 DynamoDB 中创建联系人的处理程序,所以我认为给它必要的最少权限是谨慎的做法。

我注意到 DynamoDBWritePolicy 允许的不仅仅是 PutItem,所以我想知道进一步锁定事物的最佳方法是什么。我很欣赏这可能有点矫枉过正,但这是出于学习目的。

这是我的 Lambda 定义:

CreateContact:
  Type: AWS::Serverless::Function
  Properties:
    Handler: index.handler
    Runtime: nodejs12.x
    Policies:
      - AWSLambdaBasicExecutionRole
      - DynamoDBWritePolicy:
          TableName: contacts
    CodeUri: ./src/handlers/create-contact
    Events:
      ApiEvent:
        Type: Api
        Properties:
          Path: /
          Method: post
          RestApiId:
            Ref: APIGateway

所以我的问题是:我应该只为 PutItem 创建一个新策略还是依赖于权限边界之类的东西,还是我忽略了任何其他选项?

标签: amazon-web-servicesaws-lambda

解决方案


你的方法没有错。您可以创建一个新策略来“允许”对特定资源的某些特定操作。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SpecificTable",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem"
            ],
            "Resource": "arn:aws:dynamodb:*:*:table/MyTable"
        }
    ]
}

推荐阅读