2017-04-13 4 views
0

L'objectif de mon document de politique:Utilisation de la condition AWS nulle pour éviter les balises vides ou manquantes?

  1. Empêcher la création de ressources si elle ne dispose pas de balises appropriées
  2. exigent que certaines valeurs sont données à spécifiques balises (par exemple étiquette env doit être soit dev OU stg OU prd, etc.)

Le n ° 2 fonctionne comme prévu; cependant, si l'utilisateur crée une instance EC2 avec la balise vide ou oublie simplement de l'ajouter, la politique permet toujours à l'utilisateur de créer l'instance.

J'ai essayé l'opérateur nul (référencé here), mais cela ne semble pas fonctionner.

Une autre tentative a été d'utiliser une condition aws correspondant: valeurs tag-clés (référence here), mais il ne semble fonctionner lors de la vérification d'une valeur unique avec un opérateur de comparaison de type corde

C'est une condition préalable pour une fonction Lambda pour désactiver les instances de dev.


{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "RequireEnvTags", 
      "Effect": "Deny", 
      "Action": [ 
       "ec2:RunInstances" 
      ], 
      "Condition": { 
       "ForAnyValue:StringNotEquals": { 
        "ec2:ResourceTag/env": [ 
         "dev", 
         "stg", 
         "prd", 
         "dev-noshutdown" 
        ] 
       } 
      }, 
      "Resource": [ 
       "*" 
      ] 
     }, 
     { 
      "Sid": "RequireDataSensitivity1", 
      "Effect": "Deny", 
      "Action": [ 
       "ec2:RunInstances" 
      ], 
      "Condition": { 
       "ForAnyValue:StringNotEquals": { 
        "ec2:ResourceTag/data-sensitivity": [ 
         "public", 
         "internal", 
         "confidential", 
         "highly confidential" 
        ] 
       } 
      }, 
      "Resource": [ 
       "*" 
      ] 
     }, 
     { 
      "Sid": "NullChecksDontSeemToWork0", 
      "Effect": "Deny", 
      "Action": [ 
       "ec2:RunInstances" 
      ], 
      "Condition": { 
       "Null": { 
        "ec2:ResourceTag/Name": "true" 
       } 
      }, 
      "Resource": [ 
       "*" 
      ] 
     }, 
     { 
      "Sid": "NullChecksDontSeemToWork1", 
      "Effect": "Deny", 
      "Action": [ 
       "ec2:RunInstances" 
      ], 
      "Condition": { 
       "Null": { 
        "ec2:ResourceTag/team": "true" 
       } 
      }, 
      "Resource": [ 
       "*" 
      ] 
     } 
    ] 
} 

Répondre

0

Après avoir travaillé avec ce que j'ai trouvé qu'il avait juste besoin d'être peaufiné un peu. Pour une raison qui permet explicitement l'action dans le même document de politique (même si un autre document de politique attaché au même utilisateur déclare explicitement un PERMETTRE) est nécessaire pour AWS pour mettre en œuvre correctement la politique visant:

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": "ec2:RunInstances", 
     "Resource": [ 
      "arn:aws:ec2:*::image/ami-*", 
      "arn:aws:ec2:*:ACCOUNT_ID:subnet/*", 
      "arn:aws:ec2:*:ACCOUNT_ID:network-interface/*", 
      "arn:aws:ec2:*:ACCOUNT_ID:volume/*", 
      "arn:aws:ec2:*:ACCOUNT_ID:key-pair/*", 
      "arn:aws:ec2:*:ACCOUNT_ID:security-group/*" 
     ], 
     "Sid": "AllowRunInstances" 
    }, 
    { 
     "Effect": "Deny", 
     "Action": "ec2:RunInstances", 
     "Resource": "arn:aws:ec2:*:ACCOUNT_ID:instance/*", 
     "Condition": { 
      "StringNotLike": { 
       "aws:RequestTag/env": [ 
        "dev", 
        "stg", 
        "prd", 
        "dev-noshutdown", 
        "trn", 
        "tst" 
       ] 
      } 
     }, 
     "Sid": "RequireSpecificEnvTags" 
    } 
] 
} 

Et ça marche!

Une note rapide: actuellement, cette stratégie ne semble pas autoriser la création d'instances ponctuelles (en raison des différences dans la manière dont les requêtes ponctuelles traitent les balises). J'ai déposé une demande de fonctionnalité avec AWS.