amazon s3存储桶策略中的无效主体

时间:2012-10-05 16:07:55

标签: api amazon-s3 amazon-web-services

我正在尝试在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"
        ]
      }
    }
  ]
}

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

6 个答案:

答案 0 :(得分:16)

正如错误消息所示,您的校长不正确。检查the S3 documentation on specifying Principals是否有解决方法。如example policies中所示,它必须类似于arn:aws:iam::111122223333:root

答案 1 :(得分:4)

更好的解决方案:

  1. 创建一个允许访问存储桶的IAM策略
  2. 将其分配给群组
  3. 将用户加入该群组
  4. 您可以定义“这些人可以触摸此”,而不是说“此用户可以触摸此存储桶”。

    现在听起来很傻,但要等到你再添加42个桶和60个用户。拥有管理所有资源访问的中心位置将节省一天。

答案 2 :(得分:3)

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

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

所以,与其看起来像这样:

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

它看起来像这样:

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

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

答案 3 :(得分:2)

Principal的值应该是用户arn,您可以在摘要部分中通过单击IAM中的用户名找到该值。 这是因为特定用户可以使用S3 Bucket Policy进行绑定 就我而言,它是arn:aws:iam :: 332490955950:user / sample ==> sample是用户名

答案 4 :(得分: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身份和访问管理(IAM)用户或角色的Amazon资源名称(ARN)- 注意:要查找IAM用户的ARN,请运行[aws iam get-user][2]命令。要查找具有IAM角色的ARN,请运行[aws iam get-role][2]命令或直接从帐户Web控制台UI中的IAM服务中进行检查。
  • AWS account ID
  • 代表所有用户的字符串"*"

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

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

如果主体是一个以上用户,但不是所有用户,则该元素必须采用以下格式:

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

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

{
  "Principal": "*"
}

如果发现无效的主体值,则必须更正它们,以便将更改保存到存储桶策略中。

加分!


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

答案 5 :(得分:0)

当我尝试在同一 CloudFormation 堆栈中创建存储桶,存储桶策略和主体(IAM用户)时,我收到了相同的错误消息。尽管我看到CF甚至在开始存储桶策略创建之前就完成了IAM用户创建,但是堆栈部署失败了。将DependsOn: MyIamUser添加到BucketPolicy资源为我修复了该问题。