Użyć IAM, aby zezwolić użytkownikowi na edycję grup zabezpieczeń AWS / EC2?

16

Usiłuję przyznać grupie IAM możliwość edytowania naszych grup zabezpieczeń EC2, ale nie byłem w stanie uzyskać tej pracy bez udzielenia dostępu do wszystkiego w EC2.

Wypróbowałem kilka wersji tego:

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

Ale kiedy loguję się z użytkownikiem IAM, na stronie Security Group pojawia się komunikat „Nie masz uprawnień do wykonania tej operacji”.

Wiem, że użytkownik / grupa działa, ponieważ jeśli wybiorę szablon zasad IAM dla „Amazon EC2 Full Access”, użytkownik może uzyskać dostęp do wszystkiego w EC2.

Oczywiście nie mam dużego doświadczenia z IAM, każda pomoc byłaby bardzo mile widziana.

Chris
źródło

Odpowiedzi:

13

Aby to zadziałało, musisz wyraźnie POZWOLIĆ na następujące czynności:

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

Powyższe zasady JSON w zasadzie stanowią, że użytkownik TYLKO ma dostęp do powyższych. NIE będą mieli dostępu do niczego innego. Obejmuje to wystąpienia ec2, S3, IAM, chmurę itp.

Scott Moore
źródło
1
To zadziałało. Dziękuję Ci. Użytkownik może zobaczyć wszystkie dane wystąpienia, ale nie może uruchomić / zatrzymać / utworzyć, więc jest to wystarczająco blisko. Czy uważasz, że istnieje sposób, aby dokładnie określić, do których grup zabezpieczeń mają dostęp, czy też muszę pozostawić to otwarte dla wszystkich grup zabezpieczeń?
Chris
@ DevMan14, więc czy istnieje sposób na określenie określonych grup zabezpieczeń? gdy próbuję sekundy, zasób taki jak poniżej nie działa i przy tym kodzie ktoś może użyć aws ec2 opisz-grupy bezpieczeństwa i uzyskać sporo informacji o każdej grupie bezpieczeństwa
nsij22
1
Jeśli widzisz błąd EC2ResponseError: 403 Niedozwolone błędy, krótko po skonfigurowaniu / modyfikacji polityki, zauważ, że
minęło
12

Jeśli chcesz ograniczyć edycję do pojedynczej grupy zabezpieczeń, myślę, że potrzebujesz 2 instrukcji, dla mnie zadziałały:

{
    "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 może nie być potrzebny, ale w moim przypadku chciałem go, więc nie testowałem bez niego

Guillaume Gros
źródło
1
Byłem w stanie edytować reguły SG bez reguł DescirbeInstance. Np. Globalne * opcje są ustawione tylko jako: "ec2:DescribeNetworkAcls", "ec2:DescribeSecurityGroups"
storm_m2138,
1

Wygląda na to, że Twoja grupa zabezpieczeń jest używana przez instancję lub inny zasób EC2. Możesz spróbować:

{
  "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
źródło
Dziękuję za odpowiedź, ale to nie zadziałało. Tak, grupy bezpieczeństwa są używane przez wiele instancji - czy to ważne, że są to „Grupy bezpieczeństwa EC2”, a nie „Grupy bezpieczeństwa VPC”? - LUB może robię coś innego źle, ponieważ nie pozwala to również użytkownikowi zobaczyć Instancji, czego się spodziewałem.
Chris
1

Szukałem odpowiedzi na pytanie, które @ nsij22 zadał w komentarzach przyjętej odpowiedzi. Niestety wygląda na to, że nie jest to możliwe. Według IAM Policy Simulator tylko określone działania z odpowiedzi @ DevMan14 mogą być używane z określonymi zasobami:

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • RevokeSecurityGroupEgress
  • RevokeSecurityGroupIngress

W pozostałym zakresie IAM Policy Simulator mówi:

Ta akcja nie obsługuje uprawnień na poziomie zasobów. Zasady przyznające dostęp muszą określać „*” w elemencie zasobu.

To wygląda tak:

zrzut ekranu.

Wszystkie „dozwolone” i „odrzucone” są takie same, więc je zwinąłem.

selurvedu
źródło