如何在与 Cognito Identity 的信任关系中指定 Amazon AWS 用户池

How to specify Amazon AWS User Pool in trust relationship with Cognito Identity

我有 AWS Cognito 用户池登录,我有一个联合身份池,用户池已连接并在控制台中指定为身份验证提供程序。

但现在我正试图在 Cognito 用户池和 Cognito 身份池之间建立信任。

在下面的代码片段中,您可以看到我对未经身份验证的角色的信任关系。 (经过身份验证的角色版本目前完全匹配,最终它不会,但我让它们相同并赋予两个角色特权以试图看到它工作)。 xxxx是预填的CognitoIdentityId,yyyy是我的账号,zzzz是Cognito用户池ID。

当我尝试创建信任关系和使用该应用程序时,我总是遇到错误。这是最常见的错误:

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"
            }
          }
        }
      ]
    }

部分问题可能是我不理解 "cognito-idp.amazonaws.com:aud": "cognito-idp.amazonaws.com:aud" 行的格式。我怀疑我应该以某种方式更改格式或将 amazonaws.com 的不同域指定为 aud,但我尝试了十几种组合但都失败了。

所以问题是:如何指定信任关系。

还有一个附属问题是: 如果我的用户通过用户池进行身份验证,并且正确指定了信任关系,那么我的用户将承担指定该信任的角色的想法是什么?或者用户是否仅以某种方式承担一个角色,如果存在多个信任关系,Cognito 如何选择该角色?

信任关系策略存在三个问题,

  1. "cognito-idp.amazonaws.com:aud" 不需要,这个角色由身份池承担,用户池只是一个提供者,不再相关
  2. "cognito-idp.amazonaws.com:amr"不需要
  3. 如果这是经过身份验证的角色,则 amr 应该经过身份验证而不是未经身份验证