Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 用于只读和一次写入访问的Amazon S3 ACL_Amazon S3_Acl - Fatal编程技术网

Amazon s3 用于只读和一次写入访问的Amazon S3 ACL

Amazon s3 用于只读和一次写入访问的Amazon S3 ACL,amazon-s3,acl,Amazon S3,Acl,我正在开发一个web应用程序,目前已将以下ACL分配给AWS帐户,该帐户用于访问其数据: { “声明”:[ { “Sid”:“xxxxxxxxx”,//不知道这是否应该保密 “行动”:[ “s3:*” ], “效果”:“允许”, “资源”:[ “arn:aws:s3:::cdn.crayze.com/*” ] } ] } 不过,我想让这一点更加严格,这样,如果我们的AWS凭据遭到破坏,攻击者就无法销毁任何数据 从文档中看,我似乎只想允许以下操作:s3:GetObject和s3:PutObjec

我正在开发一个web应用程序,目前已将以下ACL分配给AWS帐户,该帐户用于访问其数据:

{
“声明”:[
{
“Sid”:“xxxxxxxxx”,//不知道这是否应该保密
“行动”:[
“s3:*”
],
“效果”:“允许”,
“资源”:[
“arn:aws:s3:::cdn.crayze.com/*”
]
}
]
}
不过,我想让这一点更加严格,这样,如果我们的AWS凭据遭到破坏,攻击者就无法销毁任何数据

从文档中看,我似乎只想允许以下操作:
s3:GetObject
s3:PutObject
,但我特别希望帐户只能创建不存在的对象,即对现有对象的PUT请求应该被拒绝。这是可能的吗?

这在你想象中是不可能的;但是,您可以绕过这一限制,这是一种将一个对象的多个变体保持在同一个bucket中的方法,并且在开发时考虑了如下用例:

您可以启用版本控制以防止删除或删除对象 错误地覆盖,或归档对象以便检索 以前的版本

还有几个相关的常见问题,例如:

  • -版本控制允许您保存、检索和恢复存储在Amazon S3 bucket中的每个对象的每个版本。一旦为bucket启用版本控制,AmazonS3将在对现有对象执行PUT、POST、COPY或DELETE操作时保留这些对象。默认情况下,GET请求将检索最近编写的版本。通过在请求中指定版本,可以检索被覆盖或删除对象的旧版本

  • -Amazon S3为客户提供了高度耐用的存储基础架构。版本控制通过在客户意外覆盖或删除对象时提供恢复手段,提供了额外的保护级别这使您能够轻松地从意外的用户操作和应用程序故障中恢复。您还可以使用版本控制进行数据保留和归档。[我的重点]

  • -当用户对对象执行删除操作时,后续默认请求将不再检索该对象。但是,该对象的所有版本将继续保留在AmazonS3存储桶中,并且可以检索或恢复只有Amazon S3存储桶的所有者才能永久删除版本。[强调我的]

如果您对bucket所有者的AWS凭据非常重视(当然,他们可能不同于访问用户),您可以更进一步,请参阅:

版本控制的MFA删除功能使用,可用于提供额外的 安全[…]如果使用MFA Delete启用版本控制 在AmazonS3存储桶上,需要两种形式的身份验证来 永久删除对象的版本:您的AWS帐户 凭据以及来自的有效六位数代码和序列号 您实际拥有的身份验证设备。[……]


如果这是您试图避免的意外覆盖,并且您的业务需求允许短时间的不一致,则可以在Lambda函数中执行回滚:

  • 制定一项“不使用相同名称的新对象”的策略。大多数情况下,这不会发生。要强制执行:
  • 在中侦听S3:PutObject事件
  • 触发事件时,检查是否存在多个版本
  • 如果存在多个版本,请删除除最新版本以外的所有版本
  • 通知上传者发生了什么(将原始上传者放在对象的
    x-amz-meta-*
    中非常有用。更多信息)

  • 现在可以使用S3对象锁锁定对象的版本。这是一个每桶设置,允许您放置两种蠕虫锁中的一种

    • “保留期”-不能更改
    • “合法持有”-桶所有者可随时更改


    正如@Kijana Woodard在下面提到的,这并不妨碍创建对象的新版本。

    编辑:如果您是从这里来的,则适用

    对象锁仅在版本控制的存储桶中工作。如果您可以为您的bucket启用版本控制,但可以容忍文件在删除时假定存在的短暂不一致(S3只是最终一致),如果在紧密循环中使用,则可能会导致删除后放置间歇性失败,反之亦然,连续看跌期权错误地连续看跌期权,则以下解决方案可能是合适的


    给定对象路径,读取对象的内容长度头(从元数据、请求)。仅当请求成功时写入对象,如果适用,如果长度大于,则写入对象。

    不知道语言标记!这些都列在哪里?我认为它不支持这一点的原因是S3最终是一致的,因此没有权威的“对象不存在”语义。不幸的是,这是唯一一个解决方案,可用于非常常见和明显的备份需求(“只写新的”。)如果使用S3版本控制,它排除了使用S3的生命周期管理策略。因此,现在您不得不在拥有可靠的备份安全性和方便地删除旧备份之间做出选择。我不认为两者都有太高的期望。我经常在需要的地方在同一个bucket中使用版本控制和生命周期系统——使用一个并不排除另一个。根据s3界面中版本控制的描述:
    您可以使用生命周期规则来管理对象的所有版本及其相关成本。生命周期规则使您能够自动归档