无服务器框架 dynamobd iamRoleStatements 修改 -> AccessDeniedException

时间:2021-01-29 01:52:34

标签: lambda amazon-dynamodb serverless

我继承了一个使用 ddb 的 API。不幸的是,一切都在一张生产台上完成。我正在完成开发设置,因此我们不必在生产表上进行试验。事实证明,新数据要干净得多,我们的客户希望改用它。我想,我可以简单地更新我们的 ddb 配置的资源块以指向新的 ddb 表资源 arn,但那是我遇到麻烦的时候。

部分配置如下所示:

...  
iamRoleStatements:
  - Effect: Allow
    Action:
      - dynamodb:DescribeTable
      - dynamodb:Query
      - dynamodb:Scan
      - dynamodb:GetItem
      - dynamodb:PutItem
      - dynamodb:UpdateItem
      - dynamodb:DeleteItem
    Resource:
      - "arn:aws:dynamodb:us-east-1:*:table/${self:provider.environment.PROD_TABLE}"

起初,我只是将Resource块更新为下面的值并部署

 - "arn:aws:dynamodb:us-east-1:*:table/${self:provider.environment.DEV_TABLE}"

部署后,我在 CloudWatch 中收到此(已编辑)错误:

AccessDeniedException: User: arn:aws:sts::<redacted>:assumed-role/... is not authorized to perform: dynamodb:DescribeTable on resource: arn:aws:dynamodb:us-east-1<redacted>/PROD_TABLE

注意,arn:aws:dynamodb 资源(上面)引用的是旧表

重新部署不会更新新创建的代入 (lambda) 角色的资源。我不知道如何在没有“删除”和“部署”的情况下实现这一点。

放弃精确的解决方案是否有一种更简单的方法可以切换到不同的 ddb 而不会对我们的用户造成任何重大干扰?

1 个答案:

答案 0 :(得分:0)

基于我在日志中看到的内容

<块引用>

AccessDeniedException:用户:arn:aws:sts::::assumed-role/... 无权执行:dynamodb:DescribeTable 资源:arn:aws:dynamodb:us-east-1/PROD_TABLE

配置已经生效,因为用户现在没有权限在旧表 (PROD_TABLE) 上描述表。 可能在代码中的某个地方,您仍在尝试使用旧表而不是新表。

如果你仍然需要这个,你可以给两个表的角色权限:

iamRoleStatements: 
   - Effect: Allow
     Action:
         - dynamodb:DescribeTable
         - dynamodb:Query
         - dynamodb:Scan
         - dynamodb:GetItem
         - dynamodb:PutItem
         - dynamodb:UpdateItem
         - dynamodb:DeleteItem
     Resource:
         - "arn:aws:dynamodb:us-east-1:*:table/${self:provider.environment.PROD_TABLE}"
         - "arn:aws:dynamodb:us-east-1:*:table/${self:provider.environment.ENV_TABLE}"