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.

Chris
la source

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.

Scott Moore
la source
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.

Guillaume Gros
la source
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/*"
      ]
    }
  ]
}
Rico
la source
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.

selurvedu
la source