2017-02-21 1 views
0

私のプロジェクトではdynamodbテーブルを使用していますが、そのプロジェクトの開発者はほとんどいません。ユーザ固有の秘密鍵とアクセス鍵を与えて、特定のDynamodbテーブルのみを使用できるようにしたいと考えています。 (読み取りアクセス専用のテーブルと、読み取りアクセスと書き込みアクセス用のテーブル)。IAMポリシーを定義する方法ユーザーが特定のDynamodbテーブルに対してのみプログラム全体または制限されたアクセスを持つようにするにはどうすればよいですか?

あなたがこれと同じIAMポリシーを使用して、グループまたはユーザー(複数可)に添付でき

答えて

1

{ 
    "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は、 DynamoDBアクションをBobという名前のテーブルで実行できます。このポリシーは、 に、それぞれ独自の DynamoDBテーブルを管理することを許可されたユーザーを含むグループに割り当てることができます。

あなたがテーブルの特定のユーザにFULLアクセス許可したいのであれば、あなたは次のようにポリシーを設定することができます:ファイングレイン・アクセス・コントロールのためのIAMポリシー条件を使用して

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

たとえば、テーブル内の特定の属性へのアクセスを制限するアクセス許可を付与するとします。

サンプル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" 
], 

としては、最初のサンプル、アクセスポイントDESCで説明しました。キーワード ':StringEquals ForAllValues' はここで

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

、。指定されたユーザ は、属性 "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を見つけることができます。

関連する問題