amazon s3 的 Boto 不允许访问我刚刚创建的密钥

Boto for amazon s3 allows no access to the key I just created

我有以下形式的 Amazon s3 存储桶的凭据:

<AWS_ACCESS_KEY> = "some junk"
<AWS_SECRET_KEY> = "some more junk"
<bucketname> = "mybucket"

我使用 boto 访问存储桶:

import boto
s3=boto.connect_s3(<AWS_ACCESS_KEY>, <AWS_SECRET_KEY>)
bucket = s3.get_bucket('mybucket')
mykey = bucket.new_key('test_key')
mykey.set_contents_from_string('this is test content')

并退出 ipython。到目前为止一切顺利,在 s3 控制台上我看到了一个内容正确的新文本文件。

重新启动 Ipython,然后执行检索存储桶的相同步骤。那时,我

bucket.get_key('test_key')

导致 403 错误:

S3ResponseError: S3ResponseError: 403 Forbidden

我怎么可能无法访问我刚刚创建的资源?还有,我该如何解决这个问题?

你的代码没有问题,因为我已经毫无错误地复制了它,甚至用 Boto 创建了 bucket。代码和与 API 的交互都很可靠。该问题可能与您如何在本地管理 AWS 机密或 IAM 策略有关。

Here is your code with some slight modifications:

import boto

s3=boto.connect_s3()
c_bucket = s3.create_bucket('yodas')
g_bucket = s3.get_bucket('yodas')
mykey = bucket.new_key('test_key')
mykey.set_contents_from_string('this is test content')


>>> print mykey
<Key: yodas,test_key>

>>> bucket.get_key('test_key')
<Key: yodas,test_key>

您可能希望同时创建存储桶和策略。您可以使用简单的脚本将 IAM 用户、策略和存储桶分配给 API。然后您有针对该用户的特定策略。

my_bucket = "yodas"
my_iam_name = "myuser"
my_policy_name = "yodaspolicy"

policy_json = '''{
    "Statement":[{
        "Sid":"RandomStringIdentifier",
        "Action": [
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:PutObject"
            ],
         "Effect":"Allow",
         "Resource":"arn:aws:s3:::%s/*"
        }]
}''' % my_bucket

response = iam.create_user(my_iam_name)
iam.put_user_policy(my_iam_name, my_policy_name, policy_json)