2016-02-29 98 views

回答

0

Amazon S3 SDK的AmazonS3Client是通往S3的网关。您可以使用几种方法来探索对S3存储桶和对象的访问权限,但S3将其访问权限基于基于资源的策略(即ACL - 访问控制列表),告知S3哪些用户可以访问存储桶/对象以及和基于用户的政策,这是授予用户的权利。

所以,这意味着,在S3的访问权限管理中没有对密钥对的本地理解。虽然你不能给SDK一个密钥对,并期望它能够返回关于该密钥对是否可以访问资源的真/假,但我可以想到两个想法。

1)设计你的应用程序,而不是使用IAM角色(这是在EC2上运行时的首选认证方式),你的应用程序可以使用运行时提供的任何密钥对,所以你的应用程序的用户需要为应用程序提供关键信息,并且您的应用程序将进行身份验证,然后尝试访问资源。如果可以,很好,如果没有,它没有权限。这可能是矫枉过正的,这取决于你的用例。您还需要确保关键信息的安全性。这将是一个S3客户端会做的(只是谷歌的'S3客户端',你会发现几个)。

2)确定AWS账户(用户名)是否有权限,而不是试图确定某个特定的密钥是否有权访问某个对象。由于访问策略是以用户为中心的,因此您的应用程序需要通过IAM角色(如果应用程序在EC2上运行)或IAM用户(如果不在EC2上运行)具有对所有S3的读权限进行身份验证并轮询用户想要访问的对象,检查与该桶或对象关联的授权并相应地通知用户。如果您的应用程序需要简单地检查用户是否有权访问某个对象,并且不做任何其他事情(例如提供对象,进行任何更改等),则可能需要这样做。

一些方法,你可能想要探索:

public AccessControlList getObjectAcl(String bucketName, String key) 
        throws AmazonClientException, AmazonServiceException 

public BucketPolicy getBucketPolicy(GetBucketPolicyRequest getBucketPolicyRequest) 
        throws AmazonClientException, AmazonServiceException 

public AccessControlList getBucketAcl(GetBucketAclRequest getBucketAclRequest) 
        throws AmazonClientException, AmazonServiceException 

两个获得*的Acl方法返回一个AccessControlList,然后你就可以用它来探索已分配给ACL的赠款。

相关问题