You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用boto3创建EMR集群遇服务角色EC2权限不足问题咨询

问题:同一EMR服务角色在控制台/CLI可用,boto3创建时报EC2权限不足

现象

  • 通过AWS Web控制台和以下CLI命令可正常创建EMR集群:
aws emr create-cluster \
 --name "emr-cluster" \
 --log-uri "s3n://aws-logs-433212232334-us-east-1/elasticmapreduce/" \
 --release-label "emr-7.1.0" \
 --service-role "arn:aws:iam::433212232334:role/service-role/AmazonEMR-ServiceRole-20240418T133040" \
 --ec2-attributes '{"InstanceProfile":"AmazonEMR-InstanceProfile-20240418T133024","EmrManagedMasterSecurityGroup":"sg-07ced3d3223bet564","EmrManagedSlaveSecurityGroup":"sg-04b7742eed31ec137","KeyName":"emr-key-pair","AdditionalMasterSecurityGroups":[],"AdditionalSlaveSecurityGroups":[],"SubnetId":"subnet-0cf42a674f981a42a"}' \
 --tags 'for-use-with-amazon-emr-managed-policies=true' \
 --applications Name=Hadoop Name=Spark \
 --configurations '[{"Classification":"spark-hive-site","Properties":{"hive.metastore.client.factory.class":"com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"}}]' \
 --instance-groups '[{"InstanceCount":1,"InstanceGroupType":"CORE","Name":"Core","InstanceType":"m5.xlarge","EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"VolumeType":"gp2","SizeInGB":32},"VolumesPerInstance":2}]}},{"InstanceCount":1,"InstanceGroupType":"MASTER","Name":"Primary","InstanceType":"m5.xlarge","EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"VolumeType":"gp2","SizeInGB":32},"VolumesPerInstance":2}]}}]' \
 --scale-down-behavior "TERMINATE_AT_TASK_COMPLETION" \
 --auto-termination-policy '{"IdleTimeout":3600}' \
 --region "us-east-1"
  • 使用以下boto3代码创建集群时,集群因报错终止:

Service role arn:aws:iam::433212232334:role/service-role/AmazonEMR-ServiceRole-20240418T133040 has insufficient EC2 permissions

boto3代码:

import boto3

emr_client = boto3.client('emr')
response = emr_client.run_job_flow(
    Name='emr-cluster',
    LogUri='s3n://aws-logs-433212232334-us-east-1/elasticmapreduce/',
    ReleaseLabel='emr-7.1.0',
    ServiceRole="arn:aws:iam::433212232334:role/service-role/AmazonEMR-ServiceRole-20240418T133040",
    JobFlowRole="AmazonEMR-InstanceProfile-20240418T133024",
    ScaleDownBehavior='TERMINATE_AT_TASK_COMPLETION',
    EbsRootVolumeSize=15,
    AutoTerminationPolicy={
        'IdleTimeout': 3600
    },
    Applications=[
        {
            'Name': 'Spark'
        },
        {
            'Name': 'Hadoop'
        }
    ],
    Configurations=[
        {
            "Classification": "spark-hive-site",
            "Properties": {
                "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
            }
        }
    ],
    Instances={
        'KeepJobFlowAliveWhenNoSteps': True,
        'Ec2KeyName': 'emr-key-pair',
        'InstanceGroups': [
            {
                "InstanceCount": 1,
                "InstanceRole": "CORE",
                "Name": "Core",
                "InstanceType": "m5.xlarge",
                "EbsConfiguration": {
                    "EbsBlockDeviceConfigs": [
                        {
                            "VolumeSpecification": {
                                "VolumeType": "gp2",
                                "SizeInGB": 32
                            },
                            "VolumesPerInstance": 2
                        }
                    ]
                }
            },
            {
                "InstanceCount": 1,
                "InstanceRole": "MASTER",
                "Name": "Primary",
                "InstanceType": "m5.xlarge",
                "EbsConfiguration": {
                    "EbsBlockDeviceConfigs": [
                        {
                            "VolumeSpecification": {
                                "VolumeType": "gp2",
                                "SizeInGB": 32
                            },
                            "VolumesPerInstance": 2
                        }
                    ]
                }
            }
        ]
    }
)

原因

对比CLI命令和boto3代码,核心差异在于网络配置缺失:

  • CLI命令通过--ec2-attributes指定了SubnetId、EmrManagedMasterSecurityGroup、EmrManagedSlaveSecurityGroup,EMR服务角色只需要对这些明确指定的资源有操作权限即可。
  • boto3代码的Instances参数中未配置上述网络项,EMR会尝试使用默认VPC的资源(默认子网、默认安全组),但你的服务角色没有访问默认VPC资源的权限,因此触发"EC2权限不足"的错误。

解决方案

修改boto3代码,在Instances字典中添加缺失的网络配置,与CLI中的参数保持一致:

Instances={
    'KeepJobFlowAliveWhenNoSteps': True,
    'Ec2KeyName': 'emr-key-pair',
    'Ec2SubnetId': 'subnet-0cf42a674f981a42a',  # 添加子网ID
    'EmrManagedMasterSecurityGroup': 'sg-07ced3d3223bet564',  # 添加主节点安全组
    'EmrManagedSlaveSecurityGroup': 'sg-04b7742eed31ec137',  # 添加核心节点安全组
    'InstanceGroups': [
        {
            "InstanceCount": 1,
            "InstanceRole": "CORE",
            "Name": "Core",
            "InstanceType": "m5.xlarge",
            "EbsConfiguration": {
                "EbsBlockDeviceConfigs": [
                    {
                        "VolumeSpecification": {
                            "VolumeType": "gp2",
                            "SizeInGB": 32
                        },
                        "VolumesPerInstance": 2
                    }
                ]
            }
        },
        {
            "InstanceCount": 1,
            "InstanceRole": "MASTER",
            "Name": "Primary",
            "InstanceType": "m5.xlarge",
            "EbsConfiguration": {
                "EbsBlockDeviceConfigs": [
                    {
                        "VolumeSpecification": {
                            "VolumeType": "gp2",
                            "SizeInGB": 32
                        },
                        "VolumesPerInstance": 2
                    }
                ]
            }
        }
    ]
}

内容的提问来源于stack exchange,提问作者DumbCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:49:52