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

16

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 logon 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".

Sei que o usuário / grupo está funcionando porque, se eu selecionar o Modelo de Política do IAM para "Amazon EC2 Full Access", o usuário poderá acessar tudo no EC2.

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

Chris
fonte

Respostas:

13

Para que isso funcione, é necessário 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 SOMENTE tenha acesso ao acima. Eles NÃO terão acesso a mais nada. Isso inclui instâncias ec2, S3, IAM, cloudfront etc.

Scott Moore
fonte
1
Isso funcionou. Obrigado. O usuário pode ver todos os dados da instância, mas não pode iniciar / parar / criar, de modo que esteja próximo o suficiente. Você acha que existe uma maneira de indicar exatamente quais grupos de segurança eles podem acessar ou preciso deixar em aberto para todos os grupos de segurança?
22414 Chris
@ DevMan14, então existe uma maneira de indicar grupos de segurança específicos? Quando tento um segundo, o recurso abaixo não funciona e, com esse código, alguém pode usar o aws ec2 descrevem-security-groups e obtêm um pouco de informações sobre cada grupo de segurança
nsij22
1
Se você estiver vendo EC2ResponseError: 403 Erros proibidos , logo após instalar / modificar sua política, observe que demorou alguns minutos para que minha política entre em vigor
Storm_m2138
12

Se você deseja limitar a edição a um único grupo de segurança, acho que você precisa de duas instruções, o seguinte funcionou 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>"
            ]
        }
    ]
}

DescribeInstance pode não ser necessária, mas, no meu caso, eu queria, por isso não testei sem ele

Guillaume Gros
fonte
1
Consegui editar as regras SG sem as regras DescirbeInstance. Por exemplo, as opções globais * estão sendo definidas apenas como: "ec2:DescribeNetworkAcls", "ec2:DescribeSecurityGroups"
storm_m2138
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/*"
      ]
    }
  ]
}
Rico
fonte
Obrigado pela resposta, mas isso não funcionou. Sim, os grupos de segurança estão sendo usados ​​por várias instâncias - importa que sejam "Grupos de Segurança EC2" e não "Grupos de Segurança VPC"? - OU talvez eu esteja fazendo outra coisa errada, porque isso também não permite que o usuário veja as Instâncias, o que eu meio que esperava.
14444 Chris
1

Eu estava procurando uma resposta para uma pergunta que @ nsij22 fez 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 da resposta do @ DevMan14 podem ser usadas com recursos específicos:

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • RevokeSecurityGroupEgress
  • RevokeSecurityGroupIngress

Para todo o resto, o IAM Policy Simulator diz:

Esta ação não suporta permissões no nível do recurso. As políticas que concedem acesso devem especificar "*" no elemento de recurso.

Se parece com isso:

captura de tela.

Todos "permitido" e "negado" são iguais, então eu os derrubei.

selurvedu
fonte