我们将S3对象名称命名为员工的生日。这是愚蠢的。我们希望避免使用敏感数据创建对象名称。使用S3用户定义的元数据存储敏感数据是否安全;或者添加拒绝操作S3:Getobject的S3存储桶策略。哪个会起作用?
答案 0 :(得分:0)
如你所说;用敏感数据创建对象名称不是一个好主意;但它的确定......也不错。我建议删除S3策略中的listAllObjects()权限。策略应该只允许getObject(),这意味着任何人只有在知道对象名称时才能获取对象;即,当调用api已经知道用户的DOB时。
使用listAllObjects()权限;调用者可以列出存储桶中的所有对象并获取用户的DOB。
答案 1 :(得分:0)
对象密钥和用户元数据不应用于敏感数据。对象键背后的原因很明显,但元数据可能不太明显;
对象标记也不适用于敏感数据,因为它们也不是加密存储的。对象标记对于标记包含敏感数据的对象非常有用,因为标记可以在策略中用于控制对象的访问权限,但这仅在对象本身包含敏感数据时才相关。
如果“敏感”意味着“专有”而不是“个人”,则标签可以是数据的可接受位置......这可能是从业务角度来看被视为敏感的数据,但不一定是存储加密,例如创建对象的特定软件版本的标识。 (我使用此策略,以便如果稍后确定某个版本的代码有错误,我可以确定哪些对象可能已受到影响,因为它们是由该版本生成的)。您可能希望保留此信息的专有权,但在此上下文中它不会“敏感”。
答案 2 :(得分:0)
如果您的s3存储桶用于存储私人数据,而您允许公共访问存储桶,则这总是一个坏主意 - 它基本上是安全隐患。
您可以将存储桶锁定到您的应用,而不是更改现有的s3结构,然后通过cloudfront signed urls提供数据?
基本上在你当前注入s3 url的代码中你可以调用aws api来创建一个来自s3 url和策略的签名url并将这个新url发送给最终用户。这会屏蔽s3网址,你可以强制执行其他限制,例如链接有效期多长,强制要求特定标头或限制对特定IP等的访问权限。您还可以获得cdn边缘缓存并降低成本作为附带好处。
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html