高阶14 - S3桶跨账号共享的最佳实践
本帖子适用于A账户的数据要与B账户的用户共享,一个典型的例子就是A账户拥有者是某测序公司,测序数据传到自己的桶里, 然后B账号的拥有者作为甲方就可以直接去桶里捞数据出来分析了,从而打通任督二脉。 -- D.C
B账号下操作
- 首先,在B账号下的IAM界面下,点击左侧的用户/User, 右侧页面点击添加用户,用户名比如说叫
sam
, 访问类型看情况,可以全选。
编程访问: 为 AWS API、CLI、SDK 和其他开发工具启用 访问密钥 ID 和 私有访问密钥 。 (需要用到命令行的选择这个)
AWS 管理控制台访问: 启用 密码 、使得用户可以登录到 AWS 管理控制台。(要用到界面化的控制台的用选择这个)
- 下一步 权限, 这里是关键了。
用户添加到组: 如果已经创建了用户组比如 bfx group, 则可以直接将这个用户添加到组里,那么这个新用户就自动获得这个组内用户的权限。
从现有用户复制:如果是需要直接copy另一个已经存在的用户相同权限,选择这项。
直接附加现有策略: 直接从现有的策略列表中添加对应的权限。
如果是测试本文,则可以选择 直接附加现有策略 这项,然后选择下面的 AdministratorAccess
,并点击上方的创建策略。
- 点击 JSON , 输入如下policy。 这里需要修改的地方是S3桶的操作权限和对应的目录。比如下面的policy就是授予这个IAM 用户
sam
去从A账户的publicuse
这个桶的sam
文件夹下去list文件和读取数据。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws-cn:s3:::publicuse/sam/*",
"arn:aws-cn:s3:::publicuse/sam",
"arn:aws-cn:s3:::publicuse"
]
}
]
}
- 接着给这条策略命名 比如
access_A_S3
, 点击创建策略,系统会显示策略列表里多了一条这样的策略。回到之前的添加用户窗口,点击右上角的刷新按钮,选中刚才创建的策略,点击下一步 标签, 标签按照自己的规则设置,点击 审核 ,然后 创建用户。
A账号下操作
-
俗话说,一个巴掌拍不响,你B账号自作主张授予自己来访问我A账号的权限,你问过我了么?我答应了么? 对了,A账号也要授予B账号你来摸我的权限,由于是针对S3操作,所以这里的权限就是使用 S3 的存储桶策略进行设置。
-
江湖规矩,进入S3打开账号级公开访问权限。
- 进入要share的桶里,打开这个桶的公有访问权限:
- 最重要的来了,在下方的 存储桶策略 里,点击右侧的 编辑,输入如下策略。 修改为实际的B账号的AWS ID 和用户名
sam
, 点击保存修改。注意 ,如果账号ID和用户名不对,系统会报错的。
{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws-cn:iam::590056003456:user/sam"
},
"Action": [
"s3:GetObject",
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws-cn:s3:::publicuse/sam/*",
"arn:aws-cn:s3:::publicuse/sam",
"arn:aws-cn:s3:::publicuse"
]
}
]
}
大功告成
- 如此这般,两边的policy就全部对上了。这个时候用B账号的sam用户去
aws s3 ls s3://publicuse/sam
就能看到里面的数据了,接下来就不用教啦,该跑hpc还是container按自己的pipeline来吧。
结语: 这仅仅是AWS强大的Policy的冰山一角,根据你的奇思妙想,多看文档多问专家,事半功倍受益无穷。补充材料: 设置存储桶和对象访问权限
我有嘉宾,鼓瑟吹笙。