DynamoDB 需要的权限
本文介绍 DynamoDB 作为源端或对端数据源迁移或同步数据时,CloudCanal 所需的账号权限。
作为源端
全量迁移
- 需要对 DynamoDB 表执行 Scan / Query / GetItem / BatchGetItem 权限,以及 ListTables / DescribeTable 来发现表。其中 ListTables 为 CloudCanal 添加数据源时连接测试所需,缺失时连接测试会报
not authorized ... ListTables错误,请勿省略。
示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBTableReadAndList",
"Effect": "Allow",
"Action": [
"dynamodb:ListTables",
"dynamodb:DescribeTable",
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:GetItem",
"dynamodb:BatchGetItem"
],
"Resource": "*"
}
]
}
增量同步
- 需要读取 DynamoDB Streams,包括 ListStreams / DescribeStream / GetShardIterator / GetRecords。
示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBStreamReadAll",
"Effect": "Allow",
"Action": [
"dynamodb:ListStreams",
"dynamodb:DescribeStream",
"dynamodb:GetShardIterator",
"dynamodb:GetRecords"
],
"Resource": "*"
}
]
}
最小权限配置(推荐)
如果希望将权限收敛到具体表,可参考以下按 Discovery / Table / Stream 三段拆分的最小权限策略 :
- Discovery 段:
ListTables、ListStreams属于全局列表类 Action,不支持资源级授权,只能配置Resource: "*"。 - Table 段:全量迁移所需,资源 ARN 收敛到具体表及其全局二级索引。若任务不涉及全量迁移,可删除
GetItem / BatchGetItem / Query / Scan中实际未用到的 Action。 - Stream 段:增量同步所需。注意 Stream 资源 ARN 的格式为
table/<表名>/stream/*,不能只写表 ARN,否则 DescribeStream 会被拒绝。
示例(请替换 <Region>、<Account-ID>、<表名>):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDbDiscovery",
"Effect": "Allow",
"Action": [
"dynamodb:ListTables",
"dynamodb:ListStreams"
],
"Resource": "*"
},
{
"Sid": "DynamoDbTableRead",
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable",
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": [
"arn:aws:dynamodb:<Region>:<Account-ID>:table/<表名>",
"arn:aws:dynamodb:<Region>:<Account-ID>:table/<表名>/index/*"
]
},
{
"Sid": "DynamoDbStreamRead",
"Effect": "Allow",
"Action": [
"dynamodb:DescribeStream",
"dynamodb:GetShardIterator",
"dynamodb:GetRecords"
],
"Resource": "arn:aws:dynamodb:<Region>:<Account-ID>:table/<表名>/stream/*"
}
]
}