Permissions AmazonS3只写访问

Permissions AmazonS3只写访问,permissions,amazon-web-services,amazon-s3,Permissions,Amazon Web Services,Amazon S3,我将几个客户的文件直接备份到AmazonS3存储桶中,每个客户都备份到不同的文件夹中。我使用的是一个简单的.Net客户端,每晚在Windows任务下运行一次。为了允许写入bucket,我的客户端需要AWS访问密钥和密钥(我创建了一对新密钥) 我的问题是: 我如何确保我的客户中没有人可能会使用这双鞋偷看桶里和文件夹里的东西,而不是他自己的?我可以创建“只写”访问对吗 我这样做对吗?这应该通过AWS访问设置解决,还是应该在上传之前对客户机器上的文件(每个客户使用不同的密钥)进行客户端加密,并避免上述

我将几个客户的文件直接备份到AmazonS3存储桶中,每个客户都备份到不同的文件夹中。我使用的是一个简单的.Net客户端,每晚在Windows任务下运行一次。为了允许写入bucket,我的客户端需要AWS访问密钥和密钥(我创建了一对新密钥)

我的问题是:

  • 我如何确保我的客户中没有人可能会使用这双鞋偷看桶里和文件夹里的东西,而不是他自己的?我可以创建“只写”访问对吗

  • 我这样做对吗?这应该通过AWS访问设置解决,还是应该在上传之前对客户机器上的文件(每个客户使用不同的密钥)进行客户端加密,并避免上述交叉访问


  • 使用IAM为每个客户创建一个单独的用户(不仅仅是一个额外的密钥对),然后让每个用户只访问他们的S3文件夹。例如,如果bucket被称为
    everybodysbucket
    ,客户A的文件都以
    userA/
    开头(客户B的文件以
    userB/
    开头),那么您可以为客户A向用户授予
    everybodysbucket/userA/*
    ,为客户B向用户授予
    everybodysbucket/userB/*
    权限

    这将防止每个用户看到任何不是他们自己的资源


    使用还可以控制每个用户可以访问的特定S3操作,而不仅仅是资源。因此,是的,如果您愿意,您可以向用户授予仅写权限。

    我刚刚创建了一个这样的仅写策略,它似乎正在工作:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::BUCKET_NAME/*"
                ]
            }
        ]
    }
    

    我认为创建这样一个drop是一个更简洁的解决方案。

    作为中推荐方法的一个变体,您还可以通过SFTP在用户级别管理访问控制。这些用户可以共享相同的全局IAM策略:

    • SFTP确实支持特定于用户的主目录(类似于“chroot”)
    • SFTP允许您通过服务管理的身份验证或您自己的身份验证提供商来管理用户访问。我不确定服务管理的身份验证是否有用户限制
    • 如果您希望允许用户使用客户端访问上传的文件,SFTP将非常干净地提供它

    这是否意味着我将为所有用户使用相同的密钥对,或者我将为每个IAM用户生成一个新的密钥对?每个IAM用户将有一个不同的密钥对。我尝试了您的建议,创建了一个用户,添加了一个带有各种“S3::“资源操作”的策略arn:aws:S3::my_bucket/folder/user/*,并出现“拒绝访问”错误。如果我将用户策略更改为“arn:aws:s3:::*”,它会起作用。我还需要设置一个bucket策略来允许用户写入他的文件夹吗?我刚刚试过,它成功了。我的用户只有一个S3权限:
    PutObject
    ,ARN与上面的类似。我能够在那个文件夹中创建一个对象。你确定你在“我的桶”中创建的对象名为“folder/user/somethingorother”吗?是的。但我设法找到了问题——在代码的某个地方,某个天才决定使用GetObject检查目录结构是否存在,因此他基本上是在寻找父文件夹——用户没有权限。谢谢你的回答,它解决了我的问题。