使用boto3验证没有GET或PUT的S3凭证

时间:2017-11-01 13:59:33

标签: python-2.7 amazon-web-services amazon-s3 boto3

有没有办法验证一组给定的S3凭证是否可以访问特定的存储桶而无需进行某种显式的PUT或GET?

实例化s3.Client,s3.Resource或s3.Bucket对象似乎根本不验证凭据,更不用说存储桶访问了。

boto3 1.4.7。 python 2.7.13。

我们有自动化和编排,可以自动创建存储桶,我希望包含一个验证用户访问密钥和密钥的部分。我知道自从我创建它以来,存在这个桶。水桶是空的。

我想验证用户是否具有访问PUT操作的权限。

感谢您的帮助。

*更新*

我最终使用s3.Client对象执行此操作:

objects = client.list_objects(Bucket=cfg['bucket'])

由于铲斗是空的,因此这是一种轻量级操作,并且大部分都是单行程。 (包裹在试块中)

2 个答案:

答案 0 :(得分:7)

是的,您可以使用IAM policy simulation。这是一个例子:

import boto3

iam = boto3.client('iam')
sts = boto3.client('sts')

# Get the arn represented by the currently configured credentials
arn = sts.get_caller_identity()['Arn']

# Create an arn representing the objects in a bucket
bucket_objects_arn = 'arn:aws:s3:::%s/*' % 'my-test-bucket'

# Run the policy simulation for the basic s3 operations
results = iam.simulate_principal_policy(
    PolicySourceArn=arn,
    ResourceArns=[bucket_objects_arn],
    ActionNames=['s3:PutObject', 's3:GetObject', 's3:DeleteObject']
)
for result in results['EvaluationResults']:
    print("%s - %s" % (result['EvalActionName'], result['EvalDecision']))

您可以找到所有s3操作here

有一点需要注意的是,IAM最终是一致的,因此,如果您即时创建用户,您仍可能需要稍等片段才能传播更改。

答案 1 :(得分:1)

使用head_bucket

  

head_bucket(** kwargs)

     

此操作对于确定是否有用   存在存储桶,您有权访问它。

如果您无法访问,则会出现例外情况:

  

botocore.exceptions.ClientError:调用时发生错误(403)   HeadBucket操作:禁止

修改此Python 2.7代码以满足您的需求:

import boto3
s3 = boto3.client('s3')
try:
  s3.head_bucket(Bucket='mybucket')
  print 'Can access the bucket'
except:
  print 'Cannot access the bucket'