¿Es posible restringir usuarios / cuentas de AWS a una región específica?

24

Llevamos a cabo una serie de servicios de AWS en la región eu-west-1. Desafortunadamente, parece que muchos de nuestros desarrolladores y otros empleados que necesitan crear recursos temporales se olvidan de este aspecto de AWS y no seleccionan esta región antes de lanzar instancias EC2, crear cubos S3, etc. Como resultado, a menudo terminan en la región us-east-1, ya que parece ser el valor predeterminado que AWS siempre usa.

¿Hay alguna forma a través de IAM (o de alguna otra manera) de restringir las cuentas de usuario para que solo inicien / creen cosas dentro de una región específica?

Bruce P
fuente

Respuestas:

25

Desafortunadamente no puedes hacer esto a nivel mundial. Sin embargo, para cada producto de AWS que lo admita, normalmente puede limitar el acceso a una determinada región.

Por ejemplo, para EC2, puede hacer lo siguiente:

{
  "Statement":[{
    "Effect":"allow",
    "Action":"RunInstances",
    "Resource":"*",
    "Condition":{
      "StringEquals":{
        "ec2:Region":"us-west-1"
        }
      }
    }
  ]
}

Por supuesto, también deberías emitir una denyregla cuando sea apropiado.

Aquí está la documentación de lo anterior.

EEAA
fuente
Perfecto. Esto se ve exactamente como lo que necesito. ¡Gracias!
Bruce P
55
En lugar de "Condition": { "condition": {} }eso debería decir"Condition": { "StringEquals": {} }
Jasny - Arnold Daniels
¿Qué pasa con otros servicios como S3?
Yves M.
7

Usa algo como esto. Este ejemplo restringe el acceso a dos regiones de AWS. Modifique según sea necesario.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": "*",
    "Resource": "*",
    "Condition": {
      "StringNotEquals": {
        "aws:RequestedRegion": [
          "eu-central-1",
          "eu-west-1"
        ]
      }
    }
  }]
}
Sandstrom
fuente
3
Con lo nuevo aws:RequestedRegion, esta es la respuesta que ahora es más relevante
majikman el
1
Gracias, con esta política puede usar las políticas disponibles de AWS predeterminadas y solo adjuntar esta en línea y restringir efectivamente cualquier servicio.
lkraider
7

Desde el 25 de abril de 2018, AWS tiene un recurso global aws: RequestedRegion que puede usar para limitar las regiones a las que un usuario puede enviar solicitudes. Esto es independiente de que el servicio sea regional o no, por lo que puede aplicarlo a todos los servicios.

Blog de seguridad de AWS

Desafortunadamente, no puede usar esto en la Política de control de servicios de una organización para aplicarlo a una cuenta globalmente, y debe adjuntar la política a cada principal y auditar que esto es así, si desea bloquear una cuenta en ciertas regiones.

jaferrando
fuente
4

La respuesta aceptada en este hilo dio Syntax Error on Policy. A continuación funcionó para mí:

{
"Statement": [
    {
        "Sid": "Stmt1375943389569",
        "Action": "ec2:*",
        "Effect": "Allow",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "ec2:Region": "eu-central-1"
            }
        }
    }
]

}

DOGUILLO
fuente
3

Si solo solicita acciones EC2, entonces sí, puede limitarlo como se menciona en otras respuestas. Si se trata de otros servicios, no estoy seguro de que pueda hacerlo ... por ejemplo, AWS Lambda no parece tener un servicio lambda:regionque pueda agregar a una condición.

nanodgb
fuente
0

De las preguntas frecuentes para AWS IAM :

P: ¿Se pueden definir los usuarios regionalmente? Inicialmente no Los usuarios son entidades globales, como lo es hoy una cuenta de AWS. No se requiere especificar ninguna región al definir los permisos de usuario. los usuarios pueden usar los servicios de AWS en cualquier región geográfica.

mtak
fuente
3
Guau. Qué respuesta tan pobremente escrita de Amazon. "No inicialmente". ¿Eso implica que se puede hacer después de crear la cuenta? ¿Eso significa que AWS no pudo cuando se lanzó por primera vez, pero ahora puede? "No se requiere especificar ninguna región al definir los permisos de usuario". No pregunté si era necesario. Le pregunté si era posible hacerlo. "los usuarios pueden usar los servicios de AWS en cualquier región geográfica". Aparentemente ya no se basa en lo que EEAA publicó anteriormente. La declaración de "condición" en IAM le permite restringir algunos servicios por región. Gracias de todos modos.
Bruce P
1
@BruceP: no es una respuesta pobre. Esta perfectamente bien. Los usuarios son globales. Los privilegios del usuario pueden ser restringidos.
EEAA
0

Encontré que esto funciona mejor (permite iniciar / detener / finalizar / etc.) para otorgar acceso completo a EC2 para un usuario a solo una región: cada otra región muestra un error durante cualquier intento de acceso.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:Region": "us-east-1"
                }
            }
        }
    ]
}
Al Joslin
fuente
0

Este me funciona, traté de crear una política con el json mencionado como una respuesta aceptada, pero no me funciona.

{
    "Version": "2012-10-17",
    "Statement": [{
        "Action": "ec2:*",
        "Effect": "Allow",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "ec2:Region": [
                    "us-east-1"
                ]
            }
        }
    }]
}
Pranav Kumar
fuente
0

Esa es la solución actual: usar "eu-west-1":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect"    : "Allow",
            "Action"    : "*",
            "Resource"  : "*",
            "Condition": 
            {
                "StringEquals": {
                    "aws:RequestedRegion": "eu-west-1"
                }
            }
        }
    ]
}
Xtigyro
fuente