2017-01-18 4 views
3

Création d'une stratégie AWS IAM pour qu'un utilisateur autorise uniquement l'arrêt et le démarrage de l'instance, mais si je donne une ressource ARN d'instance particulière, cela ne fonctionne pas. Par défaut EC2 Lecture seule autorisation a été donnée à l'utilisateur de décrire les instances EC2 et au-dessus de cette ajouté stratégie personnalisée de l'échantillon comme suit:Stratégie AWS IAM personnalisée au niveau de l'instance pour EC2 ne fonctionne pas

politique Exemple:

{ 
     "Version": "2012-10-17", 
     "Statement": [ 
      { 
       "Action": [ 
        "ec2:Describe*", 
        "ec2:StopInstances", 
        "ec2:RunInstances", 
        "ec2:StartInstances" 
       ], 
       "Effect": "Allow", 
       "Resource": "*"  

This works

   "Resource": "arn:aws:ec2:<region>:<account id>:instance/<instance id>" 
       "Resource": "arn:aws:ec2:<region>:<account id>:instance/*" 
       "Resource": "arn:aws:ec2:<region>::instance/*" 
       "Resource": "arn:aws:ec2:::instance/*" 
       "Resource": "arn:aws:ec2:::*"  

These doesn’t work

  } 
     ] 
    } 

Édité le 23 janvier (Pour montrer exactement ce que j'ai e done)

Objectif: Démarrer et arrêter l'autorisation d'instance sur une seule instance EC2 pour un utilisateur.

testé différentes politiques combo mais aucun d'entre eux travaillaient à l'exception "Resource": "*":

Dernière connexion: admin_user (Accès complet)

Créé une instance comme suit:

  1. Région: Oregon

  2. zone Disponibilité: nous-ouest-2c

  3. instance Id: i-xxx3dxxx32xxxxxxe

  4. Propriétaire: xxx23xxx11

créé un utilisateur: testec2_user

Autorisations accordées à la utilisateur:

  1. EC2 lecture seule (politique disponible)
  2. politique sur mesure pour permettre seulement arrêter et démarrer l'instance i-xxx38xxx32xx45 comme suit:

    { 
    "Version": "2012-10-17", 
    "Statement": [ 
        { 
         "Action": [ 
          "ec2:Describe*", 
          "ec2:RunInstances" 
         ], 
         "Effect": "Allow", 
         "Resource": "*" 
        }, 
        { 
         "Action": [ 
          "ec2:StopInstances", 
          "ec2:StartInstances" 
         ], 
         "Effect": "Allow", 
         "Resource": "arn:aws:ec2:us-west-2c:xxx23xxx11:instance/i-xxx3dxxx32xxxxxxe" 
        } 
         ] } 
    

vous êtes connecté comme testec2_user et essayé démarrage de l'instance arrêtée et erreur de réception reçue:

You are not authorized to perform this operation. Encoded authorization failure message 

J'ai un plan pour décoder le message reçu en utilisant sts decode authorization message de AWS.

Répondre

0

Voici comment vous spécifiez plusieurs ressources:

… 
     "Effect": "Allow", 
     "Action": "s3:*", 
     "Resource": [ 
     "arn:aws:s3:::BUCKET-NAME/home/${aws:username}", 
     "arn:aws:s3:::BUCKET-NAME/home/${aws:username}/*" 
     ] 
    } 
    ] 
} 

Source: http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html

EDIT:

Vous pouvez également utiliser des conditions si vous souhaitez filtrer au lieu d'inclure tous les ressources requises manuellement.

+0

Merci pour la réponse. J'ai essayé pour S3 et cela fonctionne parfaitement bien, mais ma question est liée à l'autorisation de niveau d'instance EC2. –

2

DescribeInstances ne prend pas en charge les autorisations au niveau des ressources. (Voir Unsupported Resource-Level Permissions).

If an Amazon EC2 API action does not support resource-level permissions, you can grant users permission to use the action, but you have to specify a * for the resource element of your policy statement.

Read more

Ainsi, vous pouvez réécrire votre politique comme:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Action": [ 
       "ec2:Describe*", 
       "ec2:RunInstances" 
      ], 
      "Effect": "Allow", 
      "Resource": "*" 
     }, 
     { 
      "Action": [ 
       "ec2:StopInstances", 
       "ec2:StartInstances" 
      ], 
      "Effect": "Allow", 
      "Resource": "arn:aws:ec2:<region>:<account>:instance/<instance-id>" 
     } 
    ] 
} 

EDIT

RunInstances a besoin d'accéder à plusieurs types de ressources en plus instance (tel que image, Paire de clés, Interface réseau, groupe Placement, groupe de sécurité, instantané, et sous-réseau Volume) et accepte un format spécifique pour chaque ARN type de ressource. Donc, arn:aws:ec2:<region>:<account id>:instance/* ne suffirait pas et vous obtiendrez une erreur UnauthorizedOperation. Le « ressources » élément doit être:

"Resource": "*" 

Quelle est la meilleure façon, ou:

"Resource": [ 
    "arn:aws:ec2:<region>:<account>:instance/*", 
    "arn:aws:ec2:<region>::image/*", 
    "arn:aws:ec2:<region>:<account>:key-pair/*", 
    "arn:aws:ec2:<region>:<account>:network-interface/*", 
    "arn:aws:ec2:<region>:<account>:placement-group/*", 
    "arn:aws:ec2:<region>:<account>:security-group/*", 
    "arn:aws:ec2:<region>::snapshot/*", 
    "arn:aws:ec2:<region>:<account>:subnet/*", 
    "arn:aws:ec2:<region>:<account>:volume/*" 
] 

Ce qui est plus complexe, mais fournit un contrôle fin sur chaque ressource. Par exemple, vous pouvez autoriser l'exécution RunInstances pour un ID d'image EC2 ou un ID de sous-réseau spécifique uniquement. Pour plus de détails, voir la section RunInstanceshere.

Note complémentaire sur PassRole Permission

Lors de l'exécution RunInstances, si l'instance EC2 doit inclure un profil d'exemple, l'utilisateur qui lance l'instance EC2 doit également avoir l'IAM PassRole l'autorisation afin d'associer une rôle avec l'instance lors du lancement. Par exemple:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     ... 
     { 
      "Action": "iam:PassRole", 
      "Effect": "Allow", 
      "Resource":"arn:aws:iam::<account>:role/<role-name>" 
     } 
    ] 
} 

De cette façon, vous assurez-vous que l'utilisateur ne passe pas un rôle à une instance EC2 où le rôle a plus d'autorisations que vous voulez que l'utilisateur ait.

Pour plus d'informations sur l'autorisation d'exécuter des instances EC2 avec des rôles IAM, voir l'article de blog AWS this.

+0

J'ai essayé toutes les solutions possibles, mais l'autorisation au niveau de l'instance ne fonctionne pas. J'ai essayé la politique sans décrire parce que Describe est disponible sur la politique de lecture seule d'EC2 (assignée à l'utilisateur). Cependant, vous pouvez arrêter, démarrer et exécuter les autorisations d'instances au niveau de la ressource, mais le problème d'autorisation persiste pour l'utilisateur. Comment '" Resource ":" * "' fonctionne et non '" Resource ":" arn: aws: ec2: : : instance/ "' pour arrêter, démarrer et exécuter des actions. –

+0

On dirait que 'RunInstances' n'accepte pas un ARN au format' arn: aws: ec2: : : instance/ '. Il doit être 'arn: aws: ec2: : : instance/*'. J'ai mis à jour ma réponse en conséquence. Pour plus de détails, voir la section 'RunInstances' ici: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-permissions.html#instance –

+0

Merci pour la réponse rapide. Laisse-moi essayer ça! –