【问题标题】:Wrong IAM Policy generated by AWS SAM templateAWS SAM 模板生成的错误 IAM 策略
【发布时间】:2020-11-14 23:32:45
【问题描述】:

我正在尝试使用 AWS SAM 构建基于 AWS lambda 的应用程序。在部署时,我注意到为 lambda 创建的 IAM 策略之一具有错误的 ARN。如下所示(格式错误):

{
    "Statement": [
        {
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:BatchWriteItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:ap-south-1:286214033472:table/arn:aws:dynamodb:ap-south-1:286214033472:table/damoLambda-DynamoDBTable-11I5VYQXQKPHH",
                "arn:aws:dynamodb:ap-south-1:286214033472:table/arn:aws:dynamodb:ap-south-1:286214033472:table/damoLambda-DynamoDBTable-11I5VYQXQKPHH/index/*"
            ],
            "Effect": "Allow"
        }
    ]
}

DynamoDB 表本身由 SAM 模板创建,并在 lambda 策略部分中引用,如下所示:

  TestFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: FileExtractorFunction
      Handler: helloworld.App::handleRequest
      Runtime: java8
      MemorySize: 512
      Policies:
        - CloudWatchPutMetricPolicy: {}  
        - S3ReadPolicy:
            BucketName: !Ref S3BucketName
        - DynamoDBWritePolicy:
            TableName: !GetAtt DynamoDBTable.Arn
      Environment:
        Variables:
          DynamoDB_Table_Name: !Ref DynamoDBTable
          
  ........................................
  ........................................
  ........................................
 DynamoDBTable:
    Type: AWS::DynamoDB::Table
    Properties:
      AttributeDefinitions:
       - AttributeName: id
         AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH   
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5       

除了政策部分,一切都按预期工作。
对于策略部分,我不确定这是 AWS 错误还是我做错了什么。

【问题讨论】:

  • 为什么它的格式不正确?因为它没有Version?不清楚你指的是什么问题。
  • @Marcin 你不同意我的回答吗?
  • 嗨。我在您发布答案之前发表了评论。

标签: amazon-web-services aws-lambda amazon-iam aws-sam


【解决方案1】:

我解决了,这只是因为我在 Policy Section 中使用 !GetAtt DynamoDBTable.Arn 代替 !Ref DynamoDBTable

 - DynamoDBWritePolicy:
    TableName: !Ref DynamoDBTable

看起来 AWS SAM 模板引擎缺少必要的验证并且对象模型很差,!GetAtt DynamoDBTable.Arn 应该返回 ARN 类型的对象,而不仅仅是字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 2020-04-02
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2020-12-26
    相关资源
    最近更新 更多