速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

  • 2019-11-18
  • 本文字数:5574 字

    阅读完需:约 18 分钟

使用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 控制面板,并选择左侧边栏的“实例”。



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



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



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



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



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


AWS 命令行操作步骤

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


$aws --version



如果您已经有 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



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


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



  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}



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


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



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



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


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



至此,您可以使用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



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


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


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



  1. 根据 AssociationId 的值看出,IAM 角色的更改已生效。打开 AWS 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 }



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



陈琳涛


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


本文转载自 AWS 技术博客。


原文链接:


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


2019-11-18 08:001106

评论

发布
暂无评论
发现更多内容

小红书“致歉滤镜景点”:种草社区的尺度在哪?

石头IT视角

数字货币交易所系统APP开发(源码搭建)

架构训练营模块一作业

Beyond Ryan

架构实战营

FastDFS环境搭建

飞鸟

fastdfs

数字货币交易所系统软件开发介绍(案例)

字节半天*3面/5天拿offer,全凭自身硬实力和这份Java面试笔记

Java 编程 程序员 架构 面试

优酷鸿蒙开发实践|优酷 Android 与HarmonyOS Hap 混合打包

阿里巴巴终端技术

android 鸿蒙 客户端开发 HarmonyOS 优酷

IP地址溯源 从源头遏制计算机恶意程序感染

郑州埃文科技

网络安全 ipv6 IP地址 木马病毒

Cloud Studio 邀您互动,好礼送不停 | CIF 活动邀请

CODING DevOps

自动化部署 Cloud Studio 开发标准化 可视化编辑 多人协同

数字货币交易所软件系统开发简介(搭建)

架构实战营-模块1-作业

无名

架构实战营

数字货币交易所系统软件开发介绍(源码)

百度智能云大数据全景架构图如何赋能企业数字化

百度开发者中心

大数据 案例分享 行业创新

《世界质量报告》重磅发布,人工智能与机器学习成软件质量保证测试焦点

21 张图 | 带你领略集合的 线程不安全

Java 架构 面试 线程 后端

架构实战营-模块一作业

随风King

「架构实战营」

存储大师班 | 浅谈数据保护之快照与备份

QingStor分布式存储

分布式存储 快照 备份

现成数字货币交易所源码系统开发

飞桨联邦学习框架PaddleFL新升级,实现纯两方安全计算协议

百度开发者中心

最佳实践 百度飞桨 版本升级

网易云信的音频共享技术 | 体验共享专题

网易云信

音频技术

百度人脸采集SDK通过CFCA权威安全测评

百度大脑

人工智能 人脸

分布式文件系统FastDFS实战

飞鸟

fastdfs 分布式文件系统

三级等保是不是icp?两者是一样吗?

行云管家

网络安全 等级保护 等保三级 三级等保

一看就懂|焱融 SaaS 数据服务平台上手指南

焱融科技

云计算 技术 分布式 高性能 文件存储

人生成长密码:高效能人士的7个习惯

dinstone

第 20 章 -《Linux 一学就会》- 条件测试语句和if流程控制语句的使用

学神来啦

Linux linux运维 linux云计算 linux一学就会

k8s集群安装经历

追风少年

k8s kubenetes

模块1

侠客行

架构实战营 「架构实战营」

研究表明到2025年多接入边缘云市场规模将稳步增长

云计算运维

数字货币交易所系统APP开发源码搭建

Golang fasthttp实践

FunTester

golang Fasthttp 接口测试 测试框架 FunTester

使用AWS控制台或命令行将AWS IAM角色附加到现有的Amazon EC2实例中_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章