コンソールログインとAPIログインの間に認証エラーが発生する理由を誰かが明らかにできることを願っています。バケットへの完全な CRUD アクセス権を持つ特定の S3 バケットにアクセスできるクライアントがあり、コンソールを介してダウンロード、作成、削除を実行できますが、API を介してアクセスする場合、事前にキーを知っていればビューをダウンロードすることもできますバケット内のオブジェクトのキーを読み取ろうとすると、不正なエラーが発生します。
次のポリシーは、そのユーザーを単一の S3 バケットのみに分離するために、ユーザー アカウントに関連付けられています。
{
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::*",
"Condition": {}
},
{
"Sid": "AllowRootLevelListingOfCompanyBucket",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::mybucket",
"Condition": {
"StringEquals": {
"s3:prefix": "",
"s3:delimiter": "/"
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObjectVersionAcl",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": "arn:aws:s3:::mybucket/*",
"Condition": {}
}
]
}
以下は、無許可で失敗している API 呼び出しです。
-=-=-=-
import boto, boto.s3
s3conn = boto.s3.connection.S3Connection(aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
is_secure=True,
debug=0)
# This line fails with "403 Forbidden" b/c it tries to read the keys in # the bucket:
#s3bucket = s3conn.get_bucket('mybucket')
# This line does NOT try to read the keys and therefore succeeds:
s3bucket = s3conn.get_bucket('mybucket', validate=False)
# This loop fails with "403 Forbidden" on the very first iteration:
#for k in s3bucket.list():
# print k
# This line works, but I had to use the webpage to learn the name of the # key first.
k = s3bucket.get_key('specificfilename.csv')
print k
# This line works.
print k.generate_url(expires_in=10) + '\n'