¿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?

4 minutos de lectura
0

Quiero crear una política de denegación explícita de AWS Identity and Access Management (IAM) que restrinja la creación de instancias de Amazon Elastic Compute Cloud (Amazon EC2) y volúmenes de Amazon Elastic Block Store (Amazon EBS). ¿Cómo puedo hacerlo?

Breve descripción

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 Allow con StringLike o Deny con StringNotLike. Para obtener instrucciones sobre cómo utilizar los operadores de condición Allow con StringLike, consulte How can I use IAM policy tags to restrict how an EC2 instance or EBS volume can be created?

Solución

Siga 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.

Tenga en cuenta las siguientes etiquetas obligatorias:

  • 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.
{
    "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 obliga a comprobar las mayúsculas y minúsculas en Production.
  • El valor ????? impone que se puede utilizar una combinación de cinco caracteres de libre elección (se ignoran los espacios iniciales o finales).
  • 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?

Etiquetado de los recursos de Amazon EC2

Control de acceso a los recursos de AWS mediante etiquetas

Lógica de evaluación para condiciones con varias claves o valores

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años