我正在做一个与DynamoDB连接的概念证明,但我似乎有权限问题。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:*"
],
"Resource": [
"arn:aws:dynamodb:us-west-1:172777662485:table/*"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": [
"${www.amazon.com:user_id}"
]
}
}
}
]
}
代码:
DynamoDBContext context = new DynamoDBContext(new AmazonDynamoDBClient("...", "...", new AmazonDynamoDBConfig() { RegionEndpoint = RegionEndpoint.USWest1, MaxErrorRetry = 6 }));
var writeContext = context.CreateBatchWrite<Music>();
writeContext.AddPutItem(new Music() { Artist = "Test Artist", SongTitle = "SongTitle" });
writeContext.Execute();
我遇到的错误是:
arn:aws:iam::...:user/DynamoDBTestUser is not authorized to perform: dynamodb:BatchWriteItem on resource: arn:aws:dynamodb:us-west-1:172777662485:table/Music
有人在这里看到任何错误吗?
谢谢
您的策略似乎基于此文档中的一些样本:
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html
但是,您的代码似乎没有添加带有与用户名匹配的分区键的记录。
因此,有2种可能的解决方案,具体取决于您所需的结果。
解决方案1:
假设您只想将记录插入表中,则可以使用以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:*"
],
"Resource": "*"
}]
}
此策略授予用户完全DynyoDB访问任何DynamoDB资源。
解决方案2:
如果要限制限制对用户仅读取/放置记录的表的访问,则需要确保使用IAM用户名填充Music
结构中的主要密钥属性。