答案没有帮助
S3桶bucket1
的资源策略是:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket1/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucket1/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucket1/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
}
}
]
}
bucket1
的IAM策略是:
{
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*"
],
"Effect": "Allow"
}
s3Upload()
工作正常
在将文件复制到本地文件夹时执行aws s3 cp s3://url .
后发生错误
这是IAM策略与AMP之间的冲突;S3的资源政策。
如何使资源策略允许执行aws s3 cp
?
这里几乎没有问题。首先,您的存储措施策略文档不是有效的JSON,但我想在应对过程中发生了错误。
aws s3 cp s3://url
不起作用,仅仅是因为桶策略阻止了它,这在这种情况下是预期的行为。请注意,显式否认总是会获胜。如果HTTP请求中缺少服务器端加密标题,则您的存储措施策略会拒绝上传。无论您如何定义与用户附加的IAM策略,该用户都无法按照明确的拒绝使用上述命令。
如果要使它起作用,则只需要使用适当的标志--sse AES256
在CLI命令中指定服务器端加密(当将对象上传到S3桶时是正确的(。
aws s3 cp s3://url --sse AES256
我注意到的其他事情:
在此部分
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket1/*”,
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
,如果请求不使用HTTP,则拒绝所有S3操作,但您仅指定了该存储桶中的对象-"Resource": "arn:aws:s3:::bucket1/*”
而不是存储桶本身-"Resource": "arn:aws:s3:::bucket1”
,因此您的语句仅适用于对象级别操作。这是意图的行为吗?如果您想拒绝对象级别操作和不使用HTTPS的存储级操作的所有操作,则需要将当前Resource
更改为
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket1”,
"arn:aws:s3:::bucket1/*”
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
和此部分
{
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*"
],
"Effect": "Allow"
}
您的Resource
-"arn:aws:s3:::bucket1"
中的这一行是完全冗余的,因为"s3:GetObject"
操作是对象级别操作,并且您的语句不包含任何存储液级操作。您可以自由删除它。所以看起来应该像这样
{
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::bucket1/*",
"Effect": "Allow"
}
update
获取对象时,请确保您指定某些对象,而不仅仅是桶的URL。
这将起作用
aws s3 cp s3://bucket/file.txt .
这将失败403错误
aws s3 cp s3://bucket .
如果要使用上述命令同时下载多个文件,则需要做两件事。首先,您需要更新您的IAM权限,以包括在存储桶上的s3:ListBucket
。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucket"
}
]
}
第二件事,您需要在cp
命令中指定--recursive
标志。
aws s3 cp s3://bucket . --recursive