Cloudformation posso creare un nuovo ruolo facendo riferimento a una politica esistente?


10

Al momento ho un bucket S3 condiviso che ha un accesso specifico a percorsi chiave particolari (ovvero cartelle) per istanze diverse. Sono stato in grado di creare un profilo di istanza con il mio nuovo ruolo e testare nessun problema limitando l'accesso a quella cartella.

Il mio problema è che esiste un ruolo generico esistente con criteri definiti, che voglio anche poter includere nel mio nuovo ruolo per ogni stack.

Nella cloudformation è possibile includere politiche definite in un ruolo da includere in un altro ruolo senza dover ridefinire il documento politico nel nuovo ruolo?

Qualcosa di simile al seguente:

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

La "politica esistente" è la parte importante qui. Ho cercato di trovare l'ARN della politica esistente per provare a fare riferimento a esso, ma sono un po 'bloccato.


La stessa soluzione potrebbe probabilmente essere completata aggiungendo più ruoli ai profili di istanza, ma da quello che ho letto c'è una limitazione che puoi specificare solo un ruolo per profilo di istanza.
hughmcmanus,

Risposte:


12

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

I AWS::IAM::Roletipi ora hanno un ManagedPolicyArnscampo in cui è possibile impostare questo. Hai solo bisogno di afferrare l'ARN (facile da afferrare dalla console IAM) e posizionarlo in quel campo. Nell'esempio seguente ho creato un ruolo che fornisce l'accesso ECR di sola lettura in modo che la mia immagine possa estrarre i contenitori docker dall'ECR.

  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

4

È possibile ottenere ciò utilizzando le politiche gestite . Inserire la politica definita che si desidera condividere in una politica gestita dal cliente, quindi allegare quella politica definita a ciascun ruolo in cui si desidera utilizzarla. Eventuali modifiche future alla politica gestita verranno immediatamente applicate a tutti i ruoli a cui è associata la politica gestita.

Puoi creare la politica gestita dal cliente in CloudFormation, tramite una risorsa AWS :: IAM :: ManagedPolicy , oppure allegare una politica gestita esistente.


3
Puoi mostrare come in Cloudformation?
lony

1

Per espandere la risposta di @ markusk in merito a: Politiche gestite, sì.

Esempio:

"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": [
        ...
      ]
    }
  }
}

-1

No, al momento non puoi incorporare un ruolo in un altro ruolo. Le uniche alternative che mi vengono in mente sono:

  • Crea un nuovo profilo di istanza con AWS :: IAM :: InstanceProfile e assegna ad esso il ruolo generico esistente.
  • Prima di creare il tuo stack CloudFormation, esegui uno script che duplica il ruolo generico. ad es. Crea un nuovo ruolo, elenca tutte le politiche per il ruolo generico esistente e le ricrea nel nuovo ruolo. Quindi, puoi assegnare il nuovo ruolo a una nuova risorsa AWS :: IAM :: InstanceProfile nel tuo modello e utilizzarlo per le tue istanze EC2 o per avviare le configurazioni.

Ho finito per fare qualcosa di simile al tuo secondo suggerimento. Ho spostato le politiche nel ruolo generico nel modello di cloudformation, quindi le ho aggiunte al nuovo ruolo, se necessario.
hughmcmanus,

Sebbene questa risposta sia stata corretta quando è stata scritta, è più lunga, poiché da allora AWS ha introdotto le politiche gestite , consentendoti di riutilizzarle.
Markusk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.