[AWS][安全] IAM策略最小颗粒度管理-Lab1

实验说明:

Task1:创建 IAM 用户使其访问特定存储桶
Task2:通过变量方式,动态 IAM 用户访问特定存储桶下的特定文件夹(prefix).

场景:

1.某个用户只能上传下载,不能更新存储桶中的文件。
2.希望 A 用户访问存储桶下的 A 文件夹,B 用户访问到 B 文件夹, 以此类推,如果单独给每一个用户创建策略就会比较麻烦。好消息是 IAM 策略支持变量 的方式,我们可以通过${aws:username} 变量来使用户只能访问到和用户名完全一致的存 储桶。

Task1: 创建 IAM 用户使其访问特定存储桶

在本实验中,我们将创建一个 IAM 用户,使该用户有权限向特定的 S3 存储桶中上 传和下载对象,但无权修改对象的属性(如: 修改对象存储类别,无法把对象公开化 等).
操作步骤:
首先创建一个存储桶,在 AWS 控制台界面,点击左上角”服务”,在所有服务列表 中选择”S3”。在 S3 界面,点击 “创建存储桶”

输入要创建的存储桶名字,如 awsdemo2018。请注意: S3 存储桶名字是全球唯一 的,这意味着如果某个 AWS 用户使用了这个存储桶名字,那么您将无法再使用。 如果您遇到 “存储桶名称已经存在” 的提示信息,请尝试输入另外一个存储桶名字. 输入完成之后,点击左下角”创建”按钮.

在 AWS 控制台界面,点击左上角”服务”,在所有服务列表中选择”IAM”, 之后在 IAM 界面点击用户,即可看到当前的用户。同时点击”添加用户”的按钮,我们先添 加一个用户.

在设置用户详细信息界面,输入要创建的用户名,如 demo2018,访问类型勾选”编程访 问” 和 “AWS 管理控制台访问”,其余按默认设置,然后点击”下一步:权限”

在设置权限界面,不进行任何操作,直接点击”下一步: 标签”,这也意味着该用户没有任 何权限访问 AWS 资源,稍后我们会通过自定义策略来授权。

在标签页面也直接点击”下一步: 审核”,在审核界面点击”创建用户”,在创建用户界面, 记录下登录地址,以及访问密钥 ID,私有访问密钥和密码(请妥善保管好密钥和密码).

回到 IAM 界面,点击”策略”----“创建策略”,这次我们创建一条使 IAM 用户能够访问到特 定 S3 存储桶的策略。

在创建策略界面,有两种编辑方式,一种是”可视化编辑器”,一种是 JSON。本次为实验 易于操作,您可以参考下面的存储桶策略。后续如果您对策略不是特别熟悉,但又想创建 自己的存储桶策略,可以通过可视化编辑器来创建。
本次请选择 “JSON”,删除 JSON 编辑窗口里的信息,然后拷贝下面的策略到 JSON 编辑 框,同时请将标红的存储桶名字修改成您之前创建的存储桶名.

{
“Version”: “2012-10-17”, “Statement”: [
{
“Sid”: " AllowSpecifyBucket ", “Effect”: “Allow”,
“Action”: [
“s3:PutObject”, “s3:GetObject”, “s3:ListBucket”
], “Resource”: [
“arn:aws-cn:s3:::awsdemo2018/*”, “arn:aws-cn:s3:::awsdemo2018”

]
}
]
}
点击右下角 “Review policy”,在接下来的界面中,给策略起一个名字,如 demo-s3- policy,描述留空即可,点击 “Create policy”.

策略创建完成之后,回到 IAM 用户界面,选择之前创建的用户,点击”添加权限”

在授予权限界面,点击”直接附加现有策略”,筛选策略处,搜索刚刚创建的策略名, 如”demo-s3-policy”,然后勾选该策略,点击”下一步: 审核 ”

点击”添加权限” 完成权限的添加.
现在我们已经创建了一个 IAM 用户,一个能够对特定 S3 存储桶进行上传文件和下载文件 的策略,接下来我们来验证一下策略是否正常工作。
我们需要安装 AWS CLI 命令行工具,AWS CLI 是用来管理 AWS 服务的统一工具,在 Windows/Mac/Linux 系统下均提供安装包。请点击下面的链接进行下载: https://aws.amazon.com/cn/cli/
下载完成之后,打开终端(Mac/Linux 打开终端 Terminal,Windows 用户打开 cmd),然后在 终端中输入 aws --version 查看一下 aws 是否正常安装,如果可以列出 aws 的版本,说明 aws 安装正常.

如果 Windows 用户安装之后提示找不到 aws 命令,请注销登录 Windows 系统,重新登录 之后再次尝试。
安装完成之后,我们需要配置一下 AWS CLI 命令行工具,请输入 aws configure 命令进行配 置,请在 Access Key 处输入创建 IAM 用户的时候保存出来的”访问密钥 ID”,然后按回车, 在 AWS Secret Access Key 处输入”私有访问密钥”,Region name 输入 cn-north-1 (北京区域) 或 cn-northwest-1(宁夏区域),Default output format 输入 json,示例如下:

➜ ~ aws configure
AWS Access Key ID [None]: AKIAO5ZXXXXXXXX
AWS Secret Access Key [None]: ZEXxAXQJ+XXXXXXXXXXXXXXXXXXX
Default region name [None]: cn-north-1
Default output format [None]: json
配置完成之后,我们就可以上传和下载文件,如将当前路径下的 abc.txt 文件上传到存储 桶 awsdemo2018 里:
➜ ~ aws s3 cp abc.txt s3://awsdemo2018/ upload: ./abc.txt to s3://awsdemo2018/abc.txt ➜~
上传完成之后,使用 aws s3 ls s3://awsdemo2018/ 查看一下
➜ ~ aws s3 ls s3://awsdemo2018/ 2018-11-30 14:35:05 0 abc.txt ➜~
如果想要将 abc.txt 下载到本地/tmp/路径,依然可以使用 cp 命令:

➜ ~ aws s3 cp s3://awsdemo2018/abc.txt /tmp/ download: s3://awsdemo2018/abc.txt to …/…/tmp/abc.txt ➜~
尝试上传文件到另外一个存储桶,发现权限不足,这是因为该 IAM 用户绑定的策略中, 只允许了访问特定的存储桶,因此没权限访问其他存储桶。
➜ ~ aws s3 cp /tmp/file20M s3://xlaws/
upload failed: …/…/tmp/file20M to s3://xlaws/file20M An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied
➜~
使用该 IAM 用户登录 demo2018 到 IAM Console: http://console.amazonaws.cn/console ,然 后点击”服务”—“S3”,我们会发现 IAM Console 上无法列出我们要访问的存储桶,这是因 为之前在创建策略的时候,没有赋予用户 s3: ListAllMyBuckets 权限.

我们使用管理员用户登录到 IAM Console,修改一下 IAM 用户 demo2018 的策略 demo-s3- policy,在策略中添加 s3:ListAllMyBuckets

{
“Version”: “2012-10-17”, “Statement”: [
{
“Sid”: “AllowSpecifyBucket”, “Effect”: “Allow”,
“Action”: [
“s3:PutObject”, “s3:GetObject”, “s3:ListBucket”
],
“Resource”: [
“arn:aws-cn:s3:::awsdemo2018/*”,
“arn:aws-cn:s3:::awsdemo2018” ]
},

{
“Sid”: “AllowListAllBuckets”, “Effect”: “Allow”,
“Action”: “s3:ListAllMyBuckets”, “Resource”: “*”
}
]
}

保存策略之后,在 AWS Console 中注销当前管理员用户,再使用原来创建的 demo2018 用 户登录,登录之后再次访问 S3 Console,我们就能看到列出所有的存储桶,但当前还是只 能对 awsdemo2018 这个特定存储桶进行操作,其他存储桶虽然能看到,但无法访问里面 的内容。 进入 awsdemo2018 这个存储桶(本实验初您创建的存储桶),然后在先前创建的 一个文件上点击右键—公开,将该文件公开化,此时您会发现公开化失败。

Task2:通过变量方式,动态 IAM 用户访问特定存储桶下的特定文件夹(prefix).

在某些特定场景下,我们希望 A 用户访问存储桶下的 A 文件夹,B 用户访问到 B 文件夹, 以此类推,如果单独给每一个用户创建策略就会比较麻烦。好消息是 IAM 策略支持变量 的方式,我们可以通过 a w s : u s e r n a m e 变 量 来 使 用 户 只 能 访 问 到 和 用 户 名 完 全 一 致 的 存 储 桶 。 下 面 我 们 来 验 证 一 下 : 修 改 先 前 创 建 的 I A M 策 略 d e m o − s 3 − p o l i c y 如 下 , 需 要 注 意 的 是 我 们 修 改 了 R e s o u r c e , 指 定 的 资 源 为 存 储 桶 下 的 {aws:username} 变量来使用户只能访问到和用户名完全一致的存 储桶。下面我们来验证一下: 修改先前创建的 IAM 策略 demo-s3-policy 如下,需要注意的是我们修改了 Resource,指定 的资源为存储桶下的 aws:username使访:IAMdemos3policyResource{aws:username}文件夹。

{
“Version”: “2012-10-17”, “Statement”: [
{
“Sid”: “AllowSpecifyBucket”, “Effect”: “Allow”,
“Action”: [
“s3:PutObject”,

“s3:GetObject”,
“s3:ListBucket” ],
“Resource”: [ “arn:aws-cn:s3:::awsdemo2018/${aws:username}/*”,
“arn:aws-cn:s3:::awsdemo2018” ]
}, {
} ]
}

然后我们在 IAM 用户界面,创建一个 demo2019 的用户,也分配同样的这条策略。 之后 分别使用 demo2018 和 demo2019 用户上传一个文件到 s3,我们会发现 demo2018 用户只 能上传对象到 demo2018 文件夹,demo2019 用户只能上传对象到 demo2019 文件夹:

➜ ~ aws s3 cp hello.mp3 s3://awsdemo2018/demo2018/
upload: ./hello.mp3 to s3://awsdemo2018/demo2018/hello.mp3
➜ ~ aws s3 cp hello.mp3 s3://awsdemo2018/demo2019/
upload failed: ./hello.mp3 to s3://awsdemo2018/demo2019/hello.mp3 An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
➜~

结论:

从这个实验中,我们创建了一个存储桶策略,并只允许用户能对特定存储桶里实现上传和 下载对象,该策略无法修改对象的权限,也无法删除存储桶中对象。后来我们通过修改 IAM 用户的策略,实现了在 AWS 网页控制台允许用户列出其他存储桶,但依然无法操作 其它存储桶。 我们可以在自己的生产环境中,根据自己的需要创建适合自己的策略,如只允许用户进行 上传,只允许用户在某个特定的 IP 地址下访问 AWS S3,或者只能在某一个 VPC 内访问 S3。除了上传下载权限之外,IAM 对 S3 的策略还有一些更细粒度的管理,您可以在创建 策略的时候,通过”可视化编辑器”来查看策略详情,创建属于自己的明细策略.

本实验只是以访问 S3 存储桶为示例,您也可以创建其它服务的策略,如只允许 IAM 用户 对某一个 EC2 实例实现开关机操作,基于 Tag 来进行权限控制等。

详细关于IAM视频教程参考:https://edu.51cto.com/center/course/lesson/index?id=533838

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栗子哥BroLiz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值