Políticas do IAM para acesso baseado em etiquetas a clusters e Cadernos do EMR - Amazon EMR

Políticas do IAM para acesso baseado em etiquetas a clusters e Cadernos do EMR

É possível aplicar condições em sua política baseada em identidade para controlar o acesso aos clusters e blocos de anotações do EMR baseados em tags.

Para obter mais informações sobre como adicionar tags a clusters, consulte Marcar clusters do EMR.

Os exemplos a seguir demonstram diferentes cenários e maneiras de usar operadores de condição com chaves de condição do Amazon EMR. Estas instruções de política do IAM são destinadas somente para fins de demonstração e não devem ser usadas em ambientes de produção. Há várias maneiras de combinar declarações de políticas para conceder e negar permissões de acordo com seus requisitos. Para obter mais informações sobre como planejar e testar políticas do IAM, consulte o Guia do usuário do IAM.

Importante

Recusar, explicitamente, permissões para ações de uso de tags é uma consideração importante. Isso evita que os usuários façam a marcação de um recurso e, assim, concedam a si mesmos permissões que você não pretendia conceder. Se você não negar as ações de marcação de um recurso, o usuário poderá modificar as etiquetas e contornar a intenção das políticas baseadas em etiquetas.

Exemplo de instruções de políticas baseadas em identidade para clusters

Os exemplos a seguir demonstram a políticas de permissões baseadas em identidade que são usadas para controlar as ações permitidas com clusters do EMR.

Importante

A ação ModifyInstanceGroup do Amazon EMR não exige que você especifique um ID de cluster. Por isso, negar essa ação com base em etiquetas de cluster requer mais atenção. Para ter mais informações, consulte Como negar a ação ModifyInstanceGroup no Amazon EMR.

Permitir ações somente em clusters com determinados valores de etiqueta

Os exemplos a seguir demonstram uma política que permite ao usuário executar ações com base na etiqueta de cluster department com o valor dev e também permite que o usuário atribua etiquetas a clusters com a mesma etiqueta. O último exemplo de política demonstra como negar privilégios para atribuir tags a clusters do EMR com qualquer coisa, menos a mesma tag.

No exemplo de política a seguir, o operador de condição StringEquals tenta corresponder dev com o valor da tag department. Se a tag department ainda não tiver sido adicionada ao cluster ou não contiver o valor dev, a política não se aplicará e as ações não serão permitidas por essa política. Se nenhuma outra declaração de política permitir as ações, o usuário poderá somente trabalhar com clusters que tenham essa tag com esse valor.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt12345678901234", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListSteps", "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:SetTerminationProtection", "elasticmapreduce:ListInstances", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:DescribeStep" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": "dev" } } } ] }

Você também pode especificar vários valores de tag usando um operador de condição. Por exemplo, para permitir todas as ações em clusters em que a tag department contenha o valor dev ou test, você poderia substituir o bloco condicional no exemplo anterior com o seguinte.

"Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department":["dev", "test"] } }

Exigir a marcação do cluster quando um cluster é criado

Como no exemplo anterior, o exemplo de política a seguir procura a mesma etiqueta correspondente: o valor dev para a etiqueta department. Mas neste exemplo, a chave de condição RequestTag especifica que a política se aplica durante a criação da etiqueta. Portanto, é necessário criar um cluster com uma etiqueta que corresponda ao valor especificado.

Para criar um cluster com uma etiqueta, também é necessário ter permissão para a ação elasticmapredue:AddTags. Para essa instrução, a chave de condição elasticmapreduce:ResourceTag garante que o IAM conceda acesso somente aos recursos da etiqueta com o valor dev na etiqueta department. O elemento Resource é usado para limitar essa permissão aos recursos do cluster.

Para os recursos PassRole, é necessário fornecer o ID ou alias da conta da AWS, o nome do perfil de serviço na instrução PassRoleForEMR e o nome do perfil de instância na instrução PassRoleForEC2. Para obter mais informações sobre o formato de ARN do IAM, consulte ARNs do IAM no Guia do usuário do IAM.

Para obter mais informações sobre a correspondência de valores de chave de etiqueta, consulte aws:RequestTag/tag-key no Guia do usuário do IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RunJobFlowExplicitlyWithTag", "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "dev" } } }, { "Sid": "AddTagsForDevClusters", "Effect": "Allow", "Action": "elasticmapreduce:AddTags", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": "dev" } } }, { "Sid": "PassRoleForEMR", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId:role/Role-Name-With-Path", "Condition": { "StringLike": { "iam:PassedToService": "elasticmapreduce.amazonaws.com*" } } }, { "Sid": "PassRoleForEC2", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId:role/Role-Name-With-Path", "Condition": { "StringLike": { "iam:PassedToService": "ec2.amazonaws.com*" } } } ] }

Permitir ações em clusters com uma etiqueta específica, independentemente do valor da etiqueta

Você também pode permitir ações somente em clusters que tenham uma determinada tag, independentemente do valor da tag. Para fazer isso, você pode usar o operador Null. Para obter mais informações, consulte Operador de condição para verificar a existência de chaves de condição no Guia do usuário do IAM. Por exemplo, para permitir ações somente em clusters do EMR que tenham a tag department, independentemente do valor que ela contenha, você poderia substituir o bloco condicional no exemplo anterior pelo seguinte. O operador Null procura a presença da tag department em um cluster do EMR. Se a tag existir, a instrução Null será avaliada como falsa, correspondendo à condição especificada nesta declaração de política e as ações apropriadas serão permitidas.

"Condition": { "Null": { "elasticmapreduce:ResourceTag/department":"false" } }

A declaração de política a seguir permite que um usuário crie um cluster do EMR somente se o cluster tiver uma tag department, que possa conter qualquer valor. Para o recurso PassRole, é necessário fornecer o ID ou alias da conta da AWS e o nome do perfil de serviço. Para obter mais informações sobre o formato de ARN do IAM, consulte ARNs do IAM no Guia do usuário do IAM.

Para obter mais informações sobre como especificar o operador de condição nulo (“false”), consulte Operador de condição para verificar a existência de chaves de condição no Guia do usuário do IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateClusterTagNullCondition", "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow" ], "Resource": [ "*" ], "Condition": { "Null": { "aws:RequestTag/department": "false" } } }, { "Sid": "AddTagsNullCondition", "Effect": "Allow", "Action": "elasticmapreduce:AddTags", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*", "Condition": { "Null": { "elasticmapreduce:ResourceTag/department": "false" } } }, { "Sid": "PassRoleForElasticMapReduce", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId:role/Role-Name-With-Path", "Condition": { "StringLike": { "iam:PassedToService": "elasticmapreduce.amazonaws.com*" } } }, { "Sid": "PassRoleForEC2", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId:role/Role-Name-With-Path", "Condition": { "StringLike": { "iam:PassedToService": "ec2.amazonaws.com*" } } } ] }

Exemplo de instruções de políticas baseadas em identidade para Cadernos do EMR

Os exemplos de instruções de políticas do IAM nesta seção demonstram cenários comuns para usar chaves a fim de limitar as ações permitidas usando Cadernos do EMR. Desde que nenhuma outra política associada à entidade principal (usuário) permita as ações, as chaves de contexto de condição limitam as ações permitidas conforme indicado.

exemplo
: permitir acesso somente aos Cadernos do EMR que o usuário cria com base na marcação

A instrução de política de exemplo a seguir, quando anexada a um perfil ou usuário, permite que o usuário trabalhe apenas com cadernos criados por ele. Esta declaração de política usa a tag padrão aplicada quando um bloco de anotações é criado.

No exemplo, o operador de condição StringEquals tenta combinar uma variável que representa o ID do usuário atual ({aws:userId}) com o valor de etiqueta creatorUserID. Se a tag creatorUserID ainda não tiver sido adicionada ao bloco de anotações ou não contiver o valor do ID do usuário atual, a política não se aplicará e as ações não serão permitidas por essa política. Se nenhuma outra declaração de política permitir as ações, o usuário só poderá trabalhar com blocos de anotações que tenham essa tag com esse valor.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:DescribeEditor", "elasticmapreduce:StartEditor", "elasticmapreduce:StopEditor", "elasticmapreduce:DeleteEditor", "elasticmapreduce:OpenEditorInConsole" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/creatorUserId": "${aws:userId}" } } } ] }
exemplo –Exigir marcação de caderno quando um caderno é criado

Neste exemplo, a chave de contexto RequestTag é usada. A ação CreateEditor será permitida somente se o usuário não alterar nem excluir a tag creatorUserID é que é adicionada por padrão. A variável ${aws:userId} especifica o ID de usuário do usuário atualmente ativo, que é o valor padrão da etiqueta.

A declaração de política pode ser usada para ajudar a garantir que os usuários não removam a tag createUserId tag nem alterem seu valor.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}" } } } ] }

Este exemplo requer que o usuário crie o cluster com uma tag com a string de chave dept e um valor definido como um dos seguintes: datascience, analytics, operations.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/dept": [ "datascience", "analytics", "operations" ] } } } ] }
exemplo –Limitar a criação do caderno para clusters marcados e exigir etiquetas de caderno

Este exemplo permite a criação do bloco de anotações somente se o bloco de anotações for criado com uma tag que tenha a string de chave owner definida como um dos valores especificados. Além disso, o bloco de anotações poderá ser criado somente se o cluster tiver uma tag com a string de chave department definida como um dos valores especificados.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/owner": [ "owner1", "owner2", "owner3" ], "elasticmapreduce:ResourceTag/department": [ "dep1", "dep3" ] } } } ] }
exemplo –Limitar a capacidade de iniciar um caderno com base em etiquetas

Este exemplo limita a capacidade de iniciar blocos de anotações àqueles que tenham uma tag com a string de chave owner definida como um dos valores especificados. Como o elemento Resource é usado para especificar apenas o editor, a condição não se aplica ao cluster e não precisa ser marcado.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/owner": [ "owner1", "owner2" ] } } } ] }

Este exemplo é semelhante ao exposto acima. No entanto, o limite se aplica apenas a clusters com tags, e não a blocos de anotações.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": [ "dep1", "dep3" ] } } } ] }

Este exemplo usa um conjunto diferente de tags de cluster e bloco de anotações. Ele permite que um bloco de anotações seja iniciado somente se:

  • O bloco de anotações tiver uma tag com a string de chave owner definida como qualquer um dos valores especificados

    —e—

  • O cluster tiver uma tag com a string de chave department definida como qualquer um dos valores especificados

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/owner": [ "user1", "user2" ] } } }, { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": [ "datascience", "analytics" ] } } } ] }
exemplo –Limitar a capacidade de abrir o editor de caderno com base em etiquetas

Este exemplo permite que o editor de blocos de anotações seja aberto somente se:

  • O bloco de anotações tiver uma tag com a string de chave owner definida como qualquer um dos valores especificados.

    —e—

  • O cluster tiver uma tag com a string de chave department definida como qualquer um dos valores especificados.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:OpenEditorInConsole" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/owner": [ "user1", "user2" ] } } }, { "Action": [ "elasticmapreduce:OpenEditorInConsole" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": [ "datascience", "analytics" ] } } } ] }