更新:第二天一切正常!?!所以我认为答案可能是您必须等待一段时间,要么在创建新的 IAM 用户之后,要么在创建新的存储桶之后,然后上传才会起作用。
我创建了一个专用的 IAM 用户,然后执行了aws configure
,并提供了密钥,并指定了“eu-west-1”区域。我可以在 ~/.aws/config 中看到正确的信息。
我试过了aws s3 mb s3://backup
,但被告知它已经存在。aws s3 ls
确认它不存在。但是aws s3 mb s3://backup-specialtest
确实有效。
但当我尝试时aws s3 cp test.tgz s3://backup-specialtest
我得到:
A client error (AccessDenied) occurred when calling the CreateMultipartUpload operation: Anonymous users cannot initiate multipart uploads. Please authenticate.
问题不仅仅出在大文件上。我创建了一个 6 字节的文本文件,并尝试上传,aws s3 cp test.txt s3://backup-specialtest/
但出现以下错误:
upload failed: ./test.txt to s3://backup-specialtest/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied
尝试后aws s3 ls s3://backup-specialtest
我发现:
A client error (AccessDenied) occurred when calling the ListObjects operation: Access Denied
尝试后aws s3api get-bucket-acl --bucket backup-specialtest
我发现:
A client error (AccessDenied) occurred when calling the GetBucketAcl operation: Access Denied
我已经在 AWS Web 控制台中将“AmazonS3FullAccess”策略附加到我的用户。当我单击“显示策略”时,我得到:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
看起来不错:他可以在所有资源上执行所有 S3 操作。
在写这篇文章的时候,我想再检查一下我是否仍然可以创建一个新的 bucket,并且在此过程中没有破坏任何东西。所以我尝试了一下,aws s3 mb s3://another-test
得到了:
make_bucket failed: s3://another-test/ A client error (BucketAlreadyExists) occurred when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
但是当我尝试时,aws s3 mb s3://another-test-2
我获得了成功:
make_bucket: s3://another-test-2/
它就在那里:aws s3 ls
2015-11-13 11:07:10 another-test-2
2015-11-13 10:18:53 backup-specialtest
2014-08-05 21:00:33 something-older
(最后一个存储桶似乎是去年由根用户创建的,并且是空的。)
答案1
首先,您需要了解存储桶名称在整个 Amazon 域中都是唯一的。因此,如果用户已经拥有一个名为“backup”的存储桶,您将无法使用该名称创建新的存储桶。
话虽如此,您有两种主要方式来管理存储桶的权限。
- 创建存储桶时,默认情况下您应该具有上传/下载权限。您可以通过转到存储桶、单击存储桶名称、然后单击“属性”和最后单击“权限”来检查这一点。在这里,请检查您的 IAM 用户是否列在授予的权限中。您可以根据需要添加其他权限
否则,您也可以使用存储桶策略(与上面提到的权限相同)。您将找到存储桶策略示例这里举个例子,像这样的操作应该可以公开你的存储桶:
{"Version": "2012-10-17", "Statement": [ { "Sid": "myPolicy", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": [ "arn:aws:s3:::YOUR_BUCKET_NAME/*", "arn:aws:s3:::YOUR_BUCKET_NAME" ] } ]}