我对 Amazon cloudformation 技术非常陌生。我正在尝试与 IAM 角色一起启动一个 ec2 实例。
我为此准备了 cloudformation 脚本。但我面临的问题是创建了 IAM 角色和 Ec2 实例,但它们并没有相互关联。
AWS::IAM::Role
我确实使用and创建了 IAM 角色AWS::IAM::InstanceProfile
。
还有其他我应该使用的命令吗?
提前致谢。
我对 Amazon cloudformation 技术非常陌生。我正在尝试与 IAM 角色一起启动一个 ec2 实例。
我为此准备了 cloudformation 脚本。但我面临的问题是创建了 IAM 角色和 Ec2 实例,但它们并没有相互关联。
AWS::IAM::Role
我确实使用and创建了 IAM 角色AWS::IAM::InstanceProfile
。
还有其他我应该使用的命令吗?
提前致谢。
不得不挖掘以获得最终结果,但这里有一个例子
定义实例配置文件(由 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]"
错误消息。
解决此类问题的最简单方法是使用CloudFormer。CloudFormer 是一种工具,可从您在环境中运行的 AWS 资源创建起点模板。
CloudFormer 工具被打包为一个独立的应用程序,您可以在 AWS 环境中启动它。该应用程序通过 AWS CloudFormation 在 t1.micro Amazon EC2 实例上启动。
启动 Cloud Form 后,您将获得一个 Web 界面(检查已启动堆栈的输出部分中的 URL),该界面将能够描述您在特定区域中的所有资源。它将引导您了解您希望在每个类别(DNS、网络、计算...)中使用的资源。最后,您可以看到模板并将其复制,或将其保存在 S3 中。
但是,如果您希望手动执行此操作,则需要将AWS::IAM::InstanceProfile
您创建的添加Properties
到AWS::EC2::Instance
asIamInstanceProfile
{
"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
假设您创建的 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
}
}
}