¿Usar IAM para permitir al usuario editar grupos de seguridad de AWS / EC2?

16

Estoy tratando de otorgar a un grupo de IAM la capacidad de editar nuestros Grupos de seguridad de EC2, pero no he podido hacer que esto funcione sin otorgar acceso a todo en EC2.

He intentado varias versiones de esto:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392336685000",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:security-group/*"
      ]
    }
  ]
}

Pero cuando inicio sesión con el usuario de IAM, recibo un mensaje en la página del grupo de seguridad que dice "No está autorizado para realizar esta operación".

Sé que el usuario / grupo está funcionando porque si selecciono la Plantilla de política de IAM para "Acceso completo a Amazon EC2", el usuario puede acceder a todo en EC2.

Obviamente no tengo mucha experiencia con IAM, cualquier ayuda sería muy apreciada.

Chris
fuente

Respuestas:

13

Para que esto funcione, debe PERMITIR explícitamente lo siguiente:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392679134000",
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CreateSecurityGroup",
        "ec2:DeleteSecurityGroup",
        "ec2:DescribeInstanceAttribute",
        "ec2:DescribeInstanceStatus",
        "ec2:DescribeInstances",
        "ec2:DescribeNetworkAcls",
        "ec2:DescribeSecurityGroups",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

La política JSON anterior básicamente estipula que el usuario SOLO tiene acceso a lo anterior. NO tendrán acceso a nada más. Eso incluye instancias ec2, S3, IAM, cloudfront, etc.

Scott Moore
fuente
1
Esto funcionó. Gracias. El usuario puede ver todos los datos de la instancia, pero no puede iniciar / detener / crear, por lo que está lo suficientemente cerca. ¿Cree que hay una manera de indicar exactamente a qué grupos de seguridad pueden acceder, o debo dejarlo abierto a todos los grupos de seguridad?
Chris
@ DevMan14, ¿hay alguna forma de establecer grupos de seguridad específicos? cuando intento un segundo, el recurso que se muestra a continuación no funciona y con este código, alguien puede usar aws ec2 describe-security-groups y obtener una buena cantidad de información sobre cada grupo de seguridad
nsij22
1
Si ve EC2ResponseError: 403 Errores prohibidos , poco después de configurar / modificar su política, tenga en cuenta que pasaron unos minutos antes de que mi política entrara en vigencia
storm_m2138
13

Si desea limitar la edición a un solo grupo de seguridad, creo que necesita 2 declaraciones, lo siguiente funcionó para mí:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1413232782000",
            "Effect": "Allow",
            "Action": [               
                "ec2:DescribeInstanceAttribute",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeSecurityGroups"              
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Stmt1413232782001",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",                
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:<accountid>:security-group/sg-<id>"
            ]
        }
    ]
}

DescribeInstance puede no ser necesario, pero en mi caso lo quería, así que no he probado sin él

Guillaume Gros
fuente
1
Pude editar las reglas SG sin las reglas DescirbeInstance. Por ejemplo, las opciones globales * solo se configuran como: "ec2:DescribeNetworkAcls", "ec2:DescribeSecurityGroups"
storm_m2138
1

Parece que su grupo de seguridad está siendo utilizado por una instancia o algún otro recurso EC2. Puedes intentar:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392336685000",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:instance/*",
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:security-group/*"
      ]
    }
  ]
}
Rico
fuente
Gracias por la respuesta, pero eso no funcionó. Sí, los grupos de seguridad están siendo utilizados por varias instancias. ¿Importa que sean "Grupos de seguridad EC2" y no "Grupos de seguridad VPC"? - O tal vez estoy haciendo algo más mal porque esto tampoco permite que el usuario vea las instancias, lo que casi esperaba que hiciera.
Chris
1

Estaba buscando una respuesta para una pregunta que @ nsij22 hizo en los comentarios de la respuesta aceptada. Desafortunadamente, parece que eso no es posible. Según IAM Policy Simulator , solo las siguientes acciones de la respuesta de @ DevMan14 se pueden usar con recursos específicos:

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • RevokeSecurityGroupEgress
  • RevokeSecurityGroupIngress

Para todo lo demás, IAM Policy Simulator dice:

Esta acción no admite permisos de nivel de recurso. Las políticas que otorgan acceso deben especificar "*" en el elemento de recurso.

Se parece a esto:

captura de pantalla.

Todos los "permitidos" y "denegados" son iguales, así que los colapsé.

selurvedu
fuente