20

我正在尝试在 Amazon S3 控制台中创建新的存储桶策略并收到错误

策略中的委托人无效 - “AWS”:“my_username”

我主要使用的用户名是我的默认存储桶受让人。

我的政策

{
  "Id": "Policy14343243265",
  "Statement": [
    {
      "Sid": "SSdgfgf432432432435",
      "Action": [
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my_bucket/*",
      "Principal": {
        "AWS": [
          "my_username"
        ]
      }
    }
  ]
}

我不明白为什么我会收到错误消息。我究竟做错了什么?

4

6 回答 6

20

如错误消息所述,您的委托人不正确。查看有关指定主体的 S3 文档以了解如何修复它。从示例策略中可以看出,它需要类似于arn:aws:iam::111122223333:root.

于 2012-10-05T16:14:08.023 回答
10

我在 S3 Bucket 策略生成器中也遇到了同样的错误。事实证明,现有策略之一的主体已被删除。问题不在于正在添加的策略。

在这种情况下,要发现错误的策略,您可以查找在 ARN 中没有账户或角色的委托人。

所以,而不是看起来像这样:

"Principal": {
    "AWS": "arn:aws:iam::123456789101:role/MyCoolRole"
}

它看起来像这样:

"Principal": {
    "AWS": "ABCDEFGHIJKLMNOP"
}

因此,它不是正确的 ARN,而是像ABCDEFGHIJKLMNOP这样的字母数字键。在这种情况下,您将需要确定错误主体存在的原因,并且很可能会修改或删除它。希望这会对某人有所帮助,因为我很难找到它,而且我没有找到任何文件来表明这一点。

于 2020-05-21T23:52:30.250 回答
7

更好的解决方案:

  1. 创建允许访问存储桶的 IAM 策略
  2. 将其分配给一个组
  3. 将用户放入该组

您可以定义“这些是可以触摸这个的人”,而不是说“允许此用户触摸此存储桶”。

现在听起来很傻,但是等到您再添加 42 个存储桶和 60 个用户。拥有一个管理所有资源访问的中心点将节省一天的时间。

于 2017-11-08T21:53:50.270 回答
2

Principal 的值应该是 user arn,您可以通过单击 IAM 中的用户名在 Summary 部分中找到它。这是因为特定用户可以绑定 S3 Bucket Policy 在我的情况下,它是 arn:aws:iam::332490955950:user/sample ==> sample 是用户名

于 2018-06-04T18:46:26.940 回答
1

当我尝试在同一个CloudFormation堆栈中创建存储桶、存储桶策略和委托人(IAM 用户)时,我收到了相同的错误消息。虽然我可以看到 CF 在开始创建存储桶策略之前就完成了 IAM 用户的创建,但堆栈部署失败了。向 BucketPolicy 资源添加一个DependsOn: MyIamUser为我修复了它。

于 2020-07-21T10:03:16.860 回答
0

为什么我在尝试更新我的 Amazon S3 存储桶策略时收到错误“策略中的委托人无效”?

问题

我正在尝试使用 Web 控制台、awscli 或 terraform(等)添加或编辑我的 Amazon Simple Storage Service (Amazon S3) 存储桶的存储桶策略。但是,我收到错误消息"Error: Invalid principal in policy."如何解决此问题?

解析度

当您的存储桶策略中的Principal值无效"Error: Invalid principal in policy"时,您会收到。要修复此错误,请查看存储桶策略中的 Principal 元素。检查他们是否使用以下受支持的值之一:

  • AWS Identity and Access Management (IAM) 用户或角色的 Amazon 资源名称 (ARN) -- 注意:要查找 IAM 用户的 ARN,请运行[aws iam get-user][2]命令。要查找 IAM 角色的 ARN,[aws iam get-role][2]请运行命令或直接从您的账户 Web 控制台 UI 中的 IAM 服务中检查它。
  • AWS账户 ID
  • "*"代表所有用户的字符串

此外,请查看策略中的 Principal 元素并检查它们的格式是否正确。如果 Principal 是一个用户,则元素必须采用以下格式:

"Principal": {
    "AWS": "arn:aws:iam::AWS-account-ID:user/user-name1"
  }

如果 Principal 是多个用户但不是所有用户,则元素必须采用以下格式:

"Principal": {
                "AWS": [
                  "arn:aws:iam::AWS-account-ID:user/user-name1",
                  "arn:aws:iam::AWS-account-ID:user/user-name2"
                ]
            }

如果 Principal 是所有用户,则元素必须采用以下格式:

{
  "Principal": "*"
}

如果您发现无效的 Principal 值,则必须更正它们,以便您可以保存对存储桶策略的更改。

加分!


参考链接: https ://aws.amazon.com/premiumsupport/knowledge-center/s3-invalid-principal-in-policy-error/

于 2020-03-13T00:41:49.357 回答