Política do IAM de execução - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Política do IAM de execução

É possível especificar uma política de execução do IAM, além de um perfil de execução, ao enviar execuções de trabalhos no EMR Sem Servidor. As permissões resultantes assumidas pelo trabalho são a interseção das permissões no perfil de execução e na Política do IAM de execução especificada.

Conceitos básicos

Etapas para usar a política do IAM de execução:

Crie um aplicação emr-serverless ou use uma existente e, em seguida, execute o seguinte comando da AWS CLI para iniciar a execução de um trabalho com uma política do IAM inline:

aws emr-serverless start-job-run --region us-west-2 \ --application-id application-id \ --execution-role-arn execution-role-arn \ --job-driver job-driver-options \ --execution-iam-policy '{"policy": "inline-policy"}'

Exemplos de comandos da CLI

Se tivermos a seguinte política armazenada no arquivo policy.json na máquina:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-test-bucket", "arn:aws:s3:::my-test-bucket/*" ], "Sid": "AllowS3Getobject" } ] }

Em seguida, podemos iniciar um trabalho com essa política usando o seguinte AWS CLI comando:

aws emr-serverless start-job-run --region us-west-2 \ --application-id application-id \ --execution-role-arn execution-role-arn \ --job-driver job-driver-options --execution-iam-policy '{ "policy": '$(jq -c '. | @json' policy.json)' }'

Você também pode usar ambas as políticas AWS e as gerenciadas pelo cliente, especificando-as ARNs por meio de:

aws emr-serverless start-job-run --region us-west-2 \ --application-id application-id \ --execution-role-arn execution-role-arn \ --job-driver job-driver-options --execution-iam-policy '{ "policyArns": [ "arn:aws:iam::aws:policy/AmazonS3FullAccess", "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" ] }'

Também é possível especificar uma política de IAM em linha e uma política gerenciada ARNs na mesma solicitação:

aws emr-serverless start-job-run --region us-west-2 \ --application-id application-id \ --execution-role-arn execution-role-arn \ --job-driver job-driver-options --execution-iam-policy '{ "policy": '$(jq -c '. | @json' policy.json)', "policyArns": [ "arn:aws:iam::aws:policy/AmazonS3FullAccess", "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" ] }'

Observações importantes

  • O campo policy de execution-role-policy pode ter um comprimento máximo de 2048 caracteres.

  • A string de política do IAM inline especificada no campo policy do execution-iam-policy deve estar em conformidade com o padrão de string json, sem novas linhas e com aspas escapadas, como no exemplo anterior.

  • Uma lista de até 10 políticas gerenciadas ARNs pode ser especificada como um valor para execution-iam-policy o policyArns campo s.

  • A política gerenciada ARNs deve ser uma lista de ARN válidos AWS ou gerenciados pelo cliente. Quando um ARN de política gerenciada pelo cliente é especificado, a política deve pertencer à mesma AWS conta do EMR-S. JobRun

  • Quando a política do IAM inline e políticas gerenciadas são usadas, o texto simples que você usa para as políticas inline e gerenciadas combinadas não pode exceder 2.048 caracteres.

  • As permissões resultantes assumidas pelo JobRun são a interseção das permissões na função de execução e na política de execução IAM especificada.

Interseção de políticas

As permissões resultantes assumidas pelo trabalho são a interseção das permissões no perfil de execução e na Política do IAM de execução especificada. O que significa que qualquer permissão necessária deverá ser especificada em ambos os lugares JobRun para funcionar. Porém, é possível especificar uma declaração de permissão geral adicional na política inline para quaisquer permissões que você não pretende atualizar ou substituir.

Exemplo

Dada a seguinte política de perfil do IAM de execução:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "*" ], "Sid": "AllowS3" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:123456789012:log-group::log-stream" ], "Sid": "AllowLOGSDescribeloggroups" }, { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable" ], "Resource": [ "arn:aws:dynamodb:*:*:table/MyCompany1table" ], "Sid": "AllowDYNAMODBDescribetable" } ] }

E a seguinte política do IAM embutida:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-test-bucket/tenant1", "arn:aws:s3:::my-test-bucket/tenant1/*" ], "Sid": "AllowS3Getobject" }, { "Effect": "Allow", "Action": [ "logs:*", "dynamodb:*" ], "Resource": [ "*" ], "Sid": "AllowLOGS" } ] }

As permissões resultantes assumidas pelo JobRun são:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-test-bucket/tenant1", "arn:aws:s3:::my-test-bucket/tenant1/*" ], "Sid": "AllowS3Getobject" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:123456789012:log-group::log-stream" ], "Sid": "AllowLOGSDescribeloggroups" }, { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable" ], "Resource": [ "arn:aws:dynamodb:*:*:table/MyCompany1table" ], "Sid": "AllowDYNAMODBDescribetable" } ] }