2016-03-09 10 views
7

Ich habe die folgende Rolle. Ich möchte eine vorhandene verwaltete Richtlinie von einem anderen Stapel verwenden.Cloudformation, wie Managed-Policy von einem anderen Stapel

Wie kann ich das tun?

"TestRole": { 
    "Properties": { 
     "AssumeRolePolicyDocument": { 
     "Statement": [ 
      { 
      "Action": [ 
       "sts:AssumeRole" 
      ], 
      "Effect": "Allow", 
      "Principal": { 
       "Service": [ 
       "lambda.amazonaws.com" 
       ] 
      } 
      } 
     ], 
     "Version": "2012-10-17" 
     }, 
     "Path": "/lambda/", 
     "Policies": [ 
     ?????? 
     ] 
    }, 
    "Type": "AWS::IAM::Role" 
    } 

Antwort

1

Es gibt jetzt einen unterstützten Weg, dies zu tun, mit Imports/Exports. Im Grunde hat der Stapel, der die Richtlinie erstellt, eine Ausgabe, die den Richtliniennamen (oder ARN, nicht sicher, was in diesem Fall benötigt wird) enthält und ihn als einen Export mit einem regional eindeutigen Namen deklariert. Andere Stapel können sie dann mithilfe der Importfunktion verwenden.

Zum Beispiel, wenn der folgende Stapel (sagen wir es FooStack ist benannt) die verwaltete Politik schafft, kann es die folgende in seinem Ausgang haben:

"Outputs" : { 
    "MyManagedPolicy" : { 
     "Value" : { "Ref" : "MyManagedPolicy" }, 
     "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-MyManagedPolicy" }} 
    } 
} 

Der andere Stapel kann es verwenden:

"Policies": [ 
    { "Fn::ImportValue" : "FooStack-MyManagedPolicy" } 
] 
0

Nach dem docs des Ref CF-Funktion sollten Sie in der Lage sein, das verwenden, um die Managed-Politik Ressource durch ihren logischen Namen abzurufen.

Zum Beispiel:

Policies: [ 
    { "Ref" : "MyManagedPolicy" } 
] 

wo "MyManagedPolicy" würde der Name der Ressource, die Sie in Ihrer CF-Vorlage definiert:

"MyManagedPolicy" : { 
    "Type": "AWS::IAM::ManagedPolicy", 
    "Properties": { 
    "Description" : String, 
    "Groups" : [ String, ... ], 
    "Path" : String, 
    "PolicyDocument" : JSON object, 
    "Roles" : [ String, ... ], 
    "Users" : [ String, ... ] 
    } 
} 

hoffte, das hilft?

+0

Sie haben Recht, wenn es in meinem Stapel wäre, aber ich wollte auf eine Richtlinie von einem anderen Stapel verweisen. – lony