Доступ к Swift iOS S3 запрещен при использовании конфигурации Mobile Hub

В настоящее время я использую Mobile Hub в своем приложении. Когда я пытался использовать S3 для загрузки фотографий в корзину, я дословно скопировал функцию из документации здесь для загрузки/выгрузки файлов: https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-user-data-storage.html

Это мой код в Swift, пытающийся использовать S3TransferUtility:

func uploadData(data: Data, fileName: String) {

let expression = AWSS3TransferUtilityUploadExpression()
expression.progressBlock = {(task, progress) in
    DispatchQueue.main.async(execute: {
        // Do something e.g. Update a progress bar.
    })
}

var completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?
completionHandler = { (task, error) -> Void in
    DispatchQueue.main.async(execute: {
        // Do something e.g. Alert a user for transfer completion.
        // On failed uploads, `error` contains the error object.
    })
}

let transferUtility = AWSS3TransferUtility.default()

transferUtility.uploadData(data,
                           bucket: "my bucket name",
                           key: fileName,
                           contentType: "image/jpeg",
                           expression: expression,
                           completionHandler: completionHandler).continueWith {
                            (task) -> AnyObject? in
                            if let error = task.error {
                                print("Error: \(error.localizedDescription)")
                            }

                            if let res = task.result {
                                // Do something with uploadTask.
                                print(res)
                            }
                            return nil
}
}

Я получаю эту ошибку в консоли: Изображение ошибки в консоли

Я исследовал AWS S3 и предоставленный файл awsconfiguration.json, и, похоже, все в порядке:

Консоль AWS IAM

файл AWSConfiguration.json в моем проекте

Прямо сейчас я в замешательстве, потому что думал, что Mobile Hub должен заботиться о конфигурациях IAM, а не обо всем.

Может ли кто-нибудь указать мне правильное направление, чтобы исправить это? Спасибо.


person Jonathan Wong    schedule 31.07.2018    source источник
comment
При просмотре ведра в личных и защищенных папках был файл readme, в котором говорилось, что папки будут созданы для каждого пользователя в этом каталоге. Пользователи мобильного приложения могут загружать, скачивать и просматривать файлы только в своей собственной подпапке, но папки пусты, и я понятия не имею, как использовать эти папки. Может ли кто-нибудь помочь мне с этим? Спасибо   -  person Jonathan Wong    schedule 01.08.2018


Ответы (3)


AWS Mobile Hub создает следующие папки в корзине S3. Каждая папка имеет предварительно настроенные разрешения в IAM на основе статуса аутентификации Cognito пользователя вашего приложения.

  • Общественный

    Любой аутентифицированный пользователь может читать или писать в эту папку

  • Частный

    Аутентифицированные пользователи могут только читать или писать из своей папки (например, private/{identityId})

  • Защищено

    Любой аутентифицированный пользователь может читать, но только владелец может писать в свою папку (например, protected/{identityId})

  • Загрузки

    Любой аутентифицированный пользователь может писать, но только владелец может читать содержимое этой папки.

Этот предыдущий ответ также может быть полезен: Как загрузить файл в защищенную корзину s3 из Swift, используя корзину s3, созданную мобильным концентратором AWS?

person Dan    schedule 02.08.2018

Решение было связано с настройкой корзины, которую Mobile Hub выполняет автоматически, а также с частью кода во внешнем интерфейсе.

Начиная с внешнего интерфейса, вам необходимо вручную настроить свои учетные данные следующим образом:

//Setup the service configuration
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider)

//Setup the transfer utility configuration
let tuConf = AWSS3TransferUtilityConfiguration()
tuConf.isAccelerateModeEnabled = false


//Register a transfer utility object
AWSS3TransferUtility.register(
    with: configuration!,
    transferUtilityConfiguration: tuConf,
    forKey: "transfer-utility-with-advanced-options"
)


//Look up the transfer utility object from the registry to use for your transfers.
let transferUtility = AWSS3TransferUtility.s3TransferUtility(forKey: "transfer-utility-with-advanced-options")

Тип контента также должен быть image/png.

Наконец, при использовании мобильного концентратора внутри вашей корзины создаются четыре исходные папки. Вы должны указать, в какую папку вы хотите, чтобы ваш контент был загружен. Пока удалось выложить только в паблик. Вы можете указать это в параметре «key» в функции uploadData.

При просмотре ведра в личных и защищенных папках был файл readme, в котором говорилось: «Папки будут созданы для каждого пользователя в этом каталоге. Пользователи мобильного приложения могут загружать, скачивать и просматривать файлы только в своей собственной подпапке». но папки пустые и я понятия не имею как этими папками пользоваться. Может ли кто-нибудь помочь мне с этим? Спасибо

person Jonathan Wong    schedule 31.07.2018

Хорошо, я столкнулся с той же ошибкой и продолжал думать, почему я должен сделать ведро общедоступным, чтобы избавиться от этой ошибки. Потом я осознал одну глупую ошибку, которую совершил. Пока я добавлял это хранилище через Amplify CLI ($amplify добавить хранилище), есть опция, которая запрашивает «Аутентификация пользователей» или «Аутентификация и гость». После этого есть несколько вариантов, таких как

  1. Создать/обновить
  2. Читать
  3. Удалить

Я выбрал только вариант 1, создать/обновить, предполагая, что все пользователи, которые могут создавать, по-прежнему смогут видеть. И это было ошибкой. Мне нужно было выбрать как вариант 1, так и вариант 2. Какой вариант теперь имеет смысл.

Мне пришлось удалить свое хранилище и добавить обратно, чтобы отладить это. Затем он начал работать для загрузки и загрузки. Пожалуйста, помните, что общедоступная защищенная папка также важна.

Надеюсь, это поможет кому-то, у кого такая же проблема.

person Hafeez    schedule 02.05.2020