Cloudformation ¿puedo crear un nuevo rol que haga referencia a una política existente?

10

Por el momento, tengo un bucket S3 compartido que tiene acceso específico a rutas de teclas particulares (es decir, carpetas) para diferentes instancias. Pude crear un perfil de instancia con mi nuevo rol y no probé problemas para limitar el acceso a esa carpeta.

Mi problema es que existe una función genérica existente con políticas definidas, que también quiero poder incluir en mi nueva función para cada pila.

En la formación en la nube, ¿es posible incluir políticas definidas en un rol para ser incluidas en otro rol sin tener que redefinir el documento de política en el nuevo rol?

Algo como lo siguiente:

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

La "política existente" es la parte importante aquí. He intentado encontrar el arn de la política existente para tratar de hacer referencia a ella, pero estoy un poco atascado.

hughmcmanus
fuente
La misma solución probablemente podría completarse agregando múltiples roles a los perfiles de instancia, pero por lo que he leído hay una limitación de que solo puede especificar un rol por perfil de instancia.
hughmcmanus

Respuestas:

12

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

Los AWS::IAM::Roletipos ahora tienen un ManagedPolicyArnscampo donde puede configurar esto. Solo necesita agarrar el ARN (fácil de agarrar desde la consola IAM) y colocarlo en ese campo. En el ejemplo a continuación, creé una función que proporciona acceso de ECR de solo lectura para que mi imagen pueda extraer los contenedores acoplables de 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
John Eikenberry
fuente
4

Puede lograr esto mediante el uso de políticas administradas . Coloque la política definida que desea compartir en una política administrada por el cliente, luego adjunte esa política definida a cada rol donde desee usarla. Cualquier cambio futuro a su política administrada se aplicará de inmediato a todos los roles que tienen adjunta la política administrada.

Puede crear la política administrada por el cliente en CloudFormation, a través de un recurso AWS :: IAM :: ManagedPolicy , o adjuntar una política administrada existente.

Markusk
fuente
3
¿Puedes mostrar cómo en Cloudformation?
lony
1

Para ampliar la respuesta de @ markusk re: Políticas administradas, sí, eso.

Ejemplo:

"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
fuente
-1

No, no puede insertar un rol en otro rol en este momento. Las únicas alternativas que se me ocurren son:

  • Cree un nuevo perfil de instancia con AWS :: IAM :: InstanceProfile y asígnele el rol genérico existente.
  • Antes de crear su pila de CloudFormation, ejecute un script que duplique el rol genérico. Por ejemplo, crea un nuevo rol, enumera todas las políticas para el rol genérico existente y las recrea en el nuevo rol. Luego, puede asignar el nuevo rol a un nuevo recurso de AWS :: IAM :: InstanceProfile en su plantilla y usarlo para su (s) instancia (s) EC2 o iniciar configuraciones.
dialt0ne
fuente
Terminé haciendo algo similar a tu segunda sugerencia. Moví las políticas en el rol genérico a la plantilla de formación en la nube, luego las agregué al nuevo rol si es necesario crearlas.
hughmcmanus
Si bien esta respuesta fue correcta cuando se escribió, es más larga, ya que AWS ha introducido políticas administradas desde entonces, lo que le permite reutilizar políticas.
markusk