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