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



我目前正在尝试使用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 IDSecret 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

相关内容

  • 没有找到相关文章

最新更新