Как я могу использовать существующую роль IAM для экземпляра EC2, а не создавать новую в моем шаблоне CloudFormation?
Например, я создал роль в AWS Console и просто хочу ее использовать.
Как я могу использовать существующую роль IAM для экземпляра EC2, а не создавать новую в моем шаблоне CloudFormation?
Например, я создал роль в AWS Console и просто хочу ее использовать.
Вам нужен профиль экземпляра, роль и информация об экземпляре (или настройка запуска).
Профиль вашего экземпляра будет выглядеть следующим образом:
"Resources" : {
"InstanceProfile" : {
"Type" : "AWS::IAM::InstanceProfile",
"Properties" : {
"Path" : "/",
"Roles" : ["MyExistingRole"]
}
},
"Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"IamInstanceProfile" : {"Ref" : "InstanceProfile"}
...
}
}
В частности - обратите внимание, что ссылка в профиле экземпляра относится к существующему RoleName
Также - Я написал об экземплярах начальной загрузки, в которых используются профили и роли экземпляра, чтобы гарантировать, что мы не сохраняем безопасность.
Главное, а не использовать { "Ref": RoleName} и т.д., чтобы использовать фактическое имя роли.
Вы можете использовать существующий экземпляр InstanceProfile вместо создания нового изнутри стека. На самом деле, вы уже можете создать для себя - от документы:
Если вы используете консоль управления AWS для создания роли для Amazon EC2, консоль автоматически создает профиль экземпляра и дает ему то же имя, что и роль.
Это означает, что вам необязательно создавать ресурс AWS::IAM::InstanceProfile
в стеке. Однако обратите внимание, что также:
Консоль не создает профиль экземпляра для роли, не связанной с Amazon EC2.
В этом случае вы можете сделать это вручную из AWS CLI, используя следующие две команды:
aws iam create-instance-profile --instance-profile-name MyExistingRole
aws iam add-role-to-instance-profile --instance-profile-name MyExistingRole --role-name MyExistingRole
Затем, если вы определили роль в пользовательском интерфейсе с именем MyExistingRole
, этого будет достаточно:
"Resources" : {
"Instance" : {
"Type" : "AWS::EC2::Instance",
...
"Properties" : {
"IamInstanceProfile" : "MyExistingRole",
...
}
}
}
Что вы пытаетесь сделать с ролью IAM?
У меня есть cfn script, которому нужен доступ к ограниченному ведро S3. Мой блок экземпляра выглядит так: bucketName и RoleName являются параметрами со значениями по умолчанию:
"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...
Изменить: я включаю роль как часть свойств при создании экземпляра:
"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...
] ] } }
И имя роли определено в разделе "Параметры":
"Parameters" : {
"RoleName" : {
"Description" : "Role description",
"Type" : "String",
"Default" : "my-default-role",
"ConstraintDescription" : "Must be a valid IAM Role"
}
}