AWSのLambdaでは実行ロールを用いてアクセス制御を行うわけだが、テンプレートポリシーのsimpleMicroServiceRoleを用いると、Cloud Watch LogsとDynamoDBの基本的な操作権限が与えられて便利だ。便利なのだが、Queryの権限がないので(Scanはあるのに)、その権限を追加するメモ。
Queryの権限を与える
AWSのLambdaでDynamoDBを操作したりなんだりするようなものを作ろうとしたとき、既存のロールとしてsimpleMicroServiceRoleあたりを使うサンプルが多いけれど、これはそのままだとdynamodb:Queryの権限がない。dynamodb:Scanはあるのに。
そこで、Queryの権限を与える必要がある。方法としては、simpleMicroServiceRoleの権限をいじるか、あるいはdynamodb:Scanを含むポリシーをアタッチしたロールを作成するか。全体的な影響を考えると、新たにロールを作ったほうが良いと思うが、まぁどちらも本質的にはdynamodb:Scanを含むポリシーをどうするか、というところだろう。
予め用意されているポリシーでは、まずAmazonDynamoDBFullAccessはもちろんQueryを含んでいる。しかし、これは中々強烈なロールなので抵抗がある。読み込みだけであれば、AmazonDynamoDBReadOnlyAccessもある。が、読み込みだけとはいえ明らかに使わない権限をたくさん与えてしまうことには変わりない。
ということで、dynamodb:Queryをもつポリシー作ったほうがよいかなと思うわけだが、既存のポリシーを改変するか、新たに作るか、まぁ新たに作ったほうが綺麗だとは思う。ポリシーはGUIで、IAMのポリシーの作成から割と楽に作れる。

Queryにチェック
テーブルの権限もちゃんとすべきなのだろうけれど、うちの環境ではまぁ特に問題なさそうだったので「すべて」にチェックを入れた。
で、このポリシーをsimpleMicroServiceRoleにアタッチするか、あるいは新たにロールを作ってアタッチし、そのロールをLambdaに適用するか。まぁ手間を惜しまず新たに作るほうが綺麗なのには違いなかろうが……。
と言いつつ、自分はsimpleMicorServiceRoleにあるポリシー自体を改変して対応してしまった。
LambdaでDynamoDBの権限を確認してみる。

Queryがアクションに追加されている
ちゃんと追加されている。
以上。

コメント