This product is not supported for your selected
Datadog site . (
).
Id: cloudformation-aws-emr-wihout-vpc
Provider: AWS
Platform: CloudFormation
Severity: Low
Category: Networking and Firewall
Learn More Description EMR clusters must be launched inside a VPC to ensure network isolation and to allow enforcement of security controls such as security groups, private subnet routing, and network ACLs. Omitting a VPC subnet can make cluster nodes publicly reachable or prevent VPC-level access restrictions.
In CloudFormation, AWS::EMR::Cluster resources must define either Properties.Instances.Ec2SubnetId (single subnet) or Properties.Instances.Ec2SubnetIds (list of subnets) with non-null values. Resources missing both properties or containing null or empty values will be flagged.
Secure configuration example:
MyEMRCluster :
Type : AWS::EMR::Cluster
Properties :
Name : my-emr-cluster
ReleaseLabel : emr-6.10.0
Instances :
Ec2SubnetId : !Ref MyPrivateSubnet
MasterInstanceGroup :
InstanceCount : 1
InstanceType : m5.xlarge
CoreInstanceGroup :
InstanceCount : 2
InstanceType : m5.xlarge
ServiceRole : !Ref EMRServiceRole
JobFlowRole : !Ref EMRInstanceProfile
Compliant Code Examples AWSTemplateFormatVersion : 2010-09-09
Parameters :
CustomAmiId :
Type : String
InstanceType :
Type : String
ReleaseLabel :
Type : String
SubnetId :
Type : String
TerminationProtected :
Type : String
Default : 'false'
ElasticMapReducePrincipal :
Type : String
Ec2Principal :
Type : String
Resources :
cluster :
Type : AWS::EMR::Cluster
Properties :
CustomAmiId : !Ref CustomAmiId
Instances :
MasterInstanceGroup :
InstanceCount : 1
InstanceType : !Ref InstanceType
Market : ON_DEMAND
Name : cfnMaster
CoreInstanceGroup :
InstanceCount : 1
InstanceType : !Ref InstanceType
Market : ON_DEMAND
Name : cfnCore
TerminationProtected : !Ref TerminationProtected
Ec2SubnetId : !Ref SubnetId
Name : CFNtest
JobFlowRole : !Ref emrEc2InstanceProfile
ServiceRole : !Ref emrRole
ReleaseLabel : !Ref ReleaseLabel
VisibleToAllUsers : true
Tags :
- Key : key1
Value : value1
emrRole :
Type : AWS::IAM::Role
Properties :
AssumeRolePolicyDocument :
Version : 2008-10-17
Statement :
- Sid : ''
Effect : Allow
Principal :
Service : !Ref ElasticMapReducePrincipal
Action : 'sts:AssumeRole'
Path : /
ManagedPolicyArns :
- 'arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceRole'
emrEc2Role :
Type : AWS::IAM::Role
Properties :
AssumeRolePolicyDocument :
Version : 2008-10-17
Statement :
- Sid : ''
Effect : Allow
Principal :
Service : !Ref Ec2Principal
Action : 'sts:AssumeRole'
Path : /
ManagedPolicyArns :
- 'arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforEC2Role'
emrEc2InstanceProfile :
Type : AWS::IAM::InstanceProfile
Properties :
Path : /
Roles :
- !Ref emrEc2Role
Non-Compliant Code Examples AWSTemplateFormatVersion : 2010-09-09
Parameters :
CustomAmiId :
Type : String
InstanceType :
Type : String
ReleaseLabel :
Type : String
SubnetId :
Type : String
TerminationProtected :
Type : String
Default : 'false'
ElasticMapReducePrincipal :
Type : String
Ec2Principal :
Type : String
Resources :
cluster :
Type : AWS::EMR::Cluster
Properties :
CustomAmiId : !Ref CustomAmiId
Instances :
MasterInstanceGroup :
InstanceCount : 1
InstanceType : !Ref InstanceType
Market : ON_DEMAND
Name : cfnMaster
CoreInstanceGroup :
InstanceCount : 1
InstanceType : !Ref InstanceType
Market : ON_DEMAND
Name : cfnCore
TerminationProtected : !Ref TerminationProtected
Name : CFNtest
JobFlowRole : !Ref emrEc2InstanceProfile
ServiceRole : !Ref emrRole
ReleaseLabel : !Ref ReleaseLabel
VisibleToAllUsers : true
Tags :
- Key : key1
Value : value1
emrRole :
Type : AWS::IAM::Role
Properties :
AssumeRolePolicyDocument :
Version : 2008-10-17
Statement :
- Sid : ''
Effect : Allow
Principal :
Service : !Ref ElasticMapReducePrincipal
Action : 'sts:AssumeRole'
Path : /
ManagedPolicyArns :
- 'arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceRole'
emrEc2Role :
Type : AWS::IAM::Role
Properties :
AssumeRolePolicyDocument :
Version : 2008-10-17
Statement :
- Sid : ''
Effect : Allow
Principal :
Service : !Ref Ec2Principal
Action : 'sts:AssumeRole'
Path : /
ManagedPolicyArns :
- 'arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforEC2Role'
emrEc2InstanceProfile :
Type : AWS::IAM::InstanceProfile
Properties :
Path : /
Roles :
- !Ref emrEc2Role