Use o IAM para permitir que o usuário edite grupos de segurança do AWS / EC2?

15

Estou tentando conceder a um grupo do IAM a capacidade de editar nossos grupos de segurança do EC2, mas não consegui fazer isso funcionar sem conceder acesso a tudo no EC2.

Eu tentei várias versões disso:

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

Mas quando eu faço login com o usuário do IAM, recebo uma mensagem na página do Grupo de segurança dizendo "Você não está autorizado a executar esta operação".

Eu sei que o usuário / grupo está funcionando porque, se eu selecionar o Modelo de política do IAM para "Acesso total ao Amazon EC2", o usuário poderá acessar tudo no EC2.

Eu obviamente não tenho muita experiência com o IAM, qualquer ajuda seria muito apreciada.

    
por Chris 14.02.2014 / 01:33

4 respostas

12

Para que isso funcione, você precisa permitir explicitamente o seguinte:

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

A política JSON acima, basicamente, estipula que o usuário tem acesso somente ao acima. Eles NÃO terão acesso a mais nada. Isso inclui instâncias do ec2, S3, IAM, cloudfront, etc.

    
por 18.02.2014 / 00:27
12

Se você quiser limitar a edição a um único grupo de segurança, eu acho que você precisa de duas declarações, as seguintes funcionaram para mim:

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

DescreverInstance pode não ser necessário, mas no meu caso eu queria, então não testei sem ele

    
por 13.10.2014 / 23:18
1

Parece que seu grupo de segurança talvez esteja sendo usado por uma instância ou algum outro recurso do EC2. Você pode tentar:

{
  "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/*"
      ]
    }
  ]
}
    
por 14.02.2014 / 02:47
1

Eu estava procurando uma resposta para um pergunta que @ nsij22 perguntou nos comentários da resposta aceita. Infelizmente, parece que isso não é possível. De acordo com o IAM Policy Simulator , apenas as seguintes ações de @ DevMan14 pode ser usada com recursos específicos:

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • RevokeSecurityGroupEgress
  • RevokeSecurityGroupIngress

Para todo o resto, o IAM Policy Simulator diz:

This action does not support resource-level permissions. Policies granting access must specify "*" in the resource element.

Parece assim:

.

Todosos"permitidos" e "negados" são iguais, então eu os recolhi.

    
por 04.06.2016 / 00:54