一种不错且干净的方法是使用存储桶策略,通过提供账户 ARN 作为委托人来授予对外部账户(账户 C)的读取访问权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Grant read access to reporting account",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::insertReportingAccountIdHere:root"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectAcl"
],
"Resource": [
"arn:aws:s3:::yourdatalakebucket",
"arn:aws:s3:::yourdatalakebucket/*"
]
}
]
}
这使报告账户可以为其自己的用户管理存储桶的 (ListBucket, gGtObject) 权限,这意味着您现在可以在账户 C 上创建一个 IAM 策略,该策略具有从指定数据湖存储桶获取数据的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow reading files from the data lake",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectAcl"
],
"Resource": [
"arn:aws:s3:::yourdatalakebucket",
"arn:aws:s3:::yourdatalakebucket/*"
]
}
]
}
然后可以将此策略附加到您想要的任何账户 C IAM 角色或用户组。例如,您可以将其附加到您的标准开发人员或分析师角色以授予对大型用户组的访问权限,或者您可以将其附加到服务角色以授予对存储桶的特定服务访问权限。
Amazon S3 文档站点上有关于如何执行此操作的指南。