【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

使用 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:00957

评论

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

ARTS 打卡第 5 周

atom

多云环境下实时计算场景实践经验

WuKongCoder

内存都去哪了

AiDaddy

nmon 内存分配 free meminfo 内存定位

五个月,秒杀,38个大的篇章,126+篇文章、视频、小册,150+源码分支,完美收官!

冰河

高可用 高并发 高性能 秒杀系统 高可扩展

高性能网络 SIG 月度动态:推动 virtio 支持动态中断调节及更灵活的分流机制

OpenAnolis小助手

Linux 内核 龙蜥社区 virtio 高性能网络sig

DApp智能合约链上盲盒游戏代币质押项目挖矿系统开发

l8l259l3365

Pyth

C++中的 throw详解

智趣匠

Parallels Desktop 19 for Mac(PD19虚拟机)无需关闭SIPv19.0.0一键激活版

mac

pd虚拟机 苹果mac Windows软件 Parallels Desktop 19

怎么解决在数据采集时使用http代理ip效率不高的问题?

巨量HTTP

http代理

20个最佳实践提升Terraform工作流程|Part 1

SEAL安全

基础设施 IaC terrafrom 企业号9月PK榜

Nop平台与SpringCloud的功能对比

canonical

Spring Cloud 低代码 spring-boot 可逆计算 Nop平台

架构误区系列17:“总线”模式

agnostic

微服务 企业服务总线

蓝易云:Linux系统查看log日志命令详解!

百度搜索:蓝易云

云计算 Linux log 云服务器, 运维‘

MAC地址修改软件推荐 WiFiSpoof免激活中文版

mac大玩家j

Mac软件 网络管理软件

中秋时节赏明月,五子棋戏月饼趣 — Flutter中秋限定版五子棋

编程的平行世界

flutter 游戏开发

本地缓存无冕之王Caffeine Cache

Java随想录

Java 缓存

CodeArts Check代码检查服务用户声音反馈集锦(2)

华为云PaaS服务小智

云计算 软件开发 代码规范 华为云 代码检查

我在超化研究上的日志采集架构设计

软件工程师-罗小东

ARTS 打卡第 5 周

AI帅辉

ARTS 打卡计划 学习分享

Python 注释:解释和优化代码可读性

小万哥

Python 程序员 软件 后端 开发

蓝易云:linux系统 Apache服务配置教程。

百度搜索:蓝易云

Apache 云计算 Linux 运维 云服务器

简单好用的屏幕分辨率修改工具:SwitchResX 最新激活版

胖墩儿不胖y

Mac软件 屏幕分辨率调整 屏幕分辨率工具

高并发系统设计之缓存

Java随想录

Java nginx 缓存

程序员会使用的十个基础算法

小魏写代码

Bridge 2024 (br2024) for Mac v14.0.0.102 中文破解激活版

mac

windows 苹果mac Bridge 2024

文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题

福大大架构师每日一题

福大大架构师每日一题

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