4

我对 Amazon cloudformation 技术非常陌生。我正在尝试与 IAM 角色一起启动一个 ec2 实例。

我为此准备了 cloudformation 脚本。但我面临的问题是创建了 IAM 角色和 Ec2 实例,但它们并没有相互关联。

AWS::IAM::Role我确实使用and创建了 IAM 角色AWS::IAM::InstanceProfile

还有其他我应该使用的命令吗?

提前致谢。

4

3 回答 3

15

不得不挖掘以获得最终结果,但这里有一个例子

  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 资源的访问。根据您的需要进行调整。EC2 实例属性中的 IamInstanceProfile 引用将是{ "Ref" : "S3InstanceProfile" }

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

于 2013-07-23T21:43:01.520 回答
2

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

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

启动 Cloud Form 后,您将获得一个 Web 界面(检查已启动堆栈的输出部分中的 URL),该界面将能够描述您在特定区域中的所有资源。它将引导您了解您希望在每个类别(DNS、网络、计算...)中使用的资源。最后,您可以看到模板并将其复制,或将其保存在 S3 中。

但是,如果您希望手动执行此操作,则需要将AWS::IAM::InstanceProfile您创建的添加PropertiesAWS::EC2::InstanceasIamInstanceProfile

{
   "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

于 2013-01-05T09:36:00.687 回答
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
        }
    }
}
于 2013-01-07T15:55:15.507 回答