因此,当lambda函数试图从其中使用查询表中GSI之一的dynamo表中读取数据时,我在以下错误中发现了以下错误:

Unable to query Dynamo at XXXTable


现在,我在cloudformation文件中定义了lambda和dynamo表。

这是授予lambda权限访问dynamo表的策略。

LambdaPolicy:
Type: AWS::IAM::Policy
Properties:
  Roles:
    - !Ref LambdaRole
  PolicyName: LambdaPolicy
  PolicyDocument:
    Version: 2012-10-17
    Statement:
      - Effect: Allow
        Action:
          - "logs:*"
        Resource: "arn:aws:logs:*:*:*"
      - Effect: Allow
        Action:
          - "dynamodb:BatchGetItem"
          - "dynamodb:BatchWriteItem"
          - "dynamodb:DescribeTable"
          - "dynamodb:GetItem"
          - "dynamodb:PutItem"
          - "dynamodb:UpdateItem"
          - "dynamodb:DeleteItem"
          - "dynamodb:Query"
          - "dynamodb:Scan"
        Resource:
          - !GetAtt XXXTable.Arn


其中XXXTable是在同一cloudformation文件中定义的Dynamo表。
现在,我知道可以通过编辑lambda策略并将此行添加到Resource中来通过控制台手动解决此问题:

- "arn:aws:dynamodb:eu-west-1:accountNubmer:table/XXXTable/index/*"


但是问题是,如何将其添加到cloudformation文件中?
就像是:

!GetAtt XXXTable.Arn + "/index/*


任何帮助都会很棒。

最佳答案

我认为您只是缺少将它们组合在一起的!Sub函数。尝试:

- !Sub "${XXXTable.Arn}/index/*"

08-16 06:26