我对亚马逊的云形成技术非常陌生。我正在尝试与IAM角色一起启动ec2实例。
我有这个的cloudformation脚本。但我面临的问题是IAM角色和Ec2实例的创建,但它们并没有相互联系。
我确实使用AWS::IAM::Role
和AWS::IAM::InstanceProfile
创建了IAM角色。
我应该使用其他命令吗?
提前致谢。
答案 0 :(得分:12)
不得不去挖掘得到最终结果,但这是
的一个例子定义实例配置文件(由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资源。根据您的需求进行调整。 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
}
}
}