Amazon Web Services: denegación de acceso mediante la política de IAM para instancias de EC2 y EBS

En este artículo, veremos cómo usar las condiciones de la política de administración de acceso e identidad de AWS para crear una política de IAM que niegue el acceso para crear instancias de computación en la nube de Amazon Elastic y volúmenes de almacén de bloques de Amazon Elastic cuando las etiquetas requeridas no se pasan junto con la creación. solicitud.

También veremos cómo puede usar las etiquetas de política de IAM para restringir el lanzamiento de instancias EC2 usando Deny con el operador de condición  StringNotLike .

Si su política opera bajo múltiples condiciones o tiene múltiples claves adjuntas a un solo operador de condición, entonces todas las condiciones se evalúan haciendo uso de la lógica AND. En el caso de Denegar etiquetas múltiples, cada clave de etiqueta debe usarse en una declaración separada para obtener la misma lógica AND. Demostraremos el siguiente caso de uso. Para lanzar cualquier instancia nueva desde la consola EC2, debe tener las cuatro etiquetas presentes para lanzarla con éxito.

  • La etiqueta cost_center debe tener un valor nulo.
  • La instancia EC2 tiene una clave de etiqueta denominada producción .
  • La etiqueta de identificación debe ser una combinación de cinco caracteres cualesquiera.
  • El valor debe ser uno entre sandbox , dev o prod .

Ahora inicie sesión en la consola de administración de AWS y navegue hasta la consola de IAM. En la página de navegación de IAM, en Políticas, elija Crear política .

Ahora elija la vista JSON y luego copie y pegue la política que se menciona a continuación: 

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

Las cuatro etiquetas de solicitud deben estar presentes para que la instancia EC2 se inicie correctamente.

La primera pila de requests contiene una clave de etiqueta cost_center y un valor de etiqueta con un signo de interrogación seguido de un comodín. Este valor exige que al menos un carácter esté presente en el campo de valor, de modo que si dos instancias no pueden iniciarse con una etiqueta vacía.

Las claves de la pila de AWS tienen una producción de valor . El valor de las claves de la pila de AWS impone comprobaciones de la distinción entre mayúsculas y minúsculas en la producción.

La tercera pila de requests contiene un identificador de clave de etiqueta y un valor de etiqueta con 5 signos de interrogación. Este valor obliga a que se ignore la combinación de 5 caracteres cualesquiera al principio o al final.

La cuarta pila de requests de AWS contiene la clave de etiqueta como env y el valor de etiqueta como sandbox , dev o prod .

Luego, elija revisar e ingrese un nombre para su política y luego elija la opción Crear política .

Ahora vaya a la pestaña Usuarios en el panel de navegación izquierdo y elija usuarios. Ya tenemos un usuario llamado usuario1. Para esto, elija la opción Agregar permisos y luego elija la pestaña Adjuntar políticas existentes directamente . Luego seleccione la casilla de verificación junto a su póliza y luego elija la opción Siguiente revisión

Y luego elige Agregar permisos .

Ahora demostremos la valoración de la política iniciando sesión con mi usuario usuario1 y ahora navegue a la consola de EC2. Ahora agreguemos la etiqueta que falta eligiendo volver a la pantalla de revisión. Ahora desplácese hacia abajo y elija la opción Editar etiquetas y elija Agregar otra etiqueta. Luego proporcione la clave de etiqueta como env y proporcione un valor entre sandbox, dev o prod .

Aquí proporcionaremos prod y elegiremos la opción Siguiente configurar grupo de seguridad . Finalmente, seleccione el grupo de seguridad existente.

En esta etapa, ahora podemos lanzar la instancia y veremos el mensaje que sus instancias están lanzando ahora. Elija la opción Ver instancias para ver la instancia lanzada.

Publicación traducida automáticamente

Artículo escrito por ddeevviissaavviittaa y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *