Políticas de IAM para el acceso basado en etiquetas para clústeres y cuadernos de EMR
Puede utilizar condiciones en su política basada en identidades para controlar el acceso a clústeres y blocs de notas de EMR basándose en etiquetas.
Para obtener más información sobre la adición de etiquetas a los clústeres de EMR, consulte Etiquetado de clústeres de Amazon EMR.
Los siguientes ejemplos muestran distintos supuestos y formas de utilizar los operadores de condición con las claves de condición de Amazon EMR. Estas instrucciones de política de IAM tienen fines demostrativos y no deben utilizarse en entornos de producción. Existen varias maneras de combinar las instrucciones de políticas para conceder y denegar permisos de acuerdo con sus requisitos. Para obtener más información sobre la planificación y las pruebas de políticas de IAM, consulte la Guía del usuario de IAM.
importante
La denegación de permisos explícita para acciones de etiquetado de acciones es un factor importante. Esto impide que los usuarios etiqueten un recurso y, de esta forma, se concedan a sí mismos permisos que usted no tenía previsto conceder. Si no deniega las acciones de etiquetado de un recurso, el usuario puede modificar las etiquetas y eludir la intención de las políticas basadas en etiquetas.
Ejemplo de instrucciones de políticas basadas en identidades para clústeres
Los ejemplos que se muestran a continuación muestran las políticas de permisos basadas en identidades que se utilizan para controlar las acciones que se permiten con clústeres de EMR.
importante
La acción ModifyInstanceGroup
en Amazon EMR no requiere que especifique un ID de clúster. Por ese motivo, denegar esta acción en función de las etiquetas de clúster requiere una consideración adicional. Para obtener más información, consulte Denegación de la acción ModifyInstanceGroup en Amazon EMR.
Temas
Permitir acciones solo en clústeres con valores de etiqueta específicos
Los ejemplos que aparecen a continuación muestran una política que permite a un usuario realizar acciones en función de la etiqueta de clúster
con el valor department
y también permite a un usuario etiquetar clústeres con la misma etiqueta. El ejemplo de política muestra cómo denegar los privilegios para etiquetar clústeres de EMR con cualquier otra cosa excepto la misma etiqueta.dev
En el siguiente ejemplo de política, la condición StringEquals
intenta hacer coincidir
con el valor de la etiqueta dev
. Si la etiqueta department
no se ha añadido al clúster o no contiene el valor department
, la política no se aplica y esta política no permite las acciones. Si no hay otras instrucciones de política que permitan las acciones, el usuario solo puede trabajar con clústeres que tenga esta etiqueta con este 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" } } } ] }
También puede especificar varios valores de etiqueta utilizando un operador de condición. Por ejemplo, a fin de permitir que todas las acciones en clústeres donde la etiqueta
contiene el valor department
o dev
, podría sustituir el bloque de condición en el ejemplo anterior por los siguientes. test
"Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department":["dev", "test"] } }
Etiquetado obligatorio de un clúster al crear un clúster
Como en el ejemplo anterior, la siguiente política de ejemplo busca la misma etiqueta coincidente: el valor
para la etiqueta dev
. Sin embargo, en este ejemplo, la clave de condición department
RequestTag
especifica que la política se aplica durante la creación de la etiqueta. Por lo tanto, debe crear un clúster con una etiqueta que coincida con el valor especificado.
Para crear un clúster con una etiqueta, también debe tener permiso para realizar la acción elasticmapredue:AddTags
. En esta instrucción, la clave de condición elasticmapreduce:ResourceTag
garantiza que IAM solo conceda acceso a los recursos de etiquetas con el valor
en la etiqueta dev
. El elemento department
Resource
se utiliza para limitar este permiso a los recursos del clúster.
En el caso de los recursos de PassRole
, debe proporcionar el ID o alias de la cuenta de AWS, el nombre del rol de servicio en la instrucción PassRoleForEMR
y el nombre del perfil de instancia en la instrucción PassRoleForEC2
. Para obtener más información sobre el formato de los ARN en IAM, consulte ARN de IAM en la Guía del usuario de IAM.
Para obtener más información sobre cómo hacer coincidir los valores de las claves de etiqueta, consulte aws:RequestTag/tag-key
en la Guía del usuario de 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 acciones en clústeres con una etiqueta específica, con independencia del valor de su etiqueta
También puede permitir acciones solo en clústeres que tengan una etiqueta particular, con independencia del valor de la etiqueta. Para ello, puede utilizar el operador Null
. Para obtener más información, consulte Operador de condición para comprobar la existencia de claves de condición en la Guía del usuario de IAM. Por ejemplo, para permitir acciones solo en clústeres de EMR que tengan la etiqueta
, con independencia del valor que contenga, podría sustituir los bloques Condition del ejemplo anterior por el siguiente. El operador department
Null
buscará la presencia de la etiqueta
en un clúster de EMR. Si la etiqueta existe, la instrucción department
Null
se evalúa como falsa, ajustándose a la condición especificada en esta instrucción de política y se permiten las acciones adecuadas.
"Condition": { "Null": { "elasticmapreduce:ResourceTag/department":"false" } }
La siguiente instrucción de política permite a un usuario crear un clúster de EMR solo si el clúster tendrá una etiqueta
, que puede contener cualquier valor. En el caso del recurso department
PassRole
, debe proporcionar el ID o alias de la cuenta de AWS y el nombre del rol de servicio. Para obtener más información sobre el formato de los ARN en IAM, consulte ARN de IAM en la Guía del usuario de IAM.
Para obtener más información sobre cómo especificar el operador de condición null (“false”), consulte Operador de condición para comprobar la existencia de claves de condición en la Guía del usuario de 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*" } } } ] }
Ejemplo de instrucciones de políticas basadas en identidades para Cuadernos de Amazon EMR
Las instrucciones de políticas de IAM de ejemplo de esta sección muestran escenarios comunes del uso de claves para limitar las acciones permitidas mediante Cuadernos de Amazon EMR. Siempre que no haya ninguna otra política asociada a la entidad principal (usuario) que permita las acciones, las claves de contexto de condición limitan las acciones permitidas tal como se indica.
ejemplo : permitir el acceso únicamente a Cuadernos de Amazon EMR que un usuario cree en función del etiquetado
La instrucción de política de ejemplo mostrada a continuación, cuando se asocia a un rol o a un usuario, permite al usuario trabajar solamente con los cuadernos que haya creado. Esta instrucción de política utiliza la etiqueta predeterminada que se aplica al crear un bloc de notas.
En el ejemplo, el operador de condición StringEquals
intenta emparejar una variable que representa el ID de usuario del usuario actual ({aws:userId}
) con el valor de la etiqueta creatorUserID
. Si la etiqueta creatorUserID
no se ha añadido al bloc de notas o no contiene el valor del ID del usuario actual, la política no se aplica y esta política no permite las acciones. Si no hay otras instrucciones de política que permitan las acciones, el usuario solo puede trabajar con blocs de notas que tengan este valor para esta etiqueta.
{ "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}" } } } ] }
ejemplo — Etiquetado de cuadernos obligatorio al crearlos
En este ejemplo, se utiliza la clave de contexto RequestTag
. La acción CreateEditor
solo se permite si el usuario no cambia ni elimina la etiqueta creatorUserID
que se añade de forma predeterminada. La variable ${aws:userId}, especifica el ID de usuario del usuario activo actualmente, que es el valor predeterminado de la etiqueta.
La instrucción de política se puede utilizar para ayudar a garantizar que los usuarios no eliminan la etiqueta createUserId
ni cambian su valor.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}" } } } ] }
Este ejemplo requiere que el usuario cree el clúster con una etiqueta que tenga la cadena de clave dept
establecida en uno de los siguientes valores: datascience
, analytics
, operations
.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/dept": [ "datascience", "analytics", "operations" ] } } } ] }
ejemplo — Limitación de la creación de cuadernos a clústeres etiquetados y etiquetas de cuadernos obligatorias
Este ejemplo permite la creación de blocs de notas solo si el bloc de notas se crea con una etiqueta que tiene la cadena de clave owner
establecida en uno de los valores especificados. Además, el bloc de notas solo se puede crear si el clúster tiene una etiqueta con la cadena de clave department
establecida en uno de los 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" ] } } } ] }
ejemplo — Limitación de la capacidad de iniciar un cuaderno en función de las etiquetas
Este ejemplo limita la capacidad de iniciar blocs de notas únicamente a aquellos blocs de notas que tienen una etiqueta con la cadena de clave owner
establecida en uno de los valores especificados. Debido a que el elemento Resource
se utiliza solo para especificar el valor editor
, la condición no se aplica al clúster y no es necesario etiquetarlo.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/owner": [ "owner1", "owner2" ] } } } ] }
Este ejemplo es similar a uno anterior. Sin embargo, el límite solo se aplica a los clústeres etiquetados, no a los blocs de notas.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": [ "dep1", "dep3" ] } } } ] }
En este ejemplo, se utiliza un conjunto diferente de etiquetas de bloc de notas y de clúster. Permite el inicio de un bloc de notas solo si:
-
El bloc de notas tiene una etiqueta con la cadena de clave
owner
establecida en cualquiera de los valores especificados—y—
-
El clúster tiene una etiqueta con la cadena de clave
department
establecida en cualquiera de los 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" ] } } } ] }
ejemplo — Limitación de la capacidad de abrir el editor de cuadernos en función de las etiquetas
En este ejemplo, se permite la apertura del editor de blocs de notas solo si:
-
El bloc de notas tiene una etiqueta con la cadena de clave
owner
establecida en cualquiera de los valores especificados.—y—
-
El clúster tiene una etiqueta con la cadena de clave
department
establecida en cualquiera de los 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" ] } } } ] }