我正在尝试在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"
]
}
}
]
}
我不明白为什么我会收到错误。我做错了什么?
答案 0 :(得分:16)
正如错误消息所示,您的校长不正确。检查the S3 documentation on specifying Principals是否有解决方法。如example policies中所示,它必须类似于arn:aws:iam::111122223333:root
。
答案 1 :(得分: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)
我正在尝试使用Web控制台,awscli或terraform(等)添加或编辑我的Amazon Simple Storage Service(Amazon S3)存储桶的存储桶策略。但是,我收到错误消息"Error: Invalid principal in policy."
,该如何解决?
当您的存储桶策略中的 Principal 的值无效时,您会收到"Error: Invalid principal in policy"
。要解决此错误,请查看存储桶策略中的Principal元素。检查它们是否使用以下受支持的值之一:
[aws iam get-user][2]
命令。要查找具有IAM角色的ARN,请运行[aws iam get-role][2]
命令或直接从帐户Web控制台UI中的IAM服务中进行检查。"*"
此外,请查看策略中的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资源为我修复了该问题。