Ошибка AWS / Cognito / IAM с ролью Unauth

Изначально это сообщение было опубликовано на форумах разработчиков AWS, но похоже, что все участники AWS поддерживают SO, поэтому я дублирую его здесь.

Привет, я абсолютный новичок в AWS, поэтому постараюсь быть максимально ясным.

Я пытаюсь использовать JS API, чтобы разрешить любому пользователю на моем сайте загружать видео в S3 (это хорошо работает), а затем преобразовывать загруженные файлы в другие форматы (с помощью Elastic Transcoder).

Я настроил:

  • входные (не общедоступные) и выходные (общедоступные) сегменты на S3. На вход поступают видео, отправленные пользователем, и эта часть работает :)
  • конвейер эластичного транскодера (video-converter-test-pipeline-01)
  • федеративная идентификация в Cognito (video_converter_test_02)
  • соответствие ролей Auth и Unauth в IAM (Cognito_video_converter_test_02Auth_Role и Cognito_video_converter_test_02Unauth_Role)

Конвейер имеет следующую сводку разрешений: «Следующим ролям IAM предоставлен доступ к этому конвейеру: arn: aws: iam :: 529773801731: role / Elastic_Transcoder_Default_Role»

Cognito_video_converter_test_02Unauth_Role имеет две прикрепленные политики:

  • oneClick_Cognito_video_converter_test_02Unauth_Role_1522923667877
  • video-converter-policy, что я сделал сам.

Вот его JSON-представление:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "elastictranscoder:CreateJob",
            "Resource": [
                "arn:aws:elastictranscoder:*:*:pipeline/*",
                "arn:aws:elastictranscoder:*:*:preset/*"
            ]
        }
    ]
}

Вот как я пытаюсь создать задание на перекодировку с помощью JS API:

function createJob(uploadedFileKey) {
    console.log("Create job", uploadedFileKey);
    var params = {
        PipelineId: PipelineId,
        Input: {
            Key: uploadedFileKey
        },
        Output: {
            PresetId: PresetId
        }
    };
    elastictranscoder.createJob(params, function (err, data) {
        if (err) console.error(err, err.stack); // an error occurred
        else console.log(data);           // successful response
    });
}

При его выполнении я получаю следующую ошибку:

Ошибка: Пользователь: arn: aws: sts :: 529773801731: Предполагаемая роль / Cognito_video_converter_test_02Unauth_Role / CognitoIdentityCredentials не авторизован для выполнения: elastictranscoder: CreateJob на ресурсе: arn: aws: elastictranscoder: pipe37537022: 52977 mmowmr

Я попытался использовать IAM Policy Simulator, чтобы понять, что было не так, но когда я делал это с теми же параметрами, я получаю «разрешено» ...

Я уверен, что что-то здесь делаю не так, но не могу понять что. Я много чего пробовал, но ничего не получалось. Любая помощь будет оценена :)

Заранее спасибо, пока!




Ответы (1)


Я связался со службой поддержки разработчиков AWS, и, похоже, решение содержит следующее в политике IAM:

{
    "Sid": "VisualEditor3",
    "Effect": "Allow",
    "Action": "cognito-sync:*",
    "Resource": "*"
},
{
    "Sid": "VisualEditor3",
    "Effect": "Allow",
    "Action": "mobileanalytics:PutEvents",
    "Resource": "*"
}
person Darrell Brogdon    schedule 26.06.2018
comment
Это очень любезно с вашей стороны, но в итоге я воспользовался другим сервисом конвертации видео, так как Amazon был слишком разочаровывающим. Даже ваше предложение (за которое я снова благодарю) не разочаровывает: откуда взялся этот фрагмент и что он означает? Кроме того, почему AWS Dev Support - лучшее место для решения подобных проблем, не следует ли это каким-то образом задокументировать? Или симулятор политики IAM не выполняет свою работу. Сбит с толку :/ - person Quentin; 29.06.2018
comment
Я на 100% согласен с вами и, вероятно, откажусь от AWS в будущем именно по этим причинам. - person Darrell Brogdon; 29.06.2018
comment
У меня такая же проблема, AWS добавляет эту политику автоматически, но проблема все еще не устранена. - person akerra; 30.05.2021