Perfil de serviço para instâncias do EC2 do cluster (perfil de instância do EC2) - Amazon EMR

Perfil de serviço para instâncias do EC2 do cluster (perfil de instância do EC2)

O perfil de serviço para instâncias do EC2 do cluster (também chamada de perfil de instância do EC2 para Amazon EMR) é um tipo especial de perfil de serviço atribuído a cada instância do EC2 no cluster do Amazon EMR quando a instância é iniciada. Os processos de aplicação que são executados no ecossistema do Hadoop assumem esse perfil para que as permissões interajam com outros serviços da AWS.

Para obter mais informações sobre perfis de serviço para instâncias do EC2, consulte Uso de um perfil do IAM para conceder permissões a aplicações em execução em instâncias do Amazon EC2 no Guia do usuário do IAM.

Importante

O perfil de serviço padrão para instâncias do EC2 do cluster e a respectiva política gerenciada pela AWS padrão associada, AmazonElasticMapReduceforEC2Role, estão em vias de defasagem, e nenhuma política gerenciada pela AWS substituta é fornecida. Será necessário criar e especificar um perfil de instância para substituir o perfil e a política padrão defasados.

Perfil padrão e política gerenciada

  • O nome de perfil padrão é EMR_EC2_DefaultRole.

  • A política gerenciada EMR_EC2_DefaultRole padrão, AmazonElasticMapReduceforEC2Role, está chegando ao fim do suporte. Em vez de usar uma política gerenciada padrão para o perfil de instância do EC2, aplique políticas baseadas em recursos aos buckets do S3 e outros recursos que o Amazon EMR precisa, ou use sua própria política gerenciada pelo cliente com um perfil do IAM como perfil de instância. Para obter mais informações, consulte Criar um perfil de serviço para instâncias do EC2 do cluster com permissões de privilégio mínimo.

Veja a seguir o conteúdo da versão 3 de AmazonElasticMapReduceforEC2Role.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "cloudwatch:*", "dynamodb:*", "ec2:Describe*", "elasticmapreduce:Describe*", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:ListClusters", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListInstances", "elasticmapreduce:ListSteps", "kinesis:CreateStream", "kinesis:DeleteStream", "kinesis:DescribeStream", "kinesis:GetRecords", "kinesis:GetShardIterator", "kinesis:MergeShards", "kinesis:PutRecord", "kinesis:SplitShard", "rds:Describe*", "s3:*", "sdb:*", "sns:*", "sqs:*", "glue:CreateDatabase", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:CreateTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTable", "glue:GetTables", "glue:GetTableVersions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:UpdatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:CreateUserDefinedFunction", "glue:UpdateUserDefinedFunction", "glue:DeleteUserDefinedFunction", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions" ] } ] }

Seu perfil de serviço deve usar a seguinte política de confiança.

{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Criar um perfil de serviço para instâncias do EC2 do cluster com permissões de privilégio mínimo

Como prática recomendada, é altamente aconselhável criar um perfil de serviço para instâncias de cluster do EC2 e uma política de permissões para que tenha as permissões mínimas para outros serviços da AWS que a aplicação exige.

A política gerenciada padrão, AmazonElasticMapReduceforEC2Role, fornece permissões que facilitam a execução de um cluster inicial. No entanto, AmazonElasticMapReduceforEC2Role está em vias de defasagem, e o Amazon EMR não fornecerá uma política gerenciada pela AWS padrão substituta para o perfil defasado. Para iniciar um cluster inicial, é necessário fornecer uma política gerenciada pelo cliente baseada em recursos ou baseada em ID.

As instruções de política a seguir fornecem exemplos das permissões necessárias para diferentes atributos do Amazon EMR. Recomendamos que você use essas permissões para criar uma política de permissões que restrinja o acesso somente a esses recursos e aos recursos que o cluster exige. Todos os exemplos de instruções de política usam a região us-west-2 e o ID fictício da conta da AWS 123456789012. Faça as substituições apropriadas para o seu cluster.

Para obter mais informações sobre como criar e especificar funções personalizadas, consulte Personalizar perfis do IAM.

nota

Se você criar um perfil personalizado do EMR para o EC2, siga o fluxo de trabalho básico, que criará automaticamente um perfil de instância com o mesmo nome. O Amazon EC2 permite criar perfis e perfis de instância com nomes diferentes, mas o Amazon EMR não oferece suporte a essa configuração, o que resulta em um erro de “perfil de instância inválido” quando você cria o cluster.

Ler e gravar dados no Amazon S3 usando o EMRFS

Quando uma aplicação em execução em um cluster do Amazon EMR faz referência a dados usando o formato s3://mydata, o Amazon EMR usa o perfil de instância do EC2 para fazer a solicitação. Normalmente, os clusters leem e gravam dados no Amazon S3 dessa maneira, e o Amazon EMR usa as permissões anexadas ao perfil de serviço para instâncias do cluster do EC2 por padrão. Para obter mais informações, consulte Configurar perfis do IAM para solicitações do EMRFS para o Amazon S3.

Já que os perfis do IAM para o EMRFS se enquadrarão às permissões anexadas ao perfil de serviço para instâncias de cluster do EC2, como prática recomendada, é aconselhável usar perfis do IAM para o EMRFS e limitar as permissões do EMRFS e do Amazon S3 anexadas ao perfil de serviço para instâncias de cluster do EC2.

O exemplo de instrução a seguir demonstra as permissões que o EMRFS exige para fazer solicitações ao Amazon S3.

  • my-data-bucket-in-s3-for-emrfs-reads-and-writes especifica o bucket no Amazon S3 em que o cluster lê e grava dados e todas as subpastas usando /*. Adicione somente os buckets e as pastas que o aplicativo exige.

  • A instrução de política que permite ações dynamodb será necessária somente se a visualização consistente do EMRFS estiver habilitada. EmrFSMetadata especifica a pasta padrão para a visualização consistente do EMRFS.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:DeleteObject", "s3:GetBucketVersioning", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListBucketVersions", "s3:ListMultipartUploadParts", "s3:PutBucketVersioning", "s3:PutObject", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::my-data-bucket-in-s3-for-emrfs-reads-and-writes", "arn:aws:s3:::my-data-bucket-in-s3-for-emrfs-reads-and-writes/*" ] }, { "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DescribeTable", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "dynamodb:DeleteTable", "dynamodb:UpdateTable" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/EmrFSMetadata" }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "dynamodb:ListTables", "s3:ListBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:DeleteQueue", "sqs:SendMessage", "sqs:CreateQueue" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:EMRFS-Inconsistency-*" } ] }

Arquivar arquivos de log no Amazon S3

A instrução de política a seguir permite que o cluster do Amazon EMR arquive os arquivos de log no local especificada do Amazon S3. No exemplo a seguir, quando o cluster foi criado, s3://MyLoggingBucket/MyEMRClusterLogs foi especificado usando a Pasta de logs no S3 no console, usando a opção --log-uri na AWS CLI ou usando o parâmetro LogUri no comando RunJobFlow. Para obter mais informações, consulte Arquivamento dos arquivos de log no Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::MyLoggingBucket/MyEMRClusterLogs/*" } ] }

Usar as ferramentas de depuração

A instrução de política a seguir permite ações que são necessárias caso você habilite a ferramenta de depuração do Amazon EMR. O arquivamento de arquivos de log no Amazon S3 e as permissões associadas exibidas no exemplo acima são necessários para a depuração. Para obter mais informações, consulte Habilitar ferramenta de depuração.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:AWS-ElasticMapReduce-*" } ] }

Usar o Catálogo de Dados do AWS Glue

A instrução de política a seguir permite ações que são necessárias caso você use o Catálogo de Dados do AWS Glue como o metastore para aplicações. Para obter mais informações, consulte Using the AWS Glue Data Catalog as the metastore for Spark SQL, Using the AWS Glue Data Catalog as the metastore for Hive e Using Presto with the AWS Glue Data Catalog no Guia de lançamento do Amazon EMR.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:CreateTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTable", "glue:GetTables", "glue:GetTableVersions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:UpdatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:CreateUserDefinedFunction", "glue:UpdateUserDefinedFunction", "glue:DeleteUserDefinedFunction", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions" ], "Resource": "*", } ] }