无法使用EC2 IAM角色的临时凭证启动EMR作业流

时间:2014-08-17 20:21:03

标签: amazon-web-services amazon-emr

我有一个已分配EC2 IAM角色的实例。我无法使用具有角色分配实例的临时凭证从此实例创建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>

谷歌搜索此错误消息绝对没有透露任何内容。无论是直接使用AWS CLI还是boto,我都会从API获得相同的响应。为了尝试遵循此错误消息的建议,我尝试将{InstanceProfile: <instance_profile_name>}传递给boto中api_params方法的run_jobflow参数,但仍然得到相同的错误。我也尝试使用service_role的{​​{1}}参数,但也失败了。将两者一起传递也失败了。

根据亚马逊文档中的这个page,EMR应该支持STS和EC2 IAM角色,所以想知道是否有人让它在以前工作过。

2 个答案:

答案 0 :(得分:2)

我在java中使用它。像Sam一样,我指定了服务角色和工作流角色。令我惊讶的是,有关InstanceProfile的错误要求我设置作业流角色。例如:

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

我做的另一件事是在我的云形成模板中,我将AmazonElasticMapReduceFullAccess策略授予我的实例角色。例如:

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

答案 1 :(得分:1)

是的,我设法让这个工作,使用:

  • 明确的service-role(使用EMR_DefaultRole作为模板)
  • 明确的jobflow-role(使用EMR_EC2_DefaultRole作为模板)
  • 授予iam:PassRole资源(service-role资源)到EC2 IAM角色