10-S3标准 ACL(Canned ACL)

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

【 Domain 1的组织复杂性设计(Design for Organizational Complexity)】——-S3标准 ACL(Canned ACL)

Hello大家好,欢迎回来,我们今天的课程内容是S3的标准ACL,对于跨账户的S3的存储桶访问,掌握标准ACL知识点是非常重要的。

我们开始今天的课程。

S3 ACL基础知识

首先,我们要先介绍一下S3 ACL的基础知识。

ACL也就是访问控制列表 , 是基于资源的访问策略选项之一 ,可用于管理对存储桶和对象的访问。使用 ACL 可向其他 AWS 账户授予基本的读/写权限。

每个存储桶和对象都有一个作为子资源而附加的 ACL,当S3存储桶中的对象收到访问请求时,AWS S3会检查与存储桶对象关联的ACL,以决定是允许还是拒绝访问请求。

另外还有一点大家需要牢记,当我们创建一个存储桶或者一个存储桶对象时,AWS S3默认会给资源分配一个资源拥有者完全控制权限。

为了让大家更容易理解这些内容,我们来做个实操演示。

get-object-acl命令

在AWS的CLI命令文档中,有一个命令为get-object-acl,这个命令的功能是列出存储桶中的对象的ACL内容。

我们上个ppt中已经讲过,每个存储桶和对象都有一个作为子资源而附加的 ACL,那如何知道附加的ACL的具体内容是什么呢,这就是get-object-acl这个命令的作用。

我们现在切换到终端,看下这个命令的使用方式。

默认情况下,S3资源所有者拥有完全控制权限

在切换终端前,我们先进入account a的s3管理控制台,我们之前在account a的iloveawscn存储桶,上传过一个test.txt文件,我们现在就使用get-object-acl命令,获取一下这个对象的ACL。

现在切换到终端,让我们执行命令:

aws s3api get-object-acl --bucket iloveawscn --key test.txt --profile accounta

我们看下get-object-acl命令的返回信息,displayname: xiaoliange,就是我的account A,permission是完全控制权限。

正如我们前面介绍过的内容,当我们创建一个存储桶或者一个存储桶对象时,AWS S3默认会给资源分配一个资源拥有者完全控制权限,而这个test.txt的资源拥有者就是这个account a账户,只有account a对于这个文件有完全控制权限。

我们继续,大家是否还记得上节课我们使用了account b的访问密钥上传了一个accountb_file文件到account a的存储桶?我们来到s3控制台看看一下,就是这个文件。

我们现在使用cli看下这个文件的acl内容是什么。

切换到终端,然后我修改下命令,key这里改成accountb_file 。–profile 指定account a的凭证,然后执行:

aws s3api get-object-acl --bucket iloveawscn --key accountb_file --profile accounta

我们看下返回结果,返回信息显示访问被拒绝,因为什么呢,因为这个文件的拥有者是account b,我们刚才使用了accounta的凭证执行命令,所以会提示访问被拒绝,因为没有权限。

所以,我们要使用accountb_file这个文件的拥有者,也就是accountb的凭证,来运行这个命令,获取acl。我们来执行一下,将命令的profile 使用凭证改为account b,运行下然后看下命令的返回结果:

aws s3api get-object-acl --bucket iloveawscn --key accountb_file --profile accountb

displayname:22749752,这是我的account b账户,可以看到这个文件的拥有者是account b,只有它拥有这个文件的完全访问权限。所以accounta对于这个文件没有任何访问权限,这也是为什么account a无法访问这个文件的原因。

在使用跨账户s3存储桶访问时,很多用户都遇到了这个问题而对于原因很困惑,希望通过以上的内容和实际的演示,能够帮助大家掌握这些知识点。

好,我们继续后面的课程内容。

S3标准ACL

下面的内容我们来介绍下S3的标准ACL。

Amazon S3 支持一系列预定义的授权,称为标准 ACL。每个标准 ACL 都有一组预定义的被授权者和许可。

我们前面介绍过,每一个存储桶对象都有一个与之关联的ACL,当我们上传对象时如不特别指定,对象会使用默认的ACL。

然而,当我们上传一个对象到S3存储桶时,也可以指定一个标准ACL,当 Amazon S3 收到包含标准 ACL 的请求时,它会向资源的 ACL 添加预定义的授权。可以使用 x-amz-acl 请求标头在请求中指定标准的 ACL。

我们看下ppt表格中有很多标准ACL,不同的标准ACL对应着不同的相关联的预定义授权。第一个是私有,它是默认的ACL,添加到ACL的权限为所有者将获得完全控制,其他人没有访问权限,想想我们上面测试的例子,就是使用了默认ACL的情况,accountb_flie文件的拥有者是account b,account a是没有访问权限的。

表格中另外一个比较常用的标准ACL是bucket-owner-full-control,它的作用是 对象所有者和存储桶拥有者均可获得对对象的完全控制权限。意思就是当跨账户S3访问时,当你从一个账户上传对象至另一个账户的存储桶时,如果你希望您的上传账户也就是对象的拥有者和另一个账户的存储桶拥有者都对这个对象有完全访问权限时,就可以在上传时指定这个bucket-owner-full-control标准ACL。

对应咱们前面做过的实操演示,accountb_file这个文件的拥有者是accountb ,account a是iloveawscn这个存储桶的拥有者,当我们使用account a的凭证访问accountb_file这个文件时,因为这个文件的acl只允许对象拥有者accountb完全控制,所以account a是无法访问的。如果想让这个文件的拥有者和存储桶的拥有者同时都有完全访问权限,就可以在上传时通过x-amz-acl在请求中指定使用bucket-owner-full-control这个标准ACL

这很容易实现,我们现在来测试下,切换到终端。

我们新创建了一个文件名为acl.txt的文本文件做测试,接下来我们要使用accountb的凭证,上传这个文件到accounta的iloveawscn存储桶,同时指定标准acl为bucket-owner-full-control ,我们现在来操作下:

aws s3 cp acl.txt s3://iloveawscn/ --acl bucket-owner-full-control --profile accountb

好,现在acl.txt使用accountb的凭证,指定了bucket-owner-full-control 的acl,已经成功上传到了accounta 的iloveawscn存储桶。

我们现在用之前介绍的get-object-acl命令,来获取下这个文件的acl,我们找一下之前的命令修改下,–key后的对象名称修改为acl.txt,然后执行:

aws s3api get-object-acl --bucket iloveawscn --key acl.txt --profile accountb

我们看下命令返回结果:

可以看到,对象的拥有者account b以及存储桶的拥有者account a,都是完全控制权限,这就是在执行上传时–acl的标准acl bucket-owner-full-control的作用。

理解这部分内容无论是对于实际应用还是认证考试都是非常重要的,我在总结一下,当你将一个对象从一个账户上传至其他aws账户的存储桶时,如果您希望上传后对象拥有者和存储桶拥有者对这个对象都有完全控制权限的话,就需要在上传时通过—acl 指定 bucket-owner-full-control的标准acl。

大家可以亲自做一下上面的测试,测试的环境准备也不是很困难,自己动手进行测试这对于知识的掌握非常有帮助。

好,以上就是我们今天的视频课程内容。

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

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

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

0 responses on "10-S3标准 ACL(Canned ACL)"

Leave a Message

error: Content is protected !!