chaliceはboto3で使っているメソッドから必要なIAMを自動的に付与(更新しないもできる)する機能を持ってるので、boto3でdynamodbを使ったりすれば、自動で付与されるけど、pynamodbを使った場合はそこまでは面倒見てくれないので、boto3でdynamoを利用せず、pynamodbのモデルしか用意してないと、こんな感じでdynamodbへのポリシーは無視される。
$ chalice gen-policy { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-idp:AdminCreateUser", "cognito-idp:AdminInitiateAuth", "cognito-idp:AdminRespondToAuthChallenge" ], "Resource": [ "*" ], "Sid": "275e6aad3b0a4356ac3b9ab90fbe2422" } ] }
なので、手動で管理する必要があるけど、Identity and Access Management (IAM)から編集するのはchalice使う意味なくなるので、.chalice/policy.jsonを利用する。
手動で変更してもいいけど、ミスってもいやなので、適当に下記のapp.pyにboto3でdynamoを操作する記述を追加
dynamodb.get_item(TableName="nanndemoiiyo") dynamodb.put_item(TableName="nanndemoiiyo") table = dynamodb.create_table(...
この状態でポリシーを見るとDynamodbのポリシーが入るので、jsonとして保存
$ chalice gen-policy > .chalice/policy.json $ cat .chalice/policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-idp:AdminCreateUser", "cognito-idp:AdminInitiateAuth", "cognito-idp:AdminRespondToAuthChallenge" ], "Resource": [ "*" ], "Sid": "c5c6757d1033420fa4ba529b67bd333d" }, { "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:GetItem", "dynamodb:PutItem" ], "Resource": [ "*" ], "Sid": "5a2f50fb91a34608b571409e5291041b" } ] }
環境によってサフィックスが必要
今回は「.chalice/policy.json」から「.chalice/policy-dev.json」に変更してデプロイ時は「–no-autogen-policy」をつければOK