我目前正在尝试使用Amazon DynamoDB在浏览器中使用用于JavaScript的AWS SDK直接创建一个完整的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 |
-------------------------
我希望能够只得到Dog1,但不是Dog2当我与Bahaika的Access Key ID
和Secret Access Key
登录。
我还想在向表中添加项时自动添加User ID
属性。最后,我希望能够列出User ID
等于已记录的表的所有项。
我怎么能做到这一点呢?
我已经读过DynamoDB的细粒度访问控制但我想我错过了一些东西
您的IAM条件dynamodb:LeadingKeys
正在使用常规的IAM策略变量${aws:username}
,这在使用Web Identity Federation时不存在,请参阅您可以用于策略变量的请求信息中的表。相反,您需要使用DynamoDB的细粒度访问控制中引用的${www.amazon.com:user_id}
以及细粒度访问控制的各种示例策略。
如果你可以使用用户的Amazon、Facebook或Google凭证对其进行身份验证,那么你可以使用web identity federation(简单地说),它将从这3家提供商之一的AWS安全凭证中交换令牌,您的应用程序可以使用该令牌访问DynamoDB。在AWS文档中有几篇关于这个主题的文章值得一读。
http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring-wif.htmlhttp://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WIF.html