在对象级别限制联合 IAM 用户对 Amazon S3 的访问

Mid*_*idi 5 amazon-s3 federated-identity amazon-web-services amazon-iam

我正在做一些关于使用 S3 的研究。我想要实现的基本上是以与文件系统相同的方式控制对 S3 存储桶中对象的访问,但针对 IAM 联合用户。

让我们假设以下场景

  Bucket  
     |- File 1.txt -> ACL: Read: User1; Read: User 2
     |- File 2.txt -> ACL: Read: Everyone; Read, Write: User 2
     |- File 3.txt -> ACL: Read: Group 1; Read, Write: User 2
Run Code Online (Sandbox Code Playgroud)

这种配置可以使用 ACL 和 Amazon“本机”用户和组来实现。另一方面,对于联合用户,我唯一能找到的就是使用分配的存储桶策略生成临时令牌。

如果我理解正确的话,存储桶策略的工作方式与 ACL 相反(定义用户有权访问哪些对象,而 ACL 定义谁有权访问该对象)

我的问题是。是否可以在 ACL 中分配联合用户(或以其他方式为联合用户实现相同的目标)?

我想实现与文件系统相同的行为,其中您在组中拥有用户,并且在标记哪些组可以访问它们的对象上

假设字段“x-amz-meta-seclevels”包含有权访问文件的组(Group1、Group2、admin3rdfloor),并附有所提供的策略(这是不正确的,但我想描述一下我的想法) IAM 联合用户,我可以授予该用户对 x-amz-meta-seclevels 字段中包含 admin3rdfloor 值的所有文件的访问权限。

{
'Statement': [
    { 
        'Sid': 'PersonalBucketAccess', 
        'Action': [ 
            's3:GetObject' 
            ],
        'Effect': 'Allow', 
        'Resource': 'arn:aws:s3:::MyBucketName' 
        'Condition':{
        'StringLike':{
           's3:x-amz-meta-seclevels':'admin3rdfloor'
        }
     }

    }
]
Run Code Online (Sandbox Code Playgroud)

}

这可以通过任何方式实现吗?

提前感谢您的帮助!

Ste*_*pel 2

如果我正确理解您所需的配置,AWS 可能刚刚发布了支持此场景的功能,请参阅AWS 访问控制策略中的变量

\n\n
\n

AWS Identity and Access Management (IAM)使您能够创建控制对 AWS 服务 API 和资源的访问的策略。今天,我们\xe2\x80\x99 正在扩展 AWS 访问策略语言以包含对变量的支持。\n 策略变量使创建和管理包括个性化访问控制的一般策略变得更加容易。

\n
\n\n

以下是为常规 IAM 用户提供的示例策略:

\n\n
{\n   "Version": "2012-10-17",\n   "Statement": [\n     {\n       "Action": ["s3:ListBucket"],\n       "Effect": "Allow",\n       "Resource": ["arn:aws:s3:::myBucket"],\n       "Condition":{"StringLike":\n      {"s3:prefix":["home/${aws:username}/*"]}}\n     },\n     {\n       "Action":["s3:GetObject", "s3:PutObject", "s3:DeleteObject*"],\n       "Effect":"Allow",\n       "Resource": ["arn:aws:s3:::myBucket/home/${aws:username}",\n       "arn:aws:s3:::myBucket/home/${aws:username}/*"]\n     }\n]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

虽然${aws:username}此示例中包含的 不适用于联合用户(或假定角色),但还有另一个变量${aws:userid},它将替换account:caller-specified-name为相应的${aws:principaltype} FederatedUser, - 请参阅可用于策略变量的请求信息中的表有关如何根据主体类型替换这些变量的详细信息。

\n