使用云形成创建ec2实例以及IAM角色

时间:2013-01-05 08:42:22

标签: amazon-web-services amazon-cloudformation

我对亚马逊的云形成技术非常陌生。我正在尝试与IAM角色一起启动ec2实例。

我有这个的cloudformation脚本。但我面临的问题是IAM角色和Ec2实例的创建,但它们并没有相互联系。

我确实使用AWS::IAM::RoleAWS::IAM::InstanceProfile创建了IAM角色。

我应该使用其他命令吗?

提前致谢。

3 个答案:

答案 0 :(得分:12)

不得不去挖掘得到最终结果,但这是

的一个例子
  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" } ]
        }
    }
    
  4. 上述政策允许所有人访问s3资源。根据您的需求进行调整。 EC2实例属性中的IamInstanceProfile引用将引用为{ "Ref" : "S3InstanceProfile" }

    请注意,自2015年5月起,当您创建用于创建IAM角色的堆栈时,您需要选中一个确认此类创建的框,否则您将收到"Stack creation error: Requires capabilities : [CAPABILITY_IAM]"错误。

答案 1 :(得分:2)

解决此类问题的最简单方法是使用CloudFormer。 CloudFormer是一个工具,可以从您已在环境中运行的AWS资源创建起点模板。

  

CloudFormer工具打包为您的独立应用程序   可以在您的AWS环境中启动。该应用程序已启动   通过AWS CloudFormation实现t1.micro Amazon EC2实例。

启动Cloud Former后,您将获得一个Web界面(检查已启动堆栈的“输出”部分中的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 here

答案 2 :(得分:0)

假设您创建的AWS :: IAM :: InstanceProfile资源名为MyNewRole。要创建具有该角色的实例(在同一个CloudFormation模板中),请将EC2资源的IamInstanceProfile属性设置为该资源的Ref。这是一个例子(遗漏了许多其他细节):

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