2017-02-21 41 views

回答

1

您可以使用類似於此的IAM策略,並將其連接到您的組或用戶(S):

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "StatementForTable1", 
      "Effect": "Allow", 
      "Action": [ 
       "dynamodb:Scan", 
       "dynamodb:Query", 
       "dynamodb:GetItem", 
       "dynamodb:BatchGetItem" 
      ], 
      "Resource": [ 
       "arn:aws:dynamodb:REGION:ACCOUNT:table/Table1" 
      ] 
     }, 
     { 
      "Sid": "StatementForTable2", 
      "Effect": "Allow", 
      "Action": [ 
       "dynamodb:Scan", 
       "dynamodb:Query", 
       "dynamodb:GetItem", 
       "dynamodb:BatchGetItem", 
       "dynamodb:BatchWriteItem", 
       "dynamodb:PutItem", 
       "dynamodb:UpdateItem" 
      ], 
      "Resource": [ 
       "arn:aws:dynamodb:REGION:ACCOUNT:table/Table2" 
      ] 
     } 
    ] 
} 
1

正如陳述here

以下策略可以附加到IAM組,並授予用戶 以編程方式訪問名稱爲 匹配用戶名稱的DynamoDB表的權限。例如,用戶Bob可以在名爲Bob的表中執行任何 DynamoDB操作。該策略可以附加到 一個包含允許每個管理自己的 DynamoDB表的用戶的組。

所以,你可以設置你的政策如下,如果要授予FULL訪問特定的用戶對一個表:

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
    "Effect": "Allow", 
    "Action": "dynamodb:*", 
    "Resource": "arn:aws:dynamodb:AWS-REGION-IDENTIFIER:ACCOUNT-ID-WITHOUT-HYPHENS:table/${aws:username}" 
    }] 
} 

使用的IAM策略條件的細粒度訪問控制

例如,我們假設我們想授予限制訪問表中特定屬性的權限:

樣品IAM策略:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "LimitAccessToSpecificAttributes", 
      "Effect": "Allow", 
      "Action": [ 
       "dynamodb:UpdateItem", 
       "dynamodb:GetItem", 
       "dynamodb:Query", 
       "dynamodb:BatchGetItem", 
       "dynamodb:Scan" 
      ], 
      "Resource": [ 
       "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" 
      ], 
      "Condition": { 
       "ForAllValues:StringEquals": { 
        "dynamodb:Attributes": [ 
         "UserId", 
         "TopScore" 
        ] 
       }, 
       "StringEqualsIfExists": { 
        "dynamodb:Select": "SPECIFIC_ATTRIBUTES", 
        "dynamodb:ReturnValues": [ 
         "NONE", 
         "UPDATED_OLD", 
         "UPDATED_NEW" 
        ] 
       } 
      } 
     } 
    ] 
} 

說明:

這部分是讓那相關用戶可以執行的操作。

"Action": [ 
    "dynamodb:UpdateItem", 
    "dynamodb:GetItem", 
    "dynamodb:Query", 
    "dynamodb:BatchGetItem", 
    "dynamodb:Scan" 
], 

如在第一樣品中,接入點在內容描述說明。

"Resource": [ 
      "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" 
     ] 

這裏,使用關鍵字 'ForAllValues:StringEquals'。指定的用戶 只能請求屬性「UserId」和「TopScore」。

"ForAllValues:StringEquals": { 
       "dynamodb:Attributes": [ 
        "UserId", 
        "TopScore" 
       ] 
      } 

的StringEqualsIfExists的定義可以在以下的說明來理解:

在權限策略的StringEqualsIfExists子句確保 以下:

如果用戶指定的選擇參數,那麼它的值必須是 SPECIFIC_ATTRIBUTES。此要求可防止來自 的API操作返回任何不允許的屬性,例如從索引 投影。如果用戶指定了ReturnValues參數,則其值爲 的值必須爲NONE,UPDATED_OLD或UPDATED_NEW。這是必需的 ,因爲UpdateItem操作還會執行隱式讀取操作 以在替換項目之前檢查項目是否存在,並且如果請求可返回 以前的屬性值。以這種方式限制 ReturnValues確保用戶只能讀取或寫入允許的屬性 。 StringEqualsIfExists子句保證在允許的操作的上下文中,只有 這些參數之一 - Select或ReturnValues - 可以根據 請求使用。

"StringEqualsIfExists": { 
       "dynamodb:Select": "SPECIFIC_ATTRIBUTES", 
       "dynamodb:ReturnValues": [ 
        "NONE", 
        "UPDATED_OLD", 
        "UPDATED_NEW" 
       ] 
      } 

你可以找到完整的樣本here

相關問題