簡體   English   中英

使用 AWS SAM 和 DynamoDB 限制 Lambda 權限

[英]Limiting Lambda Permissions using AWS SAM and DynamoDB

我一直在使用 Cloudformation/SAM 將堆棧放在一起,結果為 go。 下面的 lambda function 是在 DynamoDB 中創建聯系人的處理程序,因此我認為為它提供最少的必要權限是明智的。

我注意到 DynamoDBWritePolicy 不僅允許 PutItem,所以我想知道 go 進一步鎖定事物的最佳方法是什么。 我明白這可能有點矯枉過正,但這是為了學習目的。

這是我的 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 創建一個新策略還是依賴於權限邊界之類的東西,或者我是否忽略了任何其他選項?

你的方法沒有錯。 您可以創建新策略以“允許”對特定資源執行某些特定操作。

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

是的,SAM 提供的預定義策略模板可能包含比您 lambda function 所需的權限更多的權限。如果您需要更精細級別的權限(這是最佳實踐),您始終可以在 lambda 函數的策略 object 中的 SAM 模板中設置它們作為如下:

CreateContact:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs12.x
      Policies:
        - Version: 2012-10-17
          Statement:
            - Effect: Allow
              Action: dynamodb:PutItem
              Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/contacts"
      CodeUri: ./src/handlers/create-contact
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /
            Method: post
            RestApiId:
              Ref: APIGateway

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM