Cognito ID Poolで指定するロールに、そのID Poolの作成時に生成したもの以外を指定する場合にはロールに信頼関係を追加する
初めに
Cognitoを用いてWebアプリケーションのログイン機構を作る場合、大体の場合はログインユーザーに対してAWSリソースの実行権限を与えるために、IDプールをセットで利用すると思います。
複数のIDプールを利用する必要があるものの、それぞれのIDプールから払い出す権限は同一でよい場合、紐づける「認証されていないロール」「認証されたロール」に、複数のIDプールで同一のIAMロールを指定することになると思います。
IDプールで使うIAMロールは、IDプール作成時に自動生成したロールをそのまま使い、別のIDプールを追加した時に既存のIDプール生成時に作られたロールを紐づけて使う、というやり方を取ることが考えられますが、この時に気を付けないと引っかかる権限問題がありましたのでご紹介します。
前提
- 2つのIDプールを利用するとする
- testIdPool
- testIdPool2
- 一方のIDプール作成時に作成したIAMロールを、もう一方のIDプールの「認証されたロール」「認証されていないロール」にそれぞれ設定
問題
前提の通りにIDプールとロールを作成/設定します。
testIdPool
の作成時に新しいIAMロールを作成します。
testIdPool2
を作成後、「IDプールの編集」から編集画面を開き、testIdPool
の作成時に作成したIAMロールを設定します。
この状態でIDプールからcredentialsを発行しようとすると、testIdPool
では問題なく可能ですが、testIdPool2
では以下のエラーが発生します。
InvalidIdentityPoolConfigurationException: Invalid identity pool configuration. Check assigned IAM roles for this pool.
解決
信頼関係タブを開き、「信頼関係の編集」からJSONの信頼関係ドキュメントを見てみると、以下のようになっていることが分かります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "ap-northeast-1:1d394b04-1f10-41dc-a277-71b5c953794f"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
ここで、Conditionにap-northeast-1:1d394b04-1f10-41dc-a277-71b5c953794f
というIDが指定されていることが分かりますが、これはこのロールを生成する元になった、testIdPool
のIDが設定されています。
該当のIDプールの「ID プールの編集」を開き、「ID プールの ID」を確認してみてください。
つまり、ConditionにこのロールをアタッチしたtestIdPool2
のIDが指定されていないために、
InvalidIdentityPoolConfigurationException: Invalid identity pool configuration. Check assigned IAM roles for this pool.
が発生しました。
解消には信頼関係ドキュメントのConditionに、紐づけるIDプールのIDを追加してやればいい、ということになります。
配列の形式にして、追加してやります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": [
"ap-northeast-1:1d394b04-1f10-41dc-a277-71b5c953794f",
"ap-northeast-1:8e7a8af9-4a66-4987-b0f0-4be1473895e8"
]
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
これでInvalidIdentityPoolConfigurationException
が発生することはなくなったと思います。
参考
Author And Source
この問題について(Cognito ID Poolで指定するロールに、そのID Poolの作成時に生成したもの以外を指定する場合にはロールに信頼関係を追加する), 我々は、より多くの情報をここで見つけました https://qiita.com/cold-wisteria/items/f71849d7941b75bb69be著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .