我目前正在尝试Amazon DynamoDB使用AWS SDK for JavaScript in the Browser直接在浏览器中创建完整的JavaScript应用程序。 但是,我无法保护对DynamoDB的访问权限。
在IAM
中,我使用此政策创建了一个名为Users
的群组:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:BatchWriteItem",
"dynamodb:DeleteItem",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:Query",
"dynamodb:UpdateItem"
],
"Resource": ["arn:aws:dynamodb:eu-west-1:1234567891234:table/*"],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": ["${aws:username}"]}
}
}]
}
我有一个名为Bahaika
的用户属于Users
组。
在DynamoDB中,我创建了两个项目:
-------------------------
| Dog ID | User Id |
-------------------------
| Dog1 | Bahaika |
-------------------------
| Dog2 | NotBahaika |
-------------------------
当我使用Bahaika的Access Key ID
和Secret Access Key
登录时,我希望能够只获得Dog1,而不是Dog2。
我还想在项目添加到表格时自动添加User ID
属性。
最后,我希望能够列出User ID
等于记录的表的所有表项。
我该如何设法做到这一点?
我已阅读Fine-Grained Access Control for DynamoDB 但我想我错过了什么。
答案 0 :(得分:1)
您的IAM Condition dynamodb:LeadingKeys
使用的是常规IAM policy variable ${aws:username}
,使用Web Identity Federation时不会出现,请参阅Request Information That You Can Use for Policy Variables中的表格。相反,您需要使用Fine-Grained Access Control for DynamoDB中引用的${www.amazon.com:user_id}
以及各种Example Policies for Fine-Grained Access Control。
答案 1 :(得分:0)
如果您可以使用他们的亚马逊,Facebook或Google凭据对您的用户进行身份验证,那么您可以使用Web身份联合(简单来说)将使用您的应用可以临时AWS安全凭据从这3个提供商之一交换令牌用于访问DynamoDB。在AWS文档中有一些值得阅读的文章。
http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring-wif.html http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WIF.html