AWS AppSync, использующий неправильную роль Iam - PullRequest
0 голосов
/ 03 мая 2018

Я использую службы, в том числе DynamoDB и S3, с ios для пользовательского входа в пулы пользователей, которые используются федеративным удостоверением, чтобы назначать роли для аутентифицированных и неаутентифицированных пользователей. Это работает отлично.

Затем, когда я использую AWS AppSync, я просто выполняю мутацию и получаю сообщение об ошибке «Невозможно принять роль arn: aws: iam :: xxxxxxxxxx: role / xxxxxxxxx. Я не хочу использовать эту роль arn: aws: iam: xxx / xxx, которую пытается использовать AppSync, и роль iam отличается от роли, которую DynamoDb и s3 почему-то используют, хотя я не изменяя никакие когнитоиды, используемые в коде. Пожалуйста, смотрите ниже пример кода.

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// CognitoIdentityUserPoolId is the id of the federated identity from console. works fine with all services except for AppSync by wrong Iam role being chosen
  let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil)

  let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: CognitoIdentityUserPoolAppClientId, clientSecret: CognitoIdentityUserPoolAppClientSecret, poolId: CognitoIdentityUserPoolId)

  AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: AWSCognitoUserPoolsSignInProviderKey)

  pool = AWSCognitoIdentityUserPool(forKey: AWSCognitoUserPoolsSignInProviderKey)

  let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: CognitoIdentityUserPoolId, identityProviderManager:pool)

  let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider)

  AWSServiceManager.default().defaultServiceConfiguration = configuration

  pool?.delegate = self

  return true 
}
// In SampleViewController
  // after user signs in
  let appSyncConfig = try AWSAppSyncClientConfiguration(url: AppSyncEndpointURL, serviceRegion: CognitoIdentityUserPoolRegion, userPoolsAuthProvider: self)

  // Initialize the AWS AppSync client
  self.appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig)

  // Set id as the cache key for objects
  self.appSyncClient?.apolloClient?.cacheKeyForObject = { $0["id"] }

// later on in the file....
extension SampleViewController: AWSCognitoUserPoolsAuthProvider{
  func getLatestAuthToken() -> String {
    return (myUserSess?.idToken?.tokenString)!
  }
}

Любая помощь / причина, почему AWS AppSync пытается использовать неправильное имя Iam?

1 Ответ

0 голосов
/ 03 мая 2018

Где вы получаете это сообщение? В консоли при использовании страницы запросов или на клиенте? Если он находится в консоли, то проблема, вероятно, связана с ролью IAM для вашего источника данных и может иметь смысл воссоздать его или обеспечить следующую политику доверия:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "appsync.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Если это на клиенте, то ошибка может быть при инициализации поставщика Cognito Identity или конструктора AppSync.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...