我继承了一个使用 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 而不会对我们的用户造成任何重大干扰?
答案 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}"