初めに
こんにちは、株式会社BFT新人エンジニアのないとうです。
CognitoのIDプールのロールを変更しようとしたところ
「There was a problem modifying this identity pool. Please try again.」
というエラーが発生しました。
AmazonCognitoPowerUserのポリシーを持ったアカウントでロールの変更を行ったのに、エラーが発生したのでなぜなのか考えてみました。
結果としてエラーが解消したので、同じエラーに困っている人の参考になればと思います。
ポリシーを追加する
Lambdaなどに実行ロールを付与するとき「"iam:PassRole"」のポリシーを付与するのですが、AmazonCognitoPowerUserには「"iam:PassRole"」のポリシーがありませんでした。
そこで同じようにポリシーを付与することとしました。
さらに今回はロールを作成とアップデートそれぞれの権限もつけたかったので以下のようなポリシーとなりました。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:PutRolePolicy", "iam:UpdateRole" ], "Resource": [ "IDプールに設定するロールのarn" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "cognito-identity.amazonaws.com" } } } ] }
このポリシーを追加してIDプールのロール変更を行いましたが、エラーが解消されませんでした。
管理者権限で変更ができるか確認
一度管理者権限でIDプールのロールを変更したところ問題なく変更することができたので、やはり何かポリシーが不足していると考えられます。
またAmazonCognitoPowerUserのポリシーには
「"cognito-identity:*","cognito-idp:*","cognito-sync:*"」
とcognito関連のポリシーはすべて所持しているので、ポリシーの中でもIAM関連のポリシーが不足していると考えられます。
追加するポリシーの変更
先ほどのポリシーでは、cognito-identityのサービスにしか付与していなかったのですべてのサービスに付与できるようにしたいと思います。
ただし Resource、Conditionの設定値がどちらもすべて許可だとセキュリティに問題があるので変更を行いたいロールのみに「"iam:PassRole"」を付与するようにして作成しました。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:PutRolePolicy", "iam:UpdateRole" "iam:PassRole" ], "Resource": [ "IDプールに設定するロールのarn" ] } ] }
このポリシーを追加してIDプールのロール変更したところ正常にロールの変更を行うことができました。
終わりに
今回はロールの作成とアップデートしたかったので、関連するポリシーを設定しましたが
AmazonCognitoPowerUserのポリシーを持っていれば
「"iam:PassRole"」ポリシーを追加するだけで正常に動作しそうです。
でも1つだけならAmazonCognitoPowerUserに追加してほしかった…。
それはさておき同じエラーが発生した人の助けになれば幸いです。
それでは。
参照
awsディスカッションフォーラム
https://forums.aws.amazon.com/thread.jspa?threadID=330579