![](/img/trans.png)
[英]Deploying AWS Lambda "Hello World" using sam init, sam build sam deploy defaults fails with Failed to create changeset for sam-app
[英]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.