Utiliser IAM pour autoriser l'utilisateur à modifier les groupes de sécurité AWS / EC2?


16

J'essaie d'accorder à un groupe IAM la possibilité de modifier nos groupes de sécurité EC2, mais je n'ai pas pu faire fonctionner cela sans accorder l'accès à tout dans EC2.

J'en ai essayé plusieurs versions:

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

Mais lorsque je me connecte avec l'utilisateur IAM, je reçois un message dans la page Groupe de sécurité disant «Vous n'êtes pas autorisé à effectuer cette opération».

Je sais que l'utilisateur / groupe fonctionne car si je sélectionne le modèle de stratégie IAM pour "Amazon EC2 Full Access", l'utilisateur peut accéder à tout dans EC2.

Je n'ai évidemment pas beaucoup d'expérience avec IAM, toute aide serait grandement appréciée.

Réponses:


13

Pour que cela fonctionne, vous devez AUTORISER explicitement les éléments suivants:

{
  "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 politique JSON ci-dessus stipule essentiellement que l'utilisateur a accès UNIQUEMENT à ce qui précède. Ils n'auront PAS accès à autre chose. Cela inclut les instances ec2, S3, IAM, cloudfront, etc.


1
Cela a fonctionné. Merci. L'utilisateur peut voir toutes les données de l'instance mais ne peut pas démarrer / arrêter / créer, donc c'est assez proche. Pensez-vous qu'il existe un moyen d'indiquer exactement à quels groupes de sécurité ils peuvent accéder, ou dois-je le laisser ouvert à tous les groupes de sécurité?
Chris

@ DevMan14 existe-t-il donc un moyen d'indiquer des groupes de sécurité spécifiques? lorsque j'essaie une seconde, la ressource comme ci-dessous ne fonctionne pas et avec ce code, quelqu'un est capable d'utiliser aws ec2 describe-security-groups et d'obtenir un bon nombre d'informations sur chaque groupe de sécurité
nsij22

1
Si vous voyez EC2ResponseError: 403 erreurs interdites , peu de temps après avoir configuré / modifié votre stratégie, notez qu'il a fallu quelques minutes avant que ma stratégie entre en vigueur
storm_m2138

12

Si vous souhaitez limiter l'édition à un seul groupe de sécurité, je pense que vous avez besoin de 2 instructions, les suivantes ont fonctionné pour moi:

{
    "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 n'est peut-être pas nécessaire, mais dans mon cas, je le voulais, alors je n'ai pas testé sans.


1
J'ai pu modifier les règles SG sans les règles DescirbeInstance. Par exemple, les options globales * ne sont définies que comme: "ec2:DescribeNetworkAcls", "ec2:DescribeSecurityGroups"
storm_m2138

1

Il semble que votre groupe de sécurité soit peut-être utilisé par une instance ou une autre ressource EC2. Peux-tu essayer:

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

Merci pour la réponse mais cela n'a pas fonctionné. Oui, les groupes de sécurité sont utilisés par plusieurs instances - est-ce important qu'il s'agisse de "groupes de sécurité EC2" et non de "groupes de sécurité VPC"? - OU peut-être que je fais quelque chose de mal parce que cela ne permet pas non plus à l'utilisateur de voir les instances, ce que je m'attendais à moitié à ce qu'il fasse.
Chris

1

Je cherchais une réponse à une question posée par @ nsij22 dans les commentaires de la réponse acceptée. Malheureusement, il semble que ce ne soit pas possible. Selon IAM Policy Simulator , seules les actions suivantes de la réponse de @ DevMan14 peuvent être utilisées avec des ressources spécifiques:

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • RevokeSecurityGroupEgress
  • RevokeSecurityGroupIngress

Pour tout le reste, IAM Policy Simulator dit:

Cette action ne prend pas en charge les autorisations au niveau des ressources. Les stratégies accordant l'accès doivent spécifier "*" dans l'élément de ressource.

Cela ressemble à ceci:

capture d'écran.

Tous «autorisés» et «refusés» sont les mêmes, alors je les ai effondrés.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.