如何使用IAM策略获得DynamoDB的细粒度访问控制?

时间:2014-06-20 11:56:40

标签: amazon-web-services amazon-dynamodb amazon-iam

我目前正在尝试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 IDSecret Access Key登录时,我希望能够只获得Dog1,而不是Dog2。

我还想在项目添加到表格时自动添加User ID属性。 最后,我希望能够列出User ID等于记录的表的所有表项。

我该如何设法做到这一点?

我已阅读Fine-Grained Access Control for DynamoDB 但我想我错过了什么。

2 个答案:

答案 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