Как указать пул пользователей Amazon AWS в доверительных отношениях с Cognito Identity

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

Но теперь я пытаюсь установить доверительные отношения между пулом пользователей Cognito и пулом идентификаторов Cognito.

Во фрагменте кода ниже вы можете увидеть мои доверительные отношения для неаутентифицированной роли. (Версия роли, прошедшая проверку подлинности, точно совпадает в данный момент, в конечном итоге не будет, но я сделал их одинаковыми и дал обеим ролям привилегии, чтобы попытаться увидеть, как это работает). xxxx - это предварительно заполненный CognitoIdentityId, yyyy - номер моей учетной записи, а zzzz - идентификатор пула пользователей Cognito.

Я продолжаю получать ошибки, когда пытаюсь установить доверительные отношения и использовать приложение. Вот самая частая ошибка:

getCredentialsWithCognito:authenticated:customRoleArn:]_block_invoke |     GetCredentialsForIdentity failed. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=8 "(null)" UserInfo={__type=InvalidIdentityPoolConfigurationException, message=Invalid identity pool configuration. Check assigned IAM roles for this pool.}]
2016-08-29 21:50:11.634 signin[7778:1222711] AWSiOSSDK v2.4.7 [Error]    AWSCredentialsProvider.m line:577 | __44-[AWSCognitoCredentialsProvider credentials]_block_invoke.352 | Unable to refresh. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=8 "(null)" UserInfo={__type=InvalidIdentityPoolConfigurationException, message=Invalid identity pool configuration. Check assigned IAM roles for this pool.}]

Доверительные отношения:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "cognito-identity.amazonaws.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxxxxx”,
              "cognito-idp.amazonaws.com:aud": "arn:aws:cognito-idp:us-east-1:yyyyyyyy:userpool/zzzzzzzzz”
            },
            "ForAnyValue:StringLike": {
              "cognito-identity.amazonaws.com:amr": "unauthenticated",
              "cognito-idp.amazonaws.com:amr": "unauthenticated"
            }
          }
        }
      ]
    }

Отчасти проблема может заключаться в том, что я не понимаю формат строки «ognito-idp.amazonaws.com:aud »: «ognito-idp.amazonaws.com:aud». Я подозреваю, что мне следует каким-то образом изменить формат или указать другой домен amazonaws.com в качестве aud, но я попробовал дюжину комбинаций и потерпел неудачу.

Итак, вопрос: как определить доверительные отношения.

И дополнительный вопрос: есть ли идея, что если мой пользователь аутентифицируется с помощью пользовательского пула и если доверительные отношения указаны правильно, мой пользователь возьмет на себя роли, которые определяют это доверие? Или пользователь каким-то образом берет на себя только одну роль, и как эта роль выбирается Cognito, если существует несколько доверительных отношений?


person Bruce0    schedule 30.08.2016    source источник
comment
Настроен ли для cognito-identity.amazonaws.com:aud значение us-east-1: xxxxxxxxx ”с xxxxxxxxx? :-)   -  person kometen    schedule 01.09.2016
comment
да ... но xxx заменяется фактическим ключом   -  person Bruce0    schedule 04.09.2016


Ответы (1)


Здесь есть три проблемы в политике доверительных отношений:

  1. "ognito-idp.amazonaws.com:aud "не требуется, эту роль принимает на себя пул удостоверений, пул пользователей - это просто провайдер, это больше не актуально
  2. "ognito-idp.amazonaws.com:amr "не нужен
  3. Если это роль с аутентификацией, то amr должен быть аутентифицирован, а не не аутентифицирован.
person Yisha    schedule 01.09.2016
comment
У меня все еще не работает, но я избавился от неверной ошибки конфигурации (теперь я получаю либо не авторизованный, либо отсутствующий токен ... но это должен быть другой вопрос). Спасибо - person Bruce0; 04.09.2016