amazon-web-services - 限制联合 IAM 用户在对象级别访问 Amazon S3

标签 amazon-web-services amazon-s3 federated-identity 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

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

如果我理解正确,存储桶策略的工作方式与 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'
        }
     }

    }
]

}

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

提前感谢您的帮助!

最佳答案

如果我正确理解了您所需的配置,AWS 可能刚刚发布了一项支持此方案的功能,请参阅 Variables in AWS Access Control Policies :

AWS Identity and Access Management (IAM) enables you to create policies that control access to AWS service APIs and resources. Today we’re extending the AWS access policy language to include support for variables. Policy variables make it easier to create and manage general policies that include individualized access control.



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

{
   "Version": "2012-10-17",
   "Statement": [
     {
       "Action": ["s3:ListBucket"],
       "Effect": "Allow",
       "Resource": ["arn:aws:s3:::myBucket"],
       "Condition":{"StringLike":
      {"s3:prefix":["home/${aws:username}/*"]}}
     },
     {
       "Action":["s3:GetObject", "s3:PutObject", "s3:DeleteObject*"],
       "Effect":"Allow",
       "Resource": ["arn:aws:s3:::myBucket/home/${aws:username}",
       "arn:aws:s3:::myBucket/home/${aws:username}/*"]
     }
]
}

${aws:username}此示例中包含的数据不适用于联合用户(或承担的角色),还有另一个变量 ${aws:userid} ,它将被替换为 account:caller-specified-name 为各自的 ${aws:principaltype} FederatedUser , - 请引用Request Information That You Can Use for Policy Variables内的表格有关如何根据主体类型替换这些变量的详细信息。

关于amazon-web-services - 限制联合 IAM 用户在对象级别访问 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15790908/

相关文章:

amazon-web-services - 如何在cloudformation中启用cloudwatch日志并分配自定义域名

json - 如何使用 node.js 在 S3 文件中保留表情符号字符

java - S3 SDK 能否自行确定存储桶的区域?

asp.net-mvc - 从 ASP.NET MVC 到 SharePoint 的联合身份验证

amazon-web-services - AWS Elasticsearch EC2 Discovery,无法找到其他节点

node.js - 我错误地从服务器(aws)删除了一些nodejs代码,如何恢复它

amazon-web-services - AWS S3 DeletionPolicy - 创建后添加并验证设置

您已拥有的 android aws 错误代码存储桶

azure - Okta 联合 Azure AD 用户登录问题

federated-identity - 日内瓦框架中 RP-STS 的简单声明转换