AWS Cognito Неверная конфигурация пула идентификаторов
Я использую API JavaScript Javascript и пытаюсь получить назначенный идентификатор cognito:
AWS.config.credentials.get(function(err) {
if (!err) {
console.log("Cognito Identity Id: " + AWS.config.credentials.identityId);
}
});
Почему это приводит к ошибке 400 с сообщением ниже?
{"__type":"InvalidIdentityPoolConfigurationException","message":"Invalid identity pool configuration. Check assigned IAM roles for this pool."}
У меня есть роли IAM, настроенные для аутентифицированных и неидентифицированных пользователей.
{
"Version": "2012-10-17",
"Statement": [{
"Action": [
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Effect": "Allow",
"Resource": [
"*"
]
}]
}
Ответы
Ответ 1
Наиболее распространенная причина этой ошибки заключается в том, что ваши роли не настроены на доверие вашему пулу идентификаторов. Вы должны подтвердить, что идентификатор пула идентификаторов, указанный в ваших отношениях доверия, совпадает с пулом идентификаторов, который вы используете.
Более подробную информацию о доверительных отношениях в Amazon Cognito можно найти в нашем руководстве разработчика.
Ответ 2
После некоторого копания я понял, что вы должны добавить RoleArn и AccountId к своим учетным данным.
Несмотря на то, что большая часть документации упоминает об этом как о достаточном количестве:
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:xxxxx-a87e-46ed-9519-xxxxxxx',
});
Этого было недостаточно.
Я должен был сделать это:
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:xxxxx-a87e-46ed-9519-xxxxx',
RoleArn: 'arn:aws:iam::xxxxx:role/Cognito_xxxxUsersUnauth_Role',
AccountId: 'xxxxxxxxx', // your AWS account ID
});
Вы должны указать ARN своей роли для своего пула идентификаторов.
Единственный документ, который упоминает это правильно, этот.
Неправильные:
Возможно, я что-то пропустил, но это, конечно, запутывает.
Ответ 3
Проверьте раздел "Доверительные отношения" роли, назначенной вашему пулу идентификаторов, пользователям аутентификации.
Убедитесь, что у вас есть политики, определяющие доступ к вашему пулу Cognito.
Самый простой способ получить инструкции политики требований:
- Изменить пул
- Создать новую роль для пула идентификаторов
- В IAM отредактируйте эту роль, чтобы скопировать инструкции политики
- Добавьте эти доверительные отношения в требуемую существующую роль.
Ответ 4
Я проверял доверительные отношения своих ролей, настроенных для "Роли с проверкой подлинности" и "Роли без проверки подлинности", для моего пула удостоверений несколько раз, но ошибка все же произошла. Изучив всю конфигурацию пула идентификаторов, я понял, что в
- Провайдеры аутентификации
- Cognito
- Аутентифицированный выбор ролей
Я выбрал "Выбрать роль из токена", и моя неправильно настроенная роль была той, которую я прикрепил к группе Cognito для моих пользователей. Таким образом, обновление Доверительных отношений для этой роли устранило проблему.
Надеюсь, это поможет кому-то :)
Ответ 5
Я столкнулся с этой ошибкой, и моя проблема оказалась в том, что мой пользователь играл роль, не прошедшую проверку подлинности, потому что я возвращал AWSTask (result: nil) из функции logins() в моем собственном CognitoDeveloperIdentityProvider.
Ответ 6
В моем случае я использую провайдера идентификации SAML. Действие в политике ролей IAM должно быть следующим: "Action": "sts:AssumeRoleWithSAML"
. Но это коренная причина исключения. Я должен вручную изменить его на "Action": "sts:AssumeRoleWithWebIdentity"
. Оказывается, любая роль, созданная пулом идентификации Cognito, будет использовать "Action": "sts:AssumeRoleWithWebIdentity"
. Он не будет проверять ваш тип провайдера идентификации. Я считаю, что это ошибка.