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)
我有以下形式的 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)