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.
Tópicos
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
com o valor department
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.dev
No exemplo de política a seguir, o operador de condição StringEquals
tenta corresponder
com o valor da tag dev
. Se a tag department
ainda não tiver sido adicionada ao cluster ou não contiver o valor department
, 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.dev
{ "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
contenha o valor department
ou dev
, você poderia substituir o bloco condicional no exemplo anterior com o seguinte. test
"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
para a etiqueta dev
. Mas neste exemplo, a chave de condição department
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
na etiqueta dev
. O elemento department
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
, independentemente do valor que ela contenha, você poderia substituir o bloco condicional no exemplo anterior pelo seguinte. O operador department
Null
procura a presença da tag
em um cluster do EMR. Se a tag existir, a instrução department
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
, que possa conter qualquer valor. Para o recurso department
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" ] } } } ] }