09-配置跨账户S3存储桶的访问(Cross Account S3 Bucket Configuration)

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

【 Domain 1的组织复杂性设计(Design for Organizational Complexity)】——-配置跨账户S3存储桶的访问(Cross Account S3 Bucket Configuration)

Hello大家好,欢迎回来,我们今天的课程内容是跨账户S3存储桶的访问。

当前,在很多组织中,应用跨账户S3存储桶访问的架构组成是非常普遍的,同样,对于AWS SAP认证考试,掌握跨账户存储桶的访问知识点也是非常重要。

我们开始今天的课程。

使用存储桶策略配置跨账户S3存储桶访问

将S3存储桶的访问权限授予属于不同aws帐户的委托人,在很多组织的AWS架构中非常常见,为了能够让大家更容易的掌握这方面内容,我将要做个实操演示,画了个简单的架构图,后面的演示都依照此架构来进行。

我们看下图,假设当前组织有两个AWS账户,左边的ACCOUNT A 中包括组织所有的S3存储桶,右边的ACCOUNT B中运行着组织所有的EC2资源,假设ACCOUNT B中的EC2需要定期备份重要数据到ACCOUNT A中的存储桶,能不能实现呢?我们知道,创建的S3存储桶默认情况下是私有的,任何存储桶拥有者之外的账户都不能访问存储桶,在这种情况下,就需要使用存储桶策略来达成 跨账户进行S3存储桶访问,也就是说ACCOUNT A中的创建存储桶策略,允许ACCOUNT B访问存储桶。

在接下来的内容,我们来演示下如何实现。

配置S3存储桶策略

首先,来到ACCOUNT A的S3的管理控制台,进入iloveawscn这个存储桶,然后权限-进入存储桶策略,可以看到目前这个存储桶没有配置存储桶策略。

前面讲过,如果要让ACCOUNT B能够跨账户访问S3存储桶,是需要配置存储桶策略的,我已经准备好了一个简单的存储桶策略,一下就是存储桶策略的内容,大家可以直接使用它进行测试。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "cross",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::256454142732:root"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::iloveawscn",
                "arn:aws:s3:::iloveawscn/*"
            ]
        }
    ]
}

让我现在把策略粘贴过来,然后看下策略的具体内容:

Effect 是允许,Principal资源委托人,要配置为ACCOUNT B也就是EC2所在账户的arn。


我们切换到ACCOUNT B浏览器,复制一下账户id,256454142732,将它复制到存储桶策略的Principal。


Action为S3的所有动作。然后看Resource,要将此存储桶的arn将此部分替换。我们已经替换好了,为了更清楚我在演示下,替换完成后保存,这样我们的存储桶策略已经生效了。

这里需要在说明一点,大家并不需要自己从头开始写一个存储桶策略,AWS提供了策略生成器帮助我们生成策略,在aws官方文档中您也会找到很多存储桶策略的示例,我经常采用的方法是当需要写一个策略的时候使用百度或者谷歌搜索引擎通过搜索关键字,找到策略示例在aws官方文档的位置,然后修改后使用策略,个人觉得这种方式是最方便的。当然要熟练应用策略就需要您对策略的组成内容有所掌握。

好了,存储桶策略我们已经保存了,我们继续。

准备工作:将ACCOUNT A和ACCOUNT B凭证配置到CLI的credentials配置文件

然后切换到ACCOUNT B的浏览器,看下我提前做好的准备工作。

进入到IAM-用户,我已经创建好了一个名为ACCOUNT B的用户,并给这个用户分配了管理员访问权限,同时为ACCOUNT B用户生成了访问密钥。

另外我已经将ACCOUNT A和ACCOUNT B的访问密钥全部配置到了CLI的credentials配置文件中,也就是说,我现在可以使用CLI可分别指定使用ACCOUNTA或者B的密钥凭证来执行CLI命令,来看一下:

进入到CLI,我们看下credentials配置文件的内容,我配置了两个账户,上面的是ACCOUNT A账户和它对应的访问密钥,下面的是ACCOUNT B账户和它对应的访问密钥,所以目前cli的配置中包括了ACCOUNT A和B两个账户的密钥信息。

好的,以上介绍了目前提前配置的内容,那接下来我们继续演示。

使用ACCOUNT A和B的凭证测试访问S3存储桶

首先,在 CLI中,我们先用ACCOUNT A的密钥,使用cli命令列出iloveawscn这个存储桶里面的对象。使用—profile参数指定使用配置文件中的accounta凭证。

可以看到我们已经成功列出了存储桶中的对象,存储桶中有一个test.txt文件。

下面我们同样进行上述操作,但是使用ACCOUNT B的密钥凭证,看看能不能访问ACCOUNT A的存储桶的对象。也就是说测试ACCOUNT B实现跨账户访问ACCOUNT A中的S3存储桶。将—profile 后面修改为ACCOUNT B,看下结果,好的,同样允许访问并列出了存储桶中的对象。说明我们前面配置的存储桶策略已经生效了

接下来我们继续做测试,在我们cli的当前目录有个accountb_file文件,这是我们已经建立好的一个文本文件,我们cat一下文件内容就一行。

现在我们要将这个文件使用ACCOUNT B的凭证,将其拷贝到ACCOUNT A的iloveawscn存储桶中,这样的话这个文件是属于ACCOUNT B的。

来使用CLI操作下:

aws s3 cp accountb_file s3://iloveawscn/ —profile accountb

搞定,可以看到accountb_file这个文件已经成功从我本地拷贝至ACCOUNT A的存储桶中

我们到ACCOUNT A 的s3控制台确认下,进入存储桶然后刷新下,我们可以看到2个文件,test.txt是开始本课前就存在的文件,另一个accountb_file是刚才我们使用的ACCOUNT B的凭证上传的文件,文件已经成功上传至存储桶。

到这里,我们通过上面的演示,就已经成功实现了跨账户S3存储桶的访问。

我是根用户,为什么存储桶中有的文件我还是没权限操作?

接下来我想继续做个测试,切换到CLI,我想使用ACCOUNT A的凭证 ,将存储桶中的test.txt 拷贝到我本地,注意这个test.txt文件是之前课程通过ACCOUNT A 控制台上传的文件,我们现在来操作下:

aws s3 cp s3://iloveawscn/test.txt . —profile accounta

好的,test.txt文件已经成功拷贝到我本地,我们看下文件已存在。

现在让我同样使用ACCOUNT A凭证拷贝accountb_file这个文件到我本地,我改一下命令,然后执行:

aws s3 cp s3://iloveawscn/accountb_file . —profile accounta

提示拷贝发生错误,拒绝访问,这是为什么呢?

我们切换到accounta控制台页面,然后进入存储桶后找到accountb_file这个文件,在右侧面板属性可以看到很多属性是拒绝访问的。而我现在登陆到控制台的用户,是ACCOUNT A的根用户,在ACCOUNT A中拥有最大的管理员权限,但是同样还是提示拒绝访问这个文件。我们尝试下载这个文件,也无法下载。

这是很多学友比较困惑的地方,大家可以思考下原因,我们将在下节课讲解这部分内容。

好了,我们今天介绍了跨账户s3存储桶访问内容,希望大家能够通过今天的一系列的实操测试对这部分知识点有所掌握。

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

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

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

0 responses on "09-配置跨账户S3存储桶的访问(Cross Account S3 Bucket Configuration)"

Leave a Message

error: Content is protected !!