2017-01-19 4 views
0

Ich versuche eine wiederverwendbare CloudFormation-Vorlage zu erstellen und möchte eine Art bedingte Eingabe vornehmen, wenn der Umgebungsparameter "test" ist (oder eine andere Umgebung als "prod"). Senden Sie dann SES-E-Mails nur an Gmail-Konten (z. B. Firmenkonten), aber für "prod" senden Sie SES-E-Mails überall hin. Müsste ich zwei verschiedene Rollen spielen und Bedingungen für jeden haben? Oder gibt es eine Möglichkeit, dies nur in der einen Rolle zu tun? Danke für jede Hilfe!AWS CloudFormation-Umgebungsbedingung für ses-Rolle

Parameters: 

    Environment: 
    Description: Environment, which can be "test", "stage", "prod", etc. 
    Type: String 

Resources: 

    Role: 
    Type: AWS::IAM::Role 
    Properties: 
    RoleName: myRole 
    Path:/
    AssumeRolePolicyDocument: 
     Version: "2012-10-17" 
     Statement: 
     - 
      Effect: "Allow" 
      Principal: 
      Service: 
       - "ecs.amazonaws.com" 
      Action: 
      - "sts:AssumeRole" 
    Policies: 
     - 
     PolicyName: "ses-policy" 
     PolicyDocument: 
      Version: "2012-10-17" 
      Statement: 
      - 
       Effect: "Allow" 
       Action: 
       - "ses:SendEmail" 
       - "ses:SendRawEmail" 
       Resource: "*" 
       Condition: 
       "ForAllValues:StringLike": 
        "ses:Recipients": 
        - "*@gmail.com" 

Antwort

2

Conditions sind hervorragend geeignet, diese Art von bedingter Logik zu Cloudformation Ressourceneigenschaften für das Hinzufügen. In Ihrem Beispiel könnten Sie die Intrinsic-Funktion Fn::If verwenden, um die vorhandene Policy Condition (nicht zu verwechseln mit der CloudFormation-Bedingung!) Zu verwenden, wenn die Umgebung nicht und AWS::NoValue ist (Entfernen der Richtlinienbedingung vollständig, wenn die Umgebung prod ist):

Parameters: 
    Environment: 
    Description: Environment, which can be "test", "stage", "prod", etc. 
    Type: String 
    AllowedValues: [test, stage, prod] 
Conditions: 
    IsProdEnvironment: !Equals [ !Ref Environment, prod ] 
Resources: 
    Role: 
    Type: AWS::IAM::Role 
    Properties: 
     RoleName: myRole 
     Path:/
     AssumeRolePolicyDocument: 
     Version: "2012-10-17" 
     Statement: 
      - 
      Effect: "Allow" 
      Principal: 
       Service: 
       - "ecs.amazonaws.com" 
      Action: 
       - "sts:AssumeRole" 
     Policies: 
     - 
      PolicyName: "ses-policy" 
      PolicyDocument: 
      Version: "2012-10-17" 
      Statement: 
       - 
       Effect: "Allow" 
       Action: 
        - "ses:SendEmail" 
        - "ses:SendRawEmail" 
       Resource: "*" 
       Condition: !If 
       - IsProdEnvironment 
       - !Ref AWS::NoValue 
       - "ForAllValues:StringLike": 
        "ses:Recipients": 
         - "*@gmail.com"