繁体   English   中英

Boto for Amazon S3不允许访问我刚刚创建的密钥

[英]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创建了存储桶。 代码和与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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM