8

Я использую API AWS Javascript и пытается получить назначенную Cognito ID:AWS 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": [ 
     "*" 
    ] 
}] 
} 

ответ

20

Наиболее распространенная причина этой ошибки заключается в том, что ваши роли не настроены, чтобы доверять пулу идентификаторов. Вы должны подтвердить, что идентификатор пула идентификаторов, указанный в ваших отношениях доверия, совпадает с пулом идентификаторов, который вы используете.

Дополнительная информация о доверительных отношениях в Amazon Cognito находится в нашем developer guide.

+0

Сначала я поставил RoleArn в CognitoIdentityCredentials() и получил littl далее. Затем я понял, что идентификатор идентификатора когнито в отношениях доверия неверен. Я не знаю, как туда попал неправильный идентификатор. – drfence

+2

Это абсолютно правильный ответ. –

18

После некоторого рытья я понял, что вы должны добавить 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 вашей роли для удостоверения пула.

Единственный документ, который упоминает это правильно, - this one.

неправильные:

Может быть, я что-то отсутствует, но это, конечно, сбивает с толку.

+3

ВЫ БОГУ ДЛЯ МЕНЯ – ryutamaki

+0

Я не думаю, что это необходимо. Как сказал Боб в другом ответе, вы можете настроить отношения доверия для своей роли IAM. Я случайно вызвал 'InvalidIdentityPoolConfigurationException' на' AWS.config.credentials.get', чтобы произойти, повторно создав свой пул идентификаторов и забыв обновить отношения доверия для роли IAM с аутентифицированной когнито. –

+1

Кроме того, мне не нравится идея разоблачить идентификатор моей учетной записи AWS и информацию о роли на общедоступном веб-сайте в js. –

1

Проверьте раздел «Целевые отношения» роли, назначенной вашему пулу идентификаторов, пользователям аутентификации. Убедитесь, что у вас есть политики, определяющие доступ к вашему бассейну Cognito.

Самый простой способ, чтобы получить заявления требование политики является,

  1. Редактировать бассейн
  2. Создать новую роль идентичности пула
  3. В IAM редактировать эту роль, чтобы скопировать политические заявления
  4. Добавить эти доверительные отношения к вашей требуемой существующей роли

 Смежные вопросы

  • Нет связанных вопросов^_^