如何将 ARN 设置为 s3 策略资源 AWS

Posted

技术标签:

【中文标题】如何将 ARN 设置为 s3 策略资源 AWS【英文标题】:How to set ARN as s3 policy resource AWS 【发布时间】:2021-06-01 12:59:20 【问题描述】:

我有一个名为“payroll-manager”的存储桶。我可以使用 cognito 身份验证用户放置对象等,我修改了身份池的角色以完全访问 s3(我遵循了这个example)。到目前为止一切顺利。

现在我需要更改我的策略以允许用户仅从他们自己的文件夹中读取、写入等。我在谷歌上搜索了如何做到这一点,我从 AWS 找到了这个 example。我从我的 cognito 角色中删除了对 s3 策略的完全访问权限,并按照此示例创建了一个策略,问题是我总是收到一条禁止消息。

我打开了 IAM 策略模拟器,我发现我什至无法设置这个简单的策略,因为它总是拒绝我的权限:

如果我将资源更改为“*”,它允许我:

在这个例子中(我只有 1 个桶)。将资源与 * 或与 ARN 一起使用不应该是一样的吗?

我应该怎么做才能定义像 AWS 这样的策略?

【问题讨论】:

你真的做过测试吗? IAM policy simulator 在此类测试中并不总是有用。 @Marcin 是的。我也有我的 localhost vue 前端,我正在测试这个 您指向的示例不适用于 S3。它用于身份池。而且,正如已经指出的那样 - 您将无法在模拟器中进行测试。并非所有东西都可以在那里进行测试。 【参考方案1】:

TLDR;你正在做的是正确的方法,它可以工作,修复测试对象。

您可能无法模拟 cognito 的策略,因为您需要以某种方式在模拟器中设置 cognito-identity。

要通过简单的策略,您所缺少的只是设置对象 arn 以匹配您的存储桶。您将政策限制为 payroll-manager,但您正在使用 *

进行测试

尝试将对象设置为arn::aws::s3:::payroll-manager/example.txt 以检查简单策略是否有效

【讨论】:

没用。我尝试了这个简单的策略: "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": "s3:*", "Resource": "arn: :aws::s3:::payroll-manager/example.txt" ] 不要把这个放在资源上,它不在策略中这是一个测试对象,把它放在对象文本输入字段上,它是右侧唯一的输入,它有一个*默认情况下 应该这样工作,但想法是直接在AWS中设置路径

以上是关于如何将 ARN 设置为 s3 策略资源 AWS的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Amazon 资源名称 (ARN) 作为标识符来查找亚马逊资源?

AWS SimpleDB 的 Amazon 资源名称 (ARN)

Terraform 和 AWS:修改现有策略

s3 存储桶策略 chrome 错误

在 CodePipeline 中创建使用另一个 AWS 账户的资源的管道

aws s3 存储桶策略