Не удается запустить поток работ EMR с использованием временных учетных данных из ролей IAM EC2

У меня есть экземпляр, которому была назначена роль IAM в EC2. Я не могу создать поток заданий EMR из этого экземпляра, используя временные учетные данные, которые предоставляет экземпляр, назначенный роли, я получаю следующий ответ от API:

  <Error>
    <Type>Sender</Type>
    <Code>ValidationError</Code>
    <Message>Service role and InstanceProfile are required for calls made with temporary credentials provided by STS</Message>
  </Error>

Поиск в этом сообщении об ошибке абсолютно ничего не выявил. Я получаю тот же ответ от API, использую ли я интерфейс командной строки AWS или boto непосредственно. В попытке следовать совету этого сообщения об ошибке, я попытался передать {InstanceProfile: <instance_profile_name>} к api_params аргумент в пользу run_jobflow метод в бото, но все равно получаю ту же ошибку. Я также пытался использовать service_role аргумент в пользу run_jobflow, что также не удалось. Проходить оба вместе тоже не удалось.

Согласно этой странице из документов Amazon, EMR должна поддерживать роли STS и IAM в EC2, поэтому интересно, кто-нибудь заставил это работать раньше.

2 ответа

Решение

Я получил это работает в Java. Как и Сэм, я указал роль службы и роль потока работ. Меня удивило, что ошибка InstanceProfile потребовала, чтобы я установил роль потока работ. например:

myRunJobFlowRequest.setServiceRole("EMR_DefaultRole");
myRunJobFlowRequest.setJobFlowRole("EMR_EC2_DefaultRole")

Другая вещь, которую я сделал, была в моем шаблоне формирования облака, я назначил политику AmazonElasticMapReduceFullAccess моей роли экземпляра. например:

"Policies": [
          {
            "PolicyName": "AmazonElasticMapReduceFullAccess",
            "PolicyDocument": {
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": "*",
                  "Resource": "*"
                }
              ]
            }
          }

Да, мне удалось заставить это работать, используя:

  • Явный service-role (с использованием EMR_DefaultRole как шаблон)
  • Явный jobflow-role (с использованием EMR_EC2_DefaultRole как шаблон)
  • Предоставление iam:PassRole разрешения (для service-role ресурс) на роль EC2 IAM
Другие вопросы по тегам