【AWS】DynamoDBへのIAM設定
以前のエントリー『【AWS】DynamoDB Localにnode.jsでアクセスする』にて、DynamoDB Localを使って作業をしていましたが、
いよいよ本物のDynamoDBにアクセスしたくなった。
サーバーに適用する予定だった作成済みの、IAMユーザー情報に新たにDynamoDB用の設定を付け足します。
下記のような内容です。
{ "Version": "YYYY-MM-DD", //自動で発版される "Statement": [ { "Sid": "Stmt1234567890123", //自動で発版される "Effect": "Allow", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:GetRecords", "dynamodb:ListTables", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Resource": [ "*", "arn:aws:dynamodb:ap-northeast-1:[使用するAWSアカウントID]:user/${aws:username}" ] } ] }
実は記事に書くまでに、かなりハマッてました。GWの一日を使ったという、とても大きな勉強代でした。
何にハマッたかというと、”Resource”の設定内容です。
並行して作業してるAndroidアプリがあるのですが、そっちでもアプリ用のIAMを作成していて、”Resource”のARNを
arn:aws:s3:::バケット名/パス/*
と書いて、意図通りに動いていたので同じように書いたわけです。
ところが、これでは『「arn:aws:iam::AWSアカウントid:user/IAMユーザー名」に、DynamoDB APIを実行する権限はないぞ』と怒られてしまい、何が悪いのか分からなかった。
色々と記事を探していて、こちらのcloudpackさんのブログからヒントを見つけました。
最初のAllowでDescribeTableとListTablesを入れる事 →これで全体のテーブルリストを表示する事ができます。全体を表示できるように設定しておかないと、 自身のテーブルも表示出来ません。 この設定でテーブルリストの表示のみできるようになります。
記事の中盤あたりにこのように書いてあり、レスポンスのエラーメッセージにもDynamoDBのARNではなく、IAMのARNに対して権限が無いと言われていたので、冒頭の記載内容のように書いてシミュレートしたところ、意図通りの結果が得られました。
意図通りの結果が得られたからといって、”*”がセキュリティ的によろしくない気がします。
アドバイスやご指摘よろしくお願いします。