通过资源策略授权跨账户访问S3
最后更新于
最后更新于
有的时候,我们的服务资源分布在不同的AWS账号下,比如A公司的EMR 需要使用B公司的AWS S3资源。或者一个公司下有多个AWS账号,不同账号下的服务需要进行访问。如何进行跨账号授权访问资源,AWS 提供了两种方式,1:使用资源策略,2:使用 IAM 角色。本文将介绍使用资源策略授权方式,将B 账号下的S3 授予A 账号下的EMR 访问
在B账号下的S3 中,配置存储桶策略,授权A 账号可以完全访问权限
在A 账号中,创建一个访问B账号 S3 的策略
在现在EMR 角色中,附加上面创建的策略
1:在B账号的S3 存储桶上(假设存储桶名为:bucketname),配置存储桶策略,授权对A账号(假设AccountID:111111111)的访问权限
2:在A 账号中创建一个策略,允许访问B账号下的S3资源
3:将策略附加给EMR_EC2_DefaultRole
以上即完成了将B 账号下的S3 授予A 账号下的EMR 访问
使用资源策略授权一定是在被访问的资源上配置资源策略
资源策略有了以后,访问者使用这个资源和平时使用本账号下资源类似,该怎么创建策略,角色都是一样的
示例中是将策略附加给EMR_EC2_DefaultRole,这是因为我的EMR 使用的是默认的角色名,如果你在创建EMR 时使用了别的角色名,只是将策略附加到对应的角色上即可。之后在EMR 节点上就可以直接操作 B账号下的S3 ,比如使用aws s3 ls s3://bucketname
就可以验证是否配置正确。正常情况下是可以列出目录下文件,整个的原理就是策略定义了可以访问B账号的 S3,策略被附加到了角色,角色被附加在节点,也就使节点有了访问B账号对应S3的权限
如果S3资源所有区与EMR 所在区不在同一个region,那么可能会提示需要在先配置region,而我们的hive 程序在执行的时候,不会这么聪明的识别到,可能会报错,报错信息为:An error occurred (IllegalLocationConstraintException) when calling the ListObjectV2 operation: The unspecified location constraint is incompatible for the region specific endpoint the request was sent to. 可以使用s3a://bucketname 这样来访问,以绕过不同region的访问受限问题