7

我已经通过documentation远去又密切反映我的使用情况不同的是,我不能使用谷歌,Facebook或亚马逊作为我的身份提供者,但我已经有为经过身份验证的用户提供企业级OAuth 2.0访问令牌。细粒度的访问控制与亚马逊迪纳摩DB与卧式信息隐藏

我知道我可以使用AWS STS提供的Enterprise Federated支持获取临时凭证并使用它们来进一步访问AWS资源,但我无法理解如何配置IAM策略以使用这些凭证来实现横向信息躲了起来。

我在DynamoDB中有一些表,我存储了我的应用程序的所有用户的详细信息,我的应用程序支持多个租户,所以我希望一个租户的用户不能访问其他租户的数据。我可以配置的IAM策略类型:

"Condition": { 
      "ForAllValues:StringEquals": { 
       "dynamodb:LeadingKeys": ["${www.amazon.com:user_id}"] 
      } 
     } 

现在我的用户不通过亚马逊(或谷歌或Facebook)登录的,所以我不能使用的按键,如“$ {www.amazon.com :user_id}“等。另外我的一些表的哈希键是复合的。

所以我的问题是如何在数据库级实现多租户,并能够隔离或分离每个租户的数据,即隐藏我应该无法访问的用户的特定行。

是否可以同时定义IAM策略,以指定自定义策略的变量,并指定如何解决这些在运行?或者其他的方式呢?

Dynamo中的我的表目前有复合哈希键,它们是Tenant_ID和User_ID的组合,所以我可以在IAM策略中指定某种规则,以便我能够实现水平信息隐藏?

如果您需要更多关于我的用例的信息,请告诉我。

问候, Agraj

回答

0

为了使fine-grained data access in DynamoDB,您必须指定在DynamoDB IAM政策的IAM Policy Element Variable

一个典型的政策可能是这样的:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "FullAccessToUserItems", 
      "Effect": "Allow", 
      "Action": [ 
       "dynamodb:*" 
      ], 
      "Resource": [ 
       "arn:aws:dynamodb:*:table/*" 
      ], 
      "Condition": { 
       "ForAllValues:StringEquals": { 
        "dynamodb:LeadingKeys": [ 
         "${cognito-identity.amazonaws.com:sub}" 
        ] 
       } 
      } 
     } 
    ] 
} 

哪里${cognito-identity.amazonaws.com:sub}是代表用户在Cognito子的IAM政策变量。

不幸的是,亚马逊不公布可用策略变量的列表。这意味着你的用户管理通过亚马逊管理,以实现细粒度的安全。您无法定义自己的策略变量 - 它们必须是预定义的Amazon变量 - 因此,细粒度的安全性仅适用于用户在Amazon中进行管理的情况。

另外您DynamoDB分区键具有对政策变量相匹配。例如,你的表分区键必须是Cognito子分区。

如果您从Cognito收到您的OAuth令牌,您可以简单地将其发布到亚马逊Token Endpoint,它将返回包含用户Cognito子项的id_token。

+0

谢谢Stu回复。然而,我目前无法接受它作为正确的答案,因为我现在无法尝试。两年前我已经从这个项目中走了出来。如果其他人可以验证这个答案是正确的,我会很高兴接受这是正确的答案。 – Agraj