amazon web services - east - Asociar el rol de IAM existente con la instancia de EC2 en CloudFormation
aws console iam (3)
¿Qué estás tratando de hacer con el rol de IAM?
Tengo un script cfn que necesita acceso a un cubo S3 restringido. Mi bloque de instancia se ve así: bucketName y RoleName son ambos parámetros, con los valores predeterminados:
"Resources" : {
"myInstance" : {
"Type" : "AWS::EC2::Instance",
"Metadata" : {
"Comment1" : "My Instance stuff here",
"AWS::CloudFormation::Authentication": {
"default" : {
"type": "s3",
"buckets": [ { "Ref" : "bucketName" } ],
"roleName": { "Ref" : "RoleName" }
}
},
...snip...
Editar: incluyo el rol como parte de las propiedades al crear la instancia:
"Properties" : {
"ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "64"] },
"InstanceType" : { "Ref" : "InstanceType" },
"SecurityGroups" : [ {"Ref" : "SecurityGroup"} ],
"IamInstanceProfile" : { "Ref" : "RoleName" },
"KeyName" : { "Ref" : "KeyName" },
"BlockDeviceMappings" : [
{
"DeviceName" : "/dev/sda1",
"Ebs" : { "VolumeSize" : "10" }
}
],
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#!/bin/bash -v/n",
...snip...
] ] } }
Y el RoleName se define en mi sección de Parámetros:
"Parameters" : {
"RoleName" : {
"Description" : "Role description",
"Type" : "String",
"Default" : "my-default-role",
"ConstraintDescription" : "Must be a valid IAM Role"
}
}
¿Cómo puedo usar una función de IAM existente para una instancia de EC2, en lugar de crear una nueva en mi plantilla de CloudFormation?
Por ejemplo, he creado un rol en AWS Console y solo quiero usar eso.
Necesita un perfil de instancia, un rol y la información de instancia (o la configuración de inicio).
Su perfil de instancia se vería así:
"Resources" : {
"InstanceProfile" : {
"Type" : "AWS::IAM::InstanceProfile",
"Properties" : {
"Path" : "/",
"Roles" : ["MyExistingRole"]
}
},
"Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"IamInstanceProfile" : {"Ref" : "InstanceProfile"}
...
}
}
En particular, tenga en cuenta que la referencia en el perfil de la instancia es a un RoleName existente
Además, he escrito sobre las instancias de arranque que usan perfiles de instancia y roles para garantizar que no estamos persistiendo en la seguridad.
La clave es utilizar el {"Ref": RoleName} etc., para usar el nombre real de la función.
Puede usar un InstanceProfile existente en lugar de crear uno nuevo desde la pila. De hecho, uno ya podría haber sido creado para usted, a partir de los documentos :
Si usa AWS Management Console para crear un rol para Amazon EC2, la consola crea automáticamente un perfil de instancia y le da el mismo nombre que el rol.
Esto significa que es posible que no tenga que crear un recurso AWS::IAM::InstanceProfile
en la pila. Sin embargo, tenga en cuenta que también:
La consola no crea un perfil de instancia para una función que no está asociada con Amazon EC2.
En este caso, puede hacerlo manualmente desde AWS CLI usando estos 2 comandos:
aws iam create-instance-profile --instance-profile-name MyExistingRole
aws iam add-role-to-instance-profile --instance-profile-name MyExistingRole --role-name MyExistingRole
Luego, siempre que haya definido un rol en la interfaz de usuario denominada MyExistingRole
, esto será suficiente:
"Resources" : {
"Instance" : {
"Type" : "AWS::EC2::Instance",
...
"Properties" : {
"IamInstanceProfile" : "MyExistingRole",
...
}
}
}