¿Cómo funciona la lógica de evaluación de IAM mediante una política de denegación explícita con varias claves de condición?
Quiero crear una política de denegación explícita de AWS Identity and Access Management (IAM). Esta política de denegación debe restringir la creación de instancias de Amazon Elastic Compute Cloud (Amazon EC2) y volúmenes de Amazon Elastic Block Store (Amazon EBS).
Descripción breve
Puede utilizar etiquetas de políticas de IAM para restringir el lanzamiento de instancias de EC2 y volúmenes de EBS mediante la utilización de los operadores de condición de cadena Allow con StringLike o Deny con StringNotLike.
Para obtener más información, consulte ¿Cómo puedo usar las etiquetas de políticas de IAM para restringir la forma en que se puede crear una instancia de EC2 o un volumen de EBS?
Resolución
Use el siguiente ejemplo de política de IAM, en el que se utiliza Deny con StringNotLike para restringir la creación de instancias de EC2 y volúmenes de EBS.
Nota: Se recomienda utilizar Deny con StringNotLike para evitar un acceso autorizado involuntariamente.
Si su política tiene varias claves o varios operadores de condición asociados a un único operador de condición, las condiciones se evaluarán con la lógica AND. Si se utiliza Deny con varios valores de etiqueta, cada clave RequestTag se deberá utilizar en una instrucción separada para obtener la misma lógica AND.
Nota: Puede que definir todos los valores de claves RequestTag en una condición con una política Deny no funcione como cabría esperar. Esto se debe a que la acción se permitirá hasta que se cumplan todas las condiciones. Cuando se cumplan todas las condiciones, se denegará la acción.
Se requieren las siguientes etiquetas:
- La etiqueta cost_center debe tener un valor que no sea nulo.
- La instancia de EC2 tiene una clave de etiqueta denominada Production.
- La etiqueta identifier debe consistir en una combinación de cinco caracteres.
- El valor de la etiqueta env debe ser sandbox, dev o prod.
Ejemplo de política:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowToDescribeAll", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "AllowRunInstances", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/*", "arn:aws:ec2:*::snapshot/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:key-pair/*" ] }, { "Sid": "AllowRunInstancesWithRestrictions1", "Effect": "Deny", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*" ], "Condition": { "StringNotLike": { "aws:RequestTag/cost_center": "?*" } } }, { "Sid": "AllowRunInstancesWithRestrictions2", "Effect": "Deny", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*" ], "Condition": { "ForAllValues:StringNotLike": { "aws:TagKeys": "Production" } } }, { "Sid": "AllowRunInstancesWithRestrictions3", "Effect": "Deny", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*" ], "Condition": { "StringNotLike": { "aws:RequestTag/identifier": "?????" } } }, { "Sid": "AllowRunInstancesWithRestrictions4", "Effect": "Deny", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*" ], "Condition": { "StringNotLike": { "aws:RequestTag/env": [ "sandbox", "dev", "prod" ] } } }, { "Sid": "AllowRunInstances1", "Effect": "Allow", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*" ] }, { "Sid": "AllowCreateTagsOnRunInstance", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*", "Condition": { "StringEquals": { "ec2:CreateAction": "RunInstances" } } } ] }
Tenga en cuenta los siguientes valores de imposición:
- El valor aws:TagKeys impone la distinción entre mayúsculas y minúsculas de Production.
- El valor ????? impone el uso de una combinación de cinco valores. Se ignoran los espacios que conducen o se arrastran.
- El valor ?* exige que haya como mínimo un carácter presente en el campo del valor, de modo que no se puedan lanzar instancias de EC2 con valores de etiqueta vacíos.
Información relacionada
How do I create an IAM policy to control access to Amazon EC2 resources using tags?
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un mes