[AWS][安全][S3] IAM 角色授权 EC2 访问 S3

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[AWS][安全][S3] IAM 角色授权 EC2 访问 S3相关的知识,希望对你有一定的参考价值。

实验说明:

在先前的中,我们讲到使用 AWS CLI 对 S3 中的对象进行操作,在配置 AWS CLI 的 时候,我们创建了 IAM Access Key 和 Secret Key,这种 Key 属于 Long Term Key,也就意味 着如果您不 rotate Key,那么 key 将长期有效,如果 Key 不慎丢失,就需要在 AWS IAM 界 面删除这个 key 或者停用 key。当我们将服务部署在 AWS EC2 的时候,还有另外一个可选 方案,即使用 EC2 Role(角色)的方式,使 EC2 具有访问 AWS 资源的权限,这样就不需要在 EC2 实例上或我们的应用代码中指定 IAM Key,可进一步加强服务的安全性。

实验概要:

本次实验中,我们将对 EC2 绑定一个 IAM 角色,在不配置 EC2 Access Key 和 Secret Key 的 情况下,使 EC2 具有通过 AWS CLI 操作 S3 存储桶的能力。

实验步骤:

打开 IAM 界面,然后点击”角色”----“创建角色”
技术图片

选择受信任的实体类型为”AWS 产品”---EC2,
技术图片
在 Attach 权限策略处,搜索 AmazonS3FullAccess 策略,然后勾选这条策略,点击”下一步: 标签”
技术图片
添加标签界面可直接点击”下一步: 审核”,角色名称可以随便写,比如 EC2AccessS3,然后 点击 “创建角色”.
技术图片

之后我们创建一个实例,AMI 选择 Amazon Linux2,实例类型选择 t2.micro,在配置实例详 细信息界面,IAM 角色选择刚刚创建的角色 EC2AccessS3,然后一直到完成。

技术图片

备注: 如果账号内有现有的实例,也可以在实例上选择”操作”---“实例设置”----“附加/替换 IAM 角色”.

实例启动之后,使用 ssh 客户端连接到实例上(Windows 可使用 putty,Linux 或 Mac 使用 系统自带终端),如:ssh -i Key.pem ec2-user@ip
技术图片

之后配置一下 AWS CLI 连到 AWS 的默认区域,
如连到北京区域: export AWS_DEFAULT_REGION=cn-north-1
连到宁夏区域使用:export AWS_DEFAULT_REGION=cn-northwest-1
然后执行 aws s3 ls 命令,就可以看到 EC2 实例能够列出所有的存储桶:

技术图片

您也可以参考”实验一”使用 aws s3 cp 命令上传或下载 S3 文件.
在当前实验中,我们并未在 EC2 上配置 IAM 用户的访问密钥,EC2 之所以能访问到 S3, 是因为 EC2 实例绑定了 Role,Role 赋予了 S3FullAccess 的权限,因而 AWS CLI 可直接操作 S3 对象。如果您想进一步看到 Role 产生的临时密钥,您可以在 EC2 上执行(其中 EC2AccessS3 为 Role 的名字):
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2AccessS3 在返回的结果中,我们可以看到 Role 产生的临时的 Access Key, Secret Key 以及 Token:

技术图片

Role 除了和 EC2 结合使用之外,还结合 Lambda,API Gateway, RDS, Redshift 等服务一起使 用,使这些服务有访问其他服务的权限与能力。

详细视频教程:https://edu.51cto.com/center/course/lesson/index?id=517262

以上是关于[AWS][安全][S3] IAM 角色授权 EC2 访问 S3的主要内容,如果未能解决你的问题,请参考以下文章

AWS IAM 执行角色无权在 EC2 上为特定 VPC 调用 CreateNetworkInterface

Spark + S3 + IAM 角色

具有EC2实例角色的规范用户标识

如何使用 IAM 角色通过 aws sdk (java) 从 ECS 容器调用 s3 存储桶

如何设置AWS CodeDeploy和EC2 CodeDeploy安全环境

S3 AWS 的 IAM 角色和密钥设置使用 boto3 访问两个不同的账户存储桶