我按照http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-s3上的示例,了解如何授予用户仅访问一个存储桶的权限.
然后我使用W3 Total Cache Wordpress插件测试了配置.测试失败了.
我也尝试使用再现问题
aws s3 cp --acl=public-read --cache-control='max-age=604800, public' ./test.txt s3://my-bucket/
Run Code Online (Sandbox Code Playgroud)
那失败了
upload failed: ./test.txt to s3://my-bucket/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied
Run Code Online (Sandbox Code Playgroud)
为什么我不能上传到我的桶?
Gre*_*reg 147
回答我自己的问题:
示例策略授予PutObject访问权限,但我还必须授予PutObjectAcl访问权限.
我不得不改变
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
Run Code Online (Sandbox Code Playgroud)
从示例到:
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
Run Code Online (Sandbox Code Playgroud)
您还需要确保为客户端配置存储桶,以通过取消勾选这两个框来设置公共可访问的ACL:
mov*_*yer 25
我遇到了类似的问题.我没有使用ACL的东西,所以我不需要s3:PutObjectAcl
.
就我而言,我在做(在无服务器框架 YML中):
- Effect: Allow
Action:
- s3:PutObject
Resource: "arn:aws:s3:::MyBucketName"
Run Code Online (Sandbox Code Playgroud)
代替:
- Effect: Allow
Action:
- s3:PutObject
Resource: "arn:aws:s3:::MyBucketName/*"
Run Code Online (Sandbox Code Playgroud)
其中添加了一个/*
到桶ARN的末尾.
希望这可以帮助.
Lac*_*mov 25
就我而言,问题是我在命令行中使用“--acl=public-read”上传文件。但是,该存储桶已被阻止公共访问,并且只能通过 CloudFront 访问。
Den*_*Pat 14
如果您为存储桶设置了公共访问权限,但它仍然无法正常工作,请编辑存储桶策略并粘贴以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::yourbucketnamehere",
"arn:aws:s3:::yourbucketnamehere/*"
],
"Effect": "Allow",
"Principal": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
Spa*_*gen 10
我在上传到受 KWS 加密保护的 S3 存储桶时遇到了类似的问题。我有一个允许在特定 s3 密钥下添加对象的最小策略。
我需要将以下 KMS 权限添加到我的策略中,以允许角色将对象放入存储桶中。(可能比严格要求的略多)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:ListKeys",
"kms:GenerateRandom",
"kms:ListAliases",
"s3:PutAccountPublicAccessBlock",
"s3:GetAccountPublicAccessBlock",
"s3:ListAllMyBuckets",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"kms:ImportKeyMaterial",
"kms:ListKeyPolicies",
"kms:ListRetirableGrants",
"kms:GetKeyPolicy",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:ListResourceTags",
"kms:ReEncryptFrom",
"kms:ListGrants",
"kms:GetParametersForImport",
"kms:TagResource",
"kms:Encrypt",
"kms:GetKeyRotationStatus",
"kms:GenerateDataKey",
"kms:ReEncryptTo",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:<MY-REGION>:<MY-ACCOUNT>:key/<MY-KEY-GUID>"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
<The S3 actions>
],
"Resource": [
"arn:aws:s3:::<MY-BUCKET-NAME>",
"arn:aws:s3:::<MY-BUCKET-NAME>/<MY-BUCKET-KEY>/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我只是把头撞在墙上,只是想让S3上传来处理大文件。最初我的错误是:
An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied
Run Code Online (Sandbox Code Playgroud)
然后我尝试复制一个较小的文件并得到:
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Run Code Online (Sandbox Code Playgroud)
我可以列出对象很好,但是即使我s3:*
在“角色”策略中具有权限,我也无法做其他任何事情。我最终为此修改了政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucketMultipartUploads",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以上传任何文件了。my-bucket
用您的存储桶名称替换。我希望这会对其他人有所帮助。
如果这对其他人有所帮助,就我而言,我使用的是CMK(使用默认的aws / s3键可以正常工作)
我必须进入IAM中的加密密钥定义,并将登录到boto3的编程用户添加到“可以在应用程序内以及使用与KMS集成的AWS服务时使用此密钥来加密和解密数据”的用户列表。
我遇到了同样的问题。我的存储桶是私有的,并且有 KMS 加密。我能够通过在角色中添加额外的 KMS 权限来解决这个问题。以下列表是所需的最少角色集。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAttachmentBucketWrite",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"kms:Decrypt",
"s3:AbortMultipartUpload",
"kms:Encrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:s3:::bucket-name/*",
"arn:aws:kms:kms-key-arn"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
参考:https : //aws.amazon.com/premiumsupport/knowledge-center/s3-large-file-encryption-kms-key/
对于我犯的错误,我收到了相同的错误消息:确保使用正确的 s3 uri,例如: s3://my-bucket-name/
(如果 my-bucket-name 显然是您的 aws s3 的根目录)
我坚持这一点,因为当从浏览器复制粘贴 s3 存储桶时,您会得到类似 https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/?region=my-aws-regiontab=overview
因此,我错误地使用了s3://buckets/my-bucket-name
which :
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
归档时间: |
|
查看次数: |
75298 次 |
最近记录: |