Создание экземпляра ec2 вместе с ролями IAM с использованием формирования облака

Я новичок в технологии облачного формирования Amazon. Я пытаюсь запустить экземпляр ec2 вместе с ролями IAM.

Для этого у меня есть облачный скрипт. Но проблема, с которой я сталкиваюсь, заключается в том, что роли IAM и экземпляры Ec2 создаются, но не связаны друг с другом.

Я создал IAM-роли, используя AWS::IAM::Role и AWS::IAM::InstanceProfile.

Есть ли еще какая-нибудь команда, которую я должен использовать?

Заранее спасибо.


person sriram    schedule 05.01.2013    source источник


Ответы (3)


Самый простой способ решить такие проблемы - использовать CloudFormer. CloudFormer - это инструмент, который создает шаблон начальной точки из ресурсов AWS, которые у вас уже есть в вашей среде.

Инструмент CloudFormer упакован как отдельное приложение, которое можно запустить в среде AWS. Приложение запускается на инстансе t1.micro Amazon EC2 через AWS CloudFormation.

После запуска Cloud Former вы получите веб-интерфейс (проверьте URL-адрес в разделе «Вывод» запущенного стека), который сможет описывать все ваши ресурсы в определенном регионе. Он укажет вам, какие ресурсы вы хотите в каждой категории (DNS, сеть, вычислительные ресурсы ...). В конце вы можете увидеть шаблон и скопировать его или сохранить в S3.

Но если вы хотите сделать это вручную, вам нужно добавить созданный вами AWS::IAM::InstanceProfile в Properties AWS::EC2::Instance как IamInstanceProfile

{
   "Type" : "AWS::EC2::Instance",
   "Properties" : {
      "AvailabilityZone" : String,
      "BlockDeviceMappings" : [ EC2 Block Device Mapping, ... ],
      "DisableApiTermination" : Boolean,
      "EbsOptimized" : Boolean,
      "IamInstanceProfile" : String,
      "ImageId" : String,
      "InstanceType" : String,
...
      "UserData" : String,
      "Volumes" : [ EC2 MountPoint, ... ]
   }
}

Дополнительные сведения см. AWS::EC2::Instance здесь

person Guy    schedule 05.01.2013
comment
Спасибо за ссылку на CloudFormer. Но как мне это использовать. Похоже, CloudFormer снова является конфигурацией Cloudformation. - person sriram; 05.01.2013
comment
Это просто сценарий для запуска экземпляра, который проанализирует вашу среду. Если у вас есть экземпляр с ролью, он задокументирует это в сценарии формирования вывода. - person Guy; 05.01.2013
comment
О, спасибо, так что я должен дать ami id этому скрипту, верно? Так что он может идентифицировать детали машины. - person sriram; 07.01.2013
comment
После запуска Cloud Former вы получите веб-интерфейс (в разделе «Вывод» запущенного стека), который сможет описывать все ваши ресурсы в определенном регионе. Он укажет, какие ресурсы вы хотите в каждой категории (DNS, сеть, вычислительные ресурсы ...). - person Guy; 07.01.2013

Пришлось покопаться, чтобы получить окончательный результат, но вот пример

  1. Определение роли доступа (это позволит экземпляру EC2 вступить в роль / принять роль),
  2. Определение политики для роли (т.е. когда EC2 принимает на себя роль, к каким ресурсам у него есть доступ),
  3. Определение профиля экземпляра (на который ссылается экземпляр EC2 и для которого назначена роль доступа)

    "S3AccessRole" : {
        "Type"  : "AWS::IAM::Role",
        "Properties" : {
            "AssumeRolePolicyDocument" : {
                "Statement" : [ {
                    "Effect" : "Allow",
                    "Principal" : {
                        "Service" : [ "ec2.amazonaws.com" ]
                    },
                    "Action" : [ "sts:AssumeRole" ]
                } ]
            },
            "Path" : "/"
        }
    },
    
    "S3RolePolicies" : {
        "Type" : "AWS::IAM::Policy",
        "Properties" : {
            "PolicyName" : "s3access",
            "PolicyDocument" : {
                "Statement" : [ {
                    "Effect" : "Allow",
                    "Action" : "s3:*",
                    "Resource" : "*"
                }]
            },
            "Roles" : [ { "Ref" : "S3AccessRole" } ]
        }
    },
    
    "S3InstanceProfile" : {
        "Type" : "AWS::IAM::InstanceProfile",
        "Properties" : {
            "Path" : "/",
            "Roles" : [ { "Ref" : "S3AccessRole" } ]
        }
    }
    

Вышеупомянутая политика разрешает любой доступ к ресурсам s3. Отрегулируйте в соответствии с вашими потребностями. Ссылка IamInstanceProfile в свойствах экземпляра EC2 будет означать { "Ref" : "S3InstanceProfile" }

Обратите внимание, что с мая 2015 года при создании стека, который создает роли IAM, вам необходимо установить флажок, подтверждающий такое создание, иначе вы получите ошибку "Stack creation error: Requires capabilities : [CAPABILITY_IAM]".

person Brett    schedule 23.07.2013
comment
Спасибо за очень четкий ответ, который меня отвлек. - person doer; 16.11.2015
comment
Если бы это был Reddit, я бы дал вам золото. - person Calvin; 13.11.2016
comment
Рад, что это помогло Кальвину. - person Brett; 14.11.2016

Предположим, что созданный вами ресурс AWS :: IAM :: InstanceProfile называется MyNewRole. Чтобы создать экземпляр с этой ролью (в том же шаблоне CloudFormation), установите для свойства IamInstanceProfile ресурса EC2 значение Ref для этого ресурса. Вот пример (без множества других деталей):

"Resources": {
    "MyNewRole": {
        "Type": "AWS::IAM::InstanceProfile",
        ... more stuff here
    },
    "MyNewEc2Instance": {
        "Type": "AWS::EC2::Instance",
        "Properties": {
            "IamInstanceProfile": { "Ref": "MyNewRole" },
            ... more stuff here
        }
    }
}
person Charles Engelke    schedule 07.01.2013