2012年2月24日金曜日

DynamoDB:IAMでのUserPolicyによるアクセス制限

諸事情で、ちょっといまAWSのDynamoDBについて調査中のメモ書き。
DynamoDBをラボで利用しようかと検討しているのだが、問題となるのはゼミ内で共有する時に問題となるのがテーブルへのアクセス制御。EclipseのPluginを使うとテーブルが全て見えてしまうのでこれは正直都合が悪い。そこで、要求仕様として
  • ユーザごとにテーブルへのアクセス制限をする。具体的にはテーブルを見えないようにする。
というのを設定したわけだが、ここでちょっとハマった。。。
DynamoDBではIAMを用いてポリシーを記述することができるらしく、DynamoDBのテーブル参照のActionはおそらく、
  • dynamodb:ListTables
なんだろうと推測。これをユーザとテーブルに対応したARNでDenyさせとけばいいと思ったわけだが、どうやらListTablesのアクションはARNでは制御できないとか。。。。
具体的にいうと
"Resource": "arn:aws:dynamodb:*:xxxxxxxxxxxxx:table/table1"
という記述で、table1に対してDenyするということはできない。ここは、
"Resource": "*" とするしかないわけだ。つまり、
  • テーブルリストは全て見せるか全て見せないかの2択。
  • アイテムの参照のレベルでテーブル毎にアクセス制限をつける
という戦略をとるしかないようだ。具体的には、
  • 全てのリソース(テーブル)に対する"dynamodb:ListTables"をAllowとするステートメントを用意
  • 特定のテーブルに対してアイテムのScanやCRUD操作ができるActionをAllowとするステートメントを用意
とすれば良いようだ。

なお、テーブル毎にステートメントを書いていくのは面倒な気がするがちょっとしたコツがある。AWSのARNの書き方では、*を利用した前方一致の指定ができる。そこで、プロジェクト毎にテーブル名の名前の付け方を決めておけば、*で一発で検索できる。例えばtest用のテーブルにtestという接頭語をつけるようにしておけば、test*の指定でOKとなる。


0 件のコメント:

コメントを投稿