Конфигурирование Amazon Mobile Analytics и AWS Cognito в моем приложении для iOS вызывает некоторые исключения, связанные с IAM

Вот ошибка, которую я получаю:

AWSiOSSDKv2 [Ошибка] AWSMobileAnalyticsDefaultDeliveryClient.m строка:282 
| -[AWSMobileAnalyticsDefaultDeliveryClient submitEvents:andUpdatePolicies:] 
| Невозможно успешно доставить события на сервер. Код ответа: 0. 
Сообщение об ошибке:
Ошибка домена =com.amazonaws.AWSCognitoIdentityErrorDomain Code=6 
Операция не может быть завершена.

У меня есть AuthRole в IAM со следующей политикой:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "mobileanalytics:PutEvents",
        "cognito-sync:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

И одна роль Unauth:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "mobileanalytics:PutEvents",
        "cognito-sync:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Упоминание строки в IAM под cognito-identity.amazonaws.com:aud условия соответствуют тому, что заявлено в моем приложении.

Я не понимаю, где проблема.

РЕДАКТИРОВАТЬ

Код настройки (Swift).

private func _configureAWSServiceManager() {
    let credentialsProvider = AWSCognitoCredentialsProvider(
        regionType: Config().amazonRegionType,
        identityPoolId: Config().amazonCognitoIdentityPool)
    let configuration =
    AWSServiceConfiguration(region: Config().amazonRegionType,
        credentialsProvider: credentialsProvider)
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration =
    configuration
}

private func _configureMobileAnalytics() {
    let mobileAnalyticsConfiguration = AWSMobileAnalyticsConfiguration()
    mobileAnalyticsConfiguration.transmitOnWAN = true;

    let analytics = AWSMobileAnalytics(
        forAppId: Config().amazonMobileAnalyticsAppId,
        configuration: mobileAnalyticsConfiguration,
        completionBlock: nil)
    _analytics = analytics
}

Оба вызываются последовательно в AppDelegate в application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) функция.

РЕДАКТИРОВАТЬ / Решение: после очередной проверки случается, что шаг создания Cognito Identity Pool действительно создал роль, но эта роль не была назначена в unauthenticated role... Глупая вещь, как всегда при правильном управлении на AWS.

2 ответа

Решение

Проблема связана с CognitoIdentity, а не с MobileAnalytics. Согласно документу, AWSCognitoIdentityErrorDomain Code=6 означает InvalidIdentityPoolConfiguration.

"У пула удостоверений нет роли, связанной с данным типом аутентификации (auth/unauth) или в случае сбоя AssumeRole".

Моим предложением будет вход в AWS Web Console -> Cognito, дважды проверьте настройки пула удостоверений. и убедитесь, что RegionType соответствует тому, который вы создали в веб-консоли (в верхнем правом углу экрана): CognitoIdentity current поддерживает us-east-1 и eu-west-1.

Для MobileAnalytics убедитесь, что вы задали для configuration.serviceConfiguration.regionType только us-east-1.

http://docs.aws.amazon.com/AWSiOSSDK/latest/Constants/AWSCognitoIdentityErrorType.html

Похоже, вы пытаетесь использовать регион, отличный от AWSRegionUSEast1. Сервис Amazon Mobile Analytics в настоящее время доступен только в AWSRegionUSEast1.

В частности:

AWSServiceConfiguration(region: Config().amazonRegionType,
    credentialsProvider: credentialsProvider)

Должно быть:

AWSServiceConfiguration(region: AWSRegionUSEast1,
    credentialsProvider: credentialsProvider)

Хотя вы можете использовать любой доступный регион идентификации Cognito, события должны быть отправлены в AWSRegionUSEast1.

let credentialsProvider = AWSCognitoCredentialsProvider (regionType: AWSRegionEUWest1,
        identityPoolId: Config (). amazonCognitoIdentityPool)
let configuration = AWSServiceConfiguration (регион: AWSRegionUSEast1,
        credentialsProvider: credentialsProvider)
Другие вопросы по тегам