使用 AWS 控制台或命令行将 AWS IAM 角色附加到现有的 Amazon EC2 实例中

阅读数:54 2019 年 11 月 18 日 08:00

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

简介

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 角色。

适用范围

文中的操作步骤已于 2017 年 2 月 23 日验证通过,其中 AWS CLI 版本 1.11.48,在 AWS 全球和 AWS 中国区均能正常使用。

解决方案

  1. 创建 IAM 角色

  2. 将 IAM 角色附加给现有 EC2 实例(最初没有 IAM 角色附加)

  3. 更换附加到 Amazon EC2 的 IAM 角色

  4. 移除附加到 Amazon EC2 的 IAM 角色

本文假设您具有创建 IAM 角色的权限,并具有调用 EC2 API 的权限。

AWS 命令行操作步骤中所有出现的占位符{Some Words},都应该替换为实际资源名称。

AWS 控制台操作步骤

  1. 打开 EC2 控制面板,并选择左侧边栏的“实例”。

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 选择您的实例,依次点击上方的操作 -> 实例设置 ->Attach/Replace IAM role

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 打开 IAM role 下拉菜单,选择您想要附加给当前 EC2 的 IAM 角色,No Role 代表不附加角色,选好后点击右侧的 Apply 按钮。选择并应用的过程实际上包含了:将 IAM 角色附加给现有 EC2 实例(最初没有 IAM 角色附加);更换附加到 Amazon EC2 的 IAM 角色;移除附加到 Amazon EC2 的 IAM 角色。

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 如果您选择了 No Rule(即移除 EC2 上的 IAM 角色),会显示如下页面:

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 如果您未作出有效的修改,会显示如下页面:

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 如果您的修改有效,会显示如下页面:

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

AWS 命令行操作步骤

开始操作之前,请确保您的 CLI 版本大于等于1.11.48。如果您对当前自己的 CLI 版本有疑问,可以在命令行中执行以下命令进行版本查询:

$aws --version

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

如果您已经有 pip 和支持的 Python 版本,则可以使用以下命令安装 AWS CLI:

# pip install --upgrade --user awscli

一、创建 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}:

  1. 基于信任策略创建 IAM 角色{ourNewRole},打开命令行并执行以下命令:

$aws iam create-role --role-name {YourNewRole} --assume-role–policy-document file://{FilePath}/{YourNewRole}-Trust-Policy.json

注意: file:// 不能省略,策略路径可以是当前相对路径也可以是全路径。

例如:

相对路径: file://TestRole-Trust-Policy.json

全路径:

Windows:file://C:/test/TestRole-Trust-Policy.json

Linux: file:///data/test/TestRole-Trust-Policy.json

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 给予此 IAM 角色访问帐户中资源的权限。在本示例中,我假设您的应用程序需要只读访问您帐户中的所有 Amazon S3 存储桶和存储桶中的对象。因此,您将使用 AmazonS3ReadOnlyAccess AWS 托管策略。有关 AWS 托管策略的详细信息,请参阅使用托管策略。在命令行中执行以下命令:

$aws iam attach-role-policy --role-name {YourNewRole} --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 创建 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}:

  1. 获取现有 EC2 实例详细信息(记录 InstanceId)。在命令行中执行以下命令:

$aws ec2 describe-instances

  1. 将新创建的 IAM 角色{YourNewRole}的实例配置文件{YourNewRole-Instance-Profile} 附加到您的 EC2 实例{YourInstanceId}。在命令行中执行以下命令:

$aws ec2 associate-iam-instance-profile --instance-id {YourInstanceId} --iam-instance-profile Name={YourNewRole-Instance-Profile}

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 验证 IAM 角色是否已附加到实例。在命令行中执行以下命令:

$aws ec2 describe-iam-instance-profile-associations

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 打开 AWS EC2 控制台,查看实例的描述信息:

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 进入 EC2 实例内,查看实例 IAM 角色具体信息:

$curl http://169.254.169.254/latest/meta-data/iam/security-credentials/{YourNewRole}

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

至此,您可以使用 IAM 角色访问 AWS 资源来更新应用程序,并把实例中的长期密钥删除。

三、更换附加到 Amazon EC2 的 IAM 角色

如果角色的使用需求发生改变,并且您希望通过修改 IAM 角色来授予 EC2 实例权限,则可以更换换附加到 EC2 的 IAM 角色。但是,这也将修改使用此 IAM 角色的其他 EC2 实例的权限。

可以采用调用 replace-iam-instance-profile-association 调用替换 IAM 角色命令, 将当前附加的 IAM 角色{YourNewRole}更换为另一个 IAM 角色{YourReplacementRole}(例如:EC2role2),而不终止您的 EC2 实例:

步骤:

  1. 创建新的 IAM 实例配置文件{YourReplacementRole-Instance-Profile}指向新的 IAM 角色{YourReplacementRole},例如 EC2Role。创建命令参考上节内容。

  2. 获取现有 EC2 实例 IAM 附加信息(记录 AssociationId)。在命令行中执行以下命令:

$aws ec2 describe-iam-instance-profile-associations

使用过滤条件和控制查询输出内容,获取指定 EC2 实例的

$aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-79dxxxx --query

'IamInstanceProfileAssociations[*].{InstanceId:InstanceId,AssociationId:AssociationId}' --output table

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 更换 IAM 角色。在命令行中执行以下命令:

$aws ec2 replace-iam-instance-profile-association --association-id {YourCurrentAssociationId}

--iam-instance-profile Name={YourReplacementRole-Instance-Profile}

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 根据 AssociationId 的值看出,IAM 角色的更改已生效。打开 AWS EC2 控制台,查看实例的描述信息:

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

四、移除附加到 Amazon EC2 的 IAM 角色

在实际使用过程中,您的 EC2 可能不再需要通过角色使用 AWS 资源。这时候您可以选择移除附加在 EC2 上的 IAM 角色。

可以采用调用 disassociate-iam-instance-profile 调用移除 IAM 角色命令:

步骤:

  1. 获取现有 EC2 实例 IAM 附加信息(记录 AssociationId)。获取 IAM 信息命令参考上一节所述

  2. 移除 IAM 角色。在命令行中执行以下命令:

$aws ec2 disassociate-iam-instance-profile --association-id {YourCurrentAssociationId }

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

  1. 根据第二次查询现有 EC2 实例 IAM 附加信息为空可以看出,当前实例的 IAM 角色已被移除。

而在上述所有操作的过程中,均未影响 EC2 的运行状态。

总结:

做为安全最佳实践,让我们现在就行动起来,将所有需要使用 AWS 资源的 Amazon EC2 上添加对应的角色。

参考

[1] New! Attach an AWS IAM Role to an Existing Amazon EC2 Instance by Using the AWS CLI

[2] AWS 命令行参考手册

[3] Demo 脚本下载

作者介绍:

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

王元恺

AWS 实习解决方案架构师,上海交通大学学生,有数年 C++ 程序开发以及一年 PHP 前后端开发经验,同时致力于 AWS 云服务在国内的应用和推广。熟悉网站架设与网络应用开发,对于 TCP/IP 及网络协议有自己的理解和实践经验。

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中

陈琳涛

AWS 解决方案架构师。拥有超过 15 年的 IT 行业以及软件开发领域的工作经验。2000 年投身互联网大潮,创办过自己的公司。长期从事网络相关研发和管理工作,热爱 DevOps 实践。随后,投身游戏行业,参与多个项目的研发,运维,上线工作。致力于使用云计算来帮助更多的创业者迈向成功。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/using-aws-console-adding-iam-role-to-ec2-instance/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布