AWS 使用CLI将IAM角色附加到现有的EC2实例中
来源:互联网 发布:蓝色大门 知乎 编辑:程序博客网 时间:2024/05/04 04:13
简介
AWS IAM(身份和访问管理服务)中的角色使您的应用程序在Amazon EC2上能够使用临时的安全凭证自动实现AWS服务的创建,发布和内容修改。使用这样的临时凭证是IAM的最佳做法,因为您不再需要在实例上维护一个或多个长期密钥。对EC2使用IAM角色也无需再使用必须手动或以编程方式管理的长期AWS访问密钥。
例如,应用程序必须通过 AWS 证书签署 API 请求。因此,如果您是应用程序开发人员,您需要一个策略来为 EC2 实例上运行的应用程序管理证书。您可以安全地将您的 AWS 证书分配至实例,从而允许这些实例上运行的应用程序使用您的证书签署请求,并保护其免受其他用户的影响。但是,要将凭证安全地分配至每项实例有一定难度,尤其是 AWS 以您的名义创建的实例,例如竞价型实例或 Auto Scaling 组中的实例。当您更换 AWS 证书时,您还必须能够更新每项实例上的证书。 IAM 角色能够委托授权以发出 API 请求,而不用创建并分配您的 AWS 证书。详细解决方案,请查阅文档适用于 Amazon EC2 的 IAM 角色。
最初,IAM角色只能在实例创建设置时添加,这导致了过去创建的实例和忘记添加IAM角色的实例无法使用IAM角色操作实例,从而被迫重新部署实例及应用程序。从现在开始,您可以通过将IAM角色附加到现有的尚未被角色附加的EC2实例,来使用AWS提供的临时安全证书操作EC2实例,您还可以随时替换附加到现有EC2实例的IAM角色。
解决方案
创建IAM角色
将IAM角色附加给现有EC2实例(最初没有IAM角色附加)
更换附加到EC2的IAM角色
本文假设您已设置AWS命令行界面(CLI),具有创建IAM角色的权限,并具有调用EC2 API的权限。
操作步骤中所有出现的占位符{Some Words}
,都应该替换为实际资源名称。
操作步骤
开始操作之前,请确保您的CLI版本大于等于1.11.48。如果您对当前自己的CLI版本有疑问,可以在命令行中执行以下命令进行版本查询:
$aws --version
一、创建IAM角色
在从AWS CLI创建IAM角色之前,必须先创建角色信任策略。信任策略允许AWS服务(如EC2)代表您的应用程序承担IAM角色。
要创建信任策略,请复制以下策略,并将其粘贴到使用名称{YourNewRole}-Trust-Policy.json保存的文本文件中,注意后缀名为.json:
- AWS中国区
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com.cn" }, "Action": "sts:AssumeRole" } ]}
- AWS全球
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}
现在您已成功创建信任策略,接下来创建IAM角色{YourNewRole}:
- 基于信任策略创建IAM角色{ourNewRole},打开命令行并执行以下命令:
$aws iam create-role --role-name {YourNewRole} --assume-role–policy-document file://{FilePath}/{YourNewRole}-Trust-Policy.json
- 给予此IAM角色访问帐户中资源的权限。在本示例中,我假设您的应用程序需要只读访问您帐户中的所有Amazon S3存储桶和存储桶中的对象。因此,您将使用AmazonS3ReadOnlyAccess AWS托管策略。有关AWS托管策略的详细信息,请参阅使用托管策略。在命令行中执行以下命令:
$aws iam attach-role-policy --role-name {YourNewRole} --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
- 创建IAM实例配置文件{YourNewRole-Instance-Profile}。实例配置文件允许EC2将IAM角色{YourNewRole}传递给EC2实例。要了解更多信息,请参阅使用实例配置文件。在命令行中执行以下命令:
$aws iam create-instance-profile --instance-profile-name {YourNewRole-Instance-Profile}$aws iam add-role-to-instance-profile --role-name {YourNewRole} --instance-profile-name {YourNewRole-Instance-Profile}
至此,您已成功创建IAM角色{YourNewRole}。
二、将IAM角色附加给现有EC2实例(最初没有IAM角色附加)
您现在可以将IAM角色{YourNewRole}附加到EC2实例{YourInstanceId}:
- 获取现有EC2实例详细信息(记录InstanceId)。在命令行中执行以下命令:
$aws ec2 describe-instances
- 将新创建的IAM角色{YourNewRole}的实例配置文件{YourNewRole-Instance-Profile} 附加到您的EC2实例{YourInstanceId}。在命令行中执行以下命令:
$aws ec2 associate-iam-instance-profile --instance-id {YourInstanceId} --iam-instance-profile Name={YourNewRole-Instance-Profile}
- 验证IAM角色是否已附加到实例。在命令行中执行以下命令:
$aws ec2 describe-iam-instance-profile-associations
打开AWS EC2控制台,查看实例的描述信息:
进入EC2实例内,查看实例IAM角色具体信息:
$curl http://169.254.169.254/latest/meta-data/iam/security-credentials/{YourNewRole}
至此,您可以使用IAM角色访问AWS资源来更新应用程序,并把实例中的长期密钥删除。
三、更换附加到EC2的IAM角色
如果角色的使用需求发生改变,并且您希望通过修改IAM角色来授予EC2实例权限,则可以更换换附加到EC2的IAM角色。但是,这也将修改使用此IAM角色的其他EC2实例的权限。
将当前附加的IAM角色{YourNewRole}更换为另一个IAM角色,而不终止您的EC2实例:
- 获取现有EC2实例IAM附加信息(记录AssociationId)。在命令行中执行以下命令:
$aws ec2 describe-iam-instance-profile-associations
- 更换IAM角色。在命令行中执行以下命令:
$aws ec2 replace-iam-instance-profile-association --association-id {YourCurrentAssociationId} --iam-instance-profile Name={YourReplacementRole-Instance-Profile}
根据AssociationId的值看出,IAM角色的更改已生效。打开AWS EC2控制台,查看实例的描述信息:
而在上述所有操作的过程中,均未影响EC2的运行状态。
更多信息
文中的操作步骤已于2017年2月17日验证通过,AWS CLI版本1.11.48,在AWS全球和AWS中国区均能正常使用。
New! Attach an AWS IAM Role to an Existing Amazon EC2 Instance by Using the AWS CLI
- AWS 使用CLI将IAM角色附加到现有的EC2实例中
- AWS中启动EC2实例时使用上传的Key Pair文件
- 使用免费的云服务 AWS EC2
- AWS中EC2实例的根设备卷-本地存储或EBS存储
- 使用AWS SDK for Java创建并启动EC2实例
- putty通过ssh登录aws的ec2实例
- AWS CLI 的安装和使用
- AWS CLI使用s3
- 使用Putty连接AWS的EC2(Linux系统)
- AWS 之 IAM 协助AWS 内的用户和用户权限
- 亚马逊AWS学习——IAM中“AmazonEC2FullAccess”与“ AmazonEC2ReadOnlyAccess”两种访问策略的区别
- AWS-EC2创建centOS6.7实例
- 从0开始,创建 AWS EC2 实例
- 如何才能将企业现有的组织关系集成到jbpm中?
- 将myeclipse中现有的项目连接到svn
- 将cantk runtime嵌入到现有的APP中
- mac上传文件到aws ec2 instance
- 将日志文件从EC2实例自动备份到S3
- C# 对数据库操作的帮助类SQLHelper.cs
- json字符串转json对象或者数组
- 公钥私钥+数字证书原理 - 鹏 - 转载
- 使用UIBezierPath和CAShapeLayer高效为UIView添加圆角
- 16.2 测试之unitils
- AWS 使用CLI将IAM角色附加到现有的EC2实例中
- JDK安装过程中出现“javac不是内部或外部命令”问题的解决
- UII自动化之Appium
- 索引长度与区分度
- 【笔记】人力资源机器
- JS Date格式化日期问题,时间显示区别
- bzoj 1965: [Ahoi2005]SHUFFLE 洗牌 (快速幂)
- 关于js中的事件冒泡和事件捕获问题
- Java冒泡排序法