Я использую службы, в том числе 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?