Policy IAM per l'accesso basato su tag ai cluster e a EMR Notebooks - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Policy IAM per l'accesso basato su tag ai cluster e a EMR Notebooks

Puoi utilizzare le condizioni nella policy basata su identità per controllare l'accesso ai cluster e ai EMR Notebooks basati su tag.

Per ulteriori informazioni sull'aggiunta di tag ai cluster, consulta Tagging dei cluster EMR.

I seguenti esempi illustrano differenti scenari e modi per utilizzare gli operatori di condizione con chiavi di condizione Amazon EMR. Queste dichiarazioni di policy IAM sono concepite unicamente per scopi dimostrativi e non devono essere utilizzate negli ambienti di produzione. Esistono vari modi di combinare dichiarazioni di policy per concedere o negare autorizzazioni in base alle tue esigenze. Per ulteriori informazioni sulla pianificazione e sul test di policy IAM, consulta la Guida per l'utente di IAM.

Importante

Negare esplicitamente l'autorizzazione per operazioni di tagging è importante. Ciò impedisce agli utenti di concedersi personalmente autorizzazioni tramite tag di una risorsa che non avevi intenzione di accordare. Se non neghi le operazioni di assegnazione di tag per una risorsa, un utente può modificare i tag e aggirare l'intenzione delle policy basate su tag.

Dichiarazioni di policy basate su identità di esempio per cluster

Gli esempi di seguito dimostrano le policy di autorizzazioni basate su identità che vengono utilizzate per controllare le operazioni che sono consentite con cluster EMR.

Importante

L'operazione ModifyInstanceGroup in Amazon EMR non richiede che si specifichi un ID cluster. Per questo motivo, negare questa azione basata su tag del cluster richiede un'ulteriore considerazione. Per ulteriori informazioni, consulta Negando ilModifyInstanceGroup azione.

Autorizzazione di operazioni solo su cluster con specifici valori di tag

Gli esempi che seguono mostrano una policy che autorizza un utente a eseguire operazioni in base al tag di cluster department con il valore dev e un altro utente a contrassegnare cluster con quello stesso tag. L'esempio di policy finale mostra come negare privilegi per taggare cluster EMR con qualsiasi tag tranne quel tag.

Nell'esempio di policy seguente, l'operatore di condizione StringEquals cerca di far corrispondere dev con il valore del tag department. Se il tag department non è stato aggiunto al cluster, oppure non contiene il valore dev, la policy non viene applicata e le operazioni non sono consentite da questa policy. Se nessun'altra dichiarazione di policy consente le operazioni, l'utente può utilizzare solo i cluster che hanno questo tag con tale valore.

{ "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" } } } ] }

Puoi anche specificare più valori di tag utilizzando un operatore di condizione. Ad esempio, per consentire tutte le operazioni su cluster in cui il tag department contiene il valore dev o test, puoi sostituire il blocco di condizione nell'esempio precedente con quanto segue.

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

Richiesta dell'assegnazione di tag a un cluster appena creato

Come nell'esempio precedente, l'esempio seguente di policy cerca lo stesso tag corrispondente: il valore dev per il tag department. In questo esempio, però, la chiave di condizione RequestTag specifica che la policy si applica durante la creazione del tag. Quindi è necessario creare un cluster con un tag che corrisponda al valore specificato.

Per creare un cluster con un tag, devi anche disporre dell'autorizzazione per l'azione elasticmapredue:AddTags. Per questa dichiarazione, la chiave di condizione elasticmapreduce:ResourceTag garantisce che IAM conceda l'accesso solo alle risorse dei tag con il valore dev sul tag department. L'elemento Resource viene utilizzato per limitare questa autorizzazione alle risorse del cluster.

Per le risorse PassRole, è necessario fornire l'ID o l’alias dell'account AWS, il nome del ruolo di servizio nella dichiarazione PassRoleForEMR e il nome del profilo dell'istanza nell'istruzione PassRoleForEC2. Per ulteriori informazioni sul formato di ARN IAM, consulta ARN IAM nella Guida per l'utente di IAM.

Per ulteriori informazioni sulla corrispondenza delle chiavi di tag, consulta aws:RequestTag/tag-key nella Guida per l'utente 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*" } } } ] }

Autorizzazione di operazioni su cluster con uno specifico tag indipendentemente dal valore di tag

Puoi anche consentire operazioni solo su cluster con un determinato tag, indipendentemente dal valore di tag. A questo proposito, puoi utilizzare l'operatore Null. Per ulteriori informazioni, consulta Operatore di condizione per verificare la presenza di chiavi di condizione nella Guida per l'utente di IAM. Ad esempio, per consentire operazioni solo su cluster EMR con il tag department, indipendentemente dal valore che lo stesso contiene, puoi sostituire i blocchi di condizione nell'esempio precedente con quello illustrato di seguito. L'operatore Null cerca il tag department su un cluster EMR. Se il tag esiste, l'istruzione Null restituisce il valore false, corrispondente alla condizione specificata nella dichiarazione di policy, e le operazioni appropriate sono consentite.

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

La dichiarazione di policy seguente consente a un utente di creare un cluster EMR solo se il cluster avrà un tag department, indipendentemente dal valore dello stesso. Per la risorsa PassRole, è necessario fornire l'ID account o alias AWS e il nome del ruolo di servizio. Per ulteriori informazioni sul formato di ARN IAM, consulta ARN IAM nella Guida per l'utente di IAM.

Per ulteriori informazioni su come specificare l'operatore di condizione null ("falso"), consulta Operatore di condizione per verificare la presenza di chiavi di condizione nella Guida per l'utente di 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*" } } } ] }

Dichiarazioni di policy basate su identità di esempio per EMR Notebooks

Le dichiarazioni di policy IAM di esempio in questa sezione illustrano scenari comuni per l'utilizzo di chiavi per limitare le operazioni consentite mediante EMR Notebooks. Finché nessun'altra policy associata al principale (utente) consente le operazioni, le chiavi di contesto della condizione limitano le operazioni consentite come indicato.

Esempio
: consente l'accesso solo ai EMR Notebooks creati da un utente in base all'assegnazione di tag

L'esempio seguente di dichiarazione politica, se associata a un ruolo o a un utente, consente a un utente di lavorare solo con i notebook che ha creato. Questa istruzione di policy usa il tag predefinito applicato durante la creazione di un notebook.

Nell'esempio,StringEqualsl'operatore di condizione cerca di abbinare una variabile che rappresenta gli utenti correnti: un ID utente ({aws:userId}) con il valore del tagcreatorUserID. Se il tag creatorUserID non è stato aggiunto al notebook, oppure non contiene il valore dell'ID dell'utente corrente, la policy non viene applicata e le operazioni non sono consentite da questa policy. Se nessun'altra istruzione di policy consente le operazioni, l'utente può utilizzare solo i notebook che hanno questo tag con tale valore.

{ "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}" } } } ] }
Esempio -Richiedere l'assegnazione di tag al notebook durante la creazione

In questo esempio viene utilizzata la chiave di contesto RequestTag. L'operazione CreateEditor è consentita solo se l'utente non modifica o elimina il tag creatorUserID aggiunto per impostazione predefinita. La variabile ${aws:userId}, specifica l'ID dell'utente attualmente attivo, che è il valore predefinito del tag.

L'istruzione della policy può essere utilizzata per garantire che gli utenti non rimuovano il tag createUserId o ne modifichino il valore.

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

Questo esempio richiede che l'utente crei il cluster con un tag con la stringa di chiave dept e un valore impostato per uno dei seguenti: datascience, analytics, operations.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/dept": [ "datascience", "analytics", "operations" ] } } } ] }
Esempio -Limitare la creazione di notebook ai cluster con tag e richiedere i tag del notebook

Questo esempio consente la creazione di notebook solo se il notebook viene creato con un tag che abbia la stringa di chiave owner impostata su uno dei valori specificati. Inoltre, è possibile creare il notebook solo se il cluster dispone di un tag con la stringa di chiave department impostata su uno dei valori specificati.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/owner": [ "owner1", "owner2", "owner3" ], "elasticmapreduce:ResourceTag/department": [ "dep1", "dep3" ] } } } ] }
Esempio -Limitare la possibilità di avviare un notebook basato su tag

Questo esempio limita la possibilità di avviare solo i notebook che dispongono di un tag con la stringa di chiave owner impostata su uno dei valori specificati. Poiché l'elemento Resource è utilizzato per specificare solo editor, la condizione non è valida per il cluster e non è necessario aggiungere tag al cluster.

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

Questo esempio è simile a uno precedente. Tuttavia, il limite si applica solo ai cluster a cui sono applicati tag, non ai notebook.

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

In questo esempio viene utilizzato un altro set di tag di notebook e cluster. Consente di avviare un notebook solo se:

  • Il notebook dispone di un tag con la stringa di chiave owner impostata su uno dei valori specificati

    -e-

  • Il cluster dispone di un tag con la stringa di chiave department impostata su uno dei valori specificati

{ "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" ] } } } ] }
Esempio -Limitare la possibilità di aprire l'editor del notebook basato su tag

Questo esempio consente di aprire l'editor del notebook solo se:

  • Il notebook dispone di un tag con la stringa di chiave owner impostata su uno dei valori specificati.

    -e-

  • Il cluster dispone di un tag con la stringa di chiave department impostata su uno dei valori specificati.

{ "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" ] } } } ] }