08-S3存储桶策略(S3 Bucket Policies)

文 | 沉默恶魔(禁止转载,转载请先经过作者同意)
微信号:chenmoemo
关注公众号:AWS爱好者

【 Domain 1的组织复杂性设计(Design for Organizational Complexity)】——-S3存储桶策略(S3 Bucket Policies)

AWS解决方案架构师认证 Professional / AWS Certified Solutions Architect– Professional系列的课程的最终目的是帮助大家顺利通过新版考试。随着后续系列课程的持续深入,我们的目标是将所有新版考试涉及到的内容、考点逐步推出系列课程,帮助大家备考。此系列课程也同样适用于想了解和学习AWS的同学,请大家多多支持。

Hello大家好,欢迎回来,我们今天的课程内容是S3存储桶策略。

基于资源的策略和基于用户策略

Amazon S3 提供的访问策略选项大致可分为 基于资源的策略和用户策略两类。附加到资源 (如存储桶和对象) 的访问策略称为基于资源的策略。例如,存储桶策略和访问控制列表 (ACL) 就是基于资源的策略。您也可以将访问策略附加到您账户中的用户。这些策略称为用户策略。您可以选择使用基于资源的策略、用户策略或这些策略的某种组合来管理您的 Amazon S3 资源权限。

我们今天课程的内容是基于资源策略的存储桶策略,那什么情况下需要使用存储桶策略呢?

通常来讲,在使用AWS时,一个和权限、策略相关的服务是IAM,它被用于在AWS账户下分配用户、组、角色使用资源的权限,您可以使用IAM为用户分配访问资源权限,然而,用户策略是用来管理您账户中用户的权限的。对于其他 AWS 账户或其他账户中用户的跨账户权限,则必须使用存储桶策略,而且,当您想基于存储桶来规划访问策略时就需要使用存储桶策略,存储桶策略是直接附加到存储桶上的。

下面我将会做一个演示,帮助大家了解存储桶策略的作用。

很多案例都在使用S3

现在大家看到的是AWS官方SAP-C01考试指南,在我们前面的课程出现过,这个PDF文件实际上是存储在AWS 上的S3存储桶中,我们可以使用curl命令验证下。我们复制一下URL,打开console,来验证下

curl -I https://d1.awsstatic.com/training-and-certification/docs-sa-pro/AWS_Certified_Solutions_Architect_Professional-Exam_Guide_EN_1.2.pdf

看下返回的信息,server 是amazons3 ,也就是说,aws将考试指南pdf放到了s3存储桶中,提供给所有人进行访问,任何人通过这个url,都可以访问并下载考试指南PDF。

我们在演示一个网站的案例,就是这个网站,AWS官方提供的AWS月成本计算器,我在工作中经常会使用这个网站,做一些AWS资源月使用成本的估算。

月成本计算器网站也是运行在S3中,我们同样使用curl命令来验证一下:

curl -I https://calculator.s3.amazonaws.com/index.html

同样可以看到这个网站也是托管在amazon s3上。

当前很多组织都在使用S3来托管网站、网页应用以及音、视频文件等等,因为它配置起来非常的简单。

配置对象允许所有人访问

下面我将演示上传一个文本文件到S3存储桶,并提供给所有人访问。

来到S3控制台,我们开始创建一个S3存储桶,名称为iloveawscn,区域就是目前的亚太区域就可以,然后下一步,完成存储桶的创建。

创建完成后,可以看到存储桶的访问属性是“存储桶和对象不是公有的”,也就是说存储桶和对象没有任何公有访问权限。

我们现在进入存储桶,然后上传一个txt文件,上传一个test.txt文件,不做任何配置,直接上传。

上传完成后,我们选择test.txt文件,在右侧可以看到对象的url,可以使用这个url打开或者下载这个文件。
我们复制下这个url , https://iloveawscn.s3-ap-northeast-1.amazonaws.com/test.txt

然后进入到console,curl一下这个url,看看是什么结果。不出所料,结果显示是拒绝访问的。因为现在存储桶缺省配置是阻止全部公共访问权限,所以当我们通过curl命令访问对象时就会被拒绝。

那如果您的应用场景是和前面的考试指南文件PDF一样,需要提供给所有用户访问或下载这个文件,最简单的方法就是把这个txt文件设置为公开,但在将这个对象设置为公开前,要先将这个存储桶的阻止公共访问权限关闭。现在还操作下:

进入这个存储桶,选择权限,然后编辑,将组织全部/公共访问权限的复选框去掉,然后保存。

然后点击test.txt文件,将其设置为公开。

好的,现在test.txt文件就成功设置为公开了,我们现在测试下,同样使用curl命令,我们先复制下这个文件的url,然后回到console,执行,可以看到我们已经可以成功访问这个txt文件,并获取到了文件的内容,说明我们这个txt文件已经成功设置成了公开,提供给所有人访问和下载。

开放允许特定IP段的存储桶策略

然而,还有一些应用场景,比如我现在只希望在我单位的网络情况下访问到存储桶中的文件,除此之外的网络禁止访问,也就是说,只开放允许特定的IP段访问存储桶对象,不在指定的IP段都希望是禁止访问的。要达成这个需求,就需要使用存储桶策略对允许访问的的IP以及相关配置项进行配置。

那我们现在就来配置一下吧:

我们现在进入到存储桶策略配置项,进入这个存储桶,选择权限-存储桶策略,现在策略是空的,没有内容。在存储桶策略中,可以对这个特定的存储桶进行各类访问控制配置。

那么接下来我们就要配置一个基于ip地址条件的存储桶策略。我已将策略准备好,现在将策略直接复制粘贴到这里。

我们看下这个策略的内容,Principal是*,代表所有;action配置的是所有s3动作,resource部分我们将这个存储桶的arn复制到这里。然后是ipaddress,需要将允许访问这个存储桶的ip替换到这里,我快速查看下我目前的公网ip :114.248.231.140,然后替换掉策略中的ip。注意我这里现在配置了我目前公网地址,是一个单独的ip地址,ip地址后面是/32,当然也可以配置成网段。DENY对应notipaddress,也就是只允许这个ip访问这个S3存储桶。

下面就是策略的内容,大家可以复制修改后使用。

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Deny", "Principal": "*", "Action":["s3:*"] , "Resource": "arn:aws:s3:::examplebucket/*", "Condition" : { "NotIpAddress" : { "aws:SourceIp": "192.168.143.188/32" } } } ] }

目前存储桶策略就配置完了,策略已经生效,后面在当有向这个存储桶对象发出访问请求时, 存储桶策略将验证访问的ip是否为策略中配置的这个ip,如果是,将会允许对于这个s3存储桶的所有动作,如果不是这个ip,将拒绝访问这个存储桶。

我们测试下实际情况是不是这样的:

同样,复制下test.txt的url,进入到console,curl一下看返回结果,可以看到,可以成功返回文件内容,因为存储桶策略中目前配置的ip就是我现在的上网ip,所以我现在是可以访问test.txt的。

那接下来,我们将存储桶策略中的ip地址随便修改下,将它修改为和我现在的上网ip地址不同即可,然后,理论上当我在访问这个存储桶文件时就会由刚刚的允许访问变成禁止访问,这样才能说明刚加的限制ip访问的存储桶策略是生效的,那我们现在就测试下吧:

进入到我们创建的存储桶,然后选择存储桶策略,将里面的ip随便改一个,然后保存。

然后我们进入到console,再次执行下curl这个txt文件的url,发现已经是禁止访问了。说明我们的存储桶策略已经生效了,只有策略中指定的ip才可以访问存储桶中的对象。

好的,以上我们演示了一个存储桶策略的简单用例,希望能够通过这个简单的演示,能够让大家对于存储桶策略有个初步的认识,实际上,还有很多不同的存储桶策略,用来帮助我们达成的需求,我们之后的课程将进行讨论。

我们今天的课程就到这里,感谢大家的观看,我们下一课程再见。

希望此系列教程能为您通过 AWS解决方案架构师认证 Professional 认证考试带来帮助,如您有任何疑问,请联系我们:

-AWS爱好者网址:www.iloveaws.cn
-可以通过扫码加入【AWS爱好者】微信公众号,查看原创的AWS知识点相关文章
-加入【AWS爱好者】微信群,和其他同学一起备考,以及探讨交流AWS相关知识
-加入【AWS知识星球】持续学习。

0 responses on "08-S3存储桶策略(S3 Bucket Policies)"

Leave a Message

error: Content is protected !!