Kann ich mit Cloudformation eine neue Rolle erstellen, die auf eine vorhandene Richtlinie verweist?

10

Im Moment habe ich einen gemeinsam genutzten S3-Bucket, der spezifischen Zugriff auf bestimmte Schlüsselpfade (dh Ordner) für verschiedene Instanzen hat. Ich konnte mit meiner neuen Rolle ein Instanzprofil erstellen und ohne Probleme den Zugriff auf diesen Ordner einschränken.

Mein Problem ist, dass es eine generische Rolle mit definierten Richtlinien gibt, die ich auch für jeden Stapel in meine neue Rolle aufnehmen möchte.

Ist es in Cloudformation möglich, Richtlinien, die in einer Rolle definiert sind, in eine andere Rolle aufzunehmen, ohne das Richtliniendokument in der neuen Rolle neu definieren zu müssen?

So etwas wie das Folgende:

"AppTierS3AccessRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "AssumeRolePolicyDocument": {
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "Service": [ "ec2.amazonaws.com" ]
                        },
                        "Action": [ "sts:AssumeRole" ]
                    }
                ]
            },
            "Path": "/",
            "Policies": [ { "Ref": "existing-policy" } ]
        }
    },

Die "bestehende Politik" ist hier der wichtige Teil. Ich habe versucht, den Kern der vorhandenen Richtlinie zu finden, um zu versuchen, darauf zu verweisen, aber ich stecke ein bisschen fest.

hughmcmanus
quelle
Dieselbe Lösung könnte wahrscheinlich durch Hinzufügen mehrerer Rollen zu Instanzprofilen abgeschlossen werden. Nach dem, was ich gelesen habe, gibt es jedoch eine Einschränkung, dass Sie nur eine Rolle pro Instanzprofil angeben können.
Hughmcmanus

Antworten:

12

src: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html

Die AWS::IAM::RoleTypen haben jetzt ein ManagedPolicyArnsFeld, in dem Sie dies festlegen können. Sie müssen nur die ARN (einfach von der IAM-Konsole zu greifen) greifen und in dieses Feld einfügen. Im folgenden Beispiel habe ich eine Rolle erstellt, die schreibgeschützten ECR-Zugriff bietet, damit mein Image Docker-Container aus ECR ziehen kann.

  ecrRole:
    Type: AWS::IAM::Role
    Properties:
      Path: "/"
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - ec2.amazonaws.com
          Action:
          - sts:AssumeRole
John Eikenberry
quelle
4

Sie können dies mithilfe verwalteter Richtlinien erreichen . Fügen Sie die definierte Richtlinie, die Sie freigeben möchten, in eine vom Kunden verwaltete Richtlinie ein und hängen Sie diese definierte Richtlinie an jede Rolle an, in der Sie sie verwenden möchten. Alle zukünftigen Änderungen an Ihrer verwalteten Richtlinie werden sofort auf alle Rollen angewendet, an die die verwaltete Richtlinie angehängt ist.

Sie können die vom Kunden verwaltete Richtlinie entweder in CloudFormation über eine AWS :: IAM :: ManagedPolicy- Ressource erstellen oder eine vorhandene verwaltete Richtlinie anhängen.

Markusk
quelle
3
Können Sie zeigen, wie in Cloudformation?
Lony
1

Um die Antwort von @ markusk zu erweitern: Verwaltete Richtlinien - ja, das.

Beispiel:

"ManagedPolicy": {
  "Type": "AWS::IAM::ManagedPolicy",
  "Properties": {
    "Description": "something descriptive",
    "Groups": [ ... ref(s) for groups ... ],
    "Roles: [{"Ref":"AppTierS3AccessRole"}],
    "Users": [ ... ref(s) for users ... ],
    "PolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        ...
      ]
    }
  }
}
Peter Mounce
quelle
-1

Nein, Sie können derzeit keine Rolle in eine andere Rolle einbetten. Die einzigen Alternativen, die mir einfallen, sind:

  • Erstellen Sie mit AWS :: IAM :: InstanceProfile ein neues Instanzprofil und weisen Sie ihm die vorhandene generische Rolle zu.
  • Führen Sie vor dem Erstellen Ihres CloudFormation-Stacks ein Skript aus, das die generische Rolle dupliziert. Beispiel: Es wird eine neue Rolle erstellt, alle Richtlinien für die vorhandene generische Rolle werden aufgelistet und in der neuen Rolle neu erstellt. Anschließend können Sie die neue Rolle einer neuen AWS :: IAM :: InstanceProfile- Ressource in Ihrer Vorlage zuweisen und sie für Ihre EC2-Instanz (en) oder Startkonfiguration (en) verwenden.
dialt0ne
quelle
Am Ende habe ich etwas Ähnliches wie Ihren zweiten Vorschlag gemacht. Ich habe die Richtlinien in der generischen Rolle in die Cloudformationsvorlage verschoben und sie dann der neuen Rolle hinzugefügt, falls sie erstellt werden muss.
Hughmcmanus
Diese Antwort war beim Schreiben zwar korrekt, dauert jedoch länger, da AWS seitdem verwaltete Richtlinien eingeführt hat , mit denen Sie Richtlinien wiederverwenden können.
Markusk