我继承了一个使用ddb的API。不幸的是,一切都是在一个生产表上完成的。我正在完成开发设置的过程中,所以我们不必在生产表上进行实验。事实证明,新数据要干净得多,我们的客户想要使用它。我想,我可以简单地更新我们的ddb配置的资源块,以指向新的ddb表资源,但这就是我遇到麻烦的时候。
部分配置如下:
...
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)角色更新资源。我不知道如何使这种情况发生没有"删除"one_answers"部署!">
放弃一个确切的解决方案,是否有一种更容易的方法来切换到不同的ddb,而不会对我们的用户造成任何重大干扰?
基于我在日志中看到的
AccessDeniedException: User: arn:aws:sts::: assumption -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}"