2016-02-29 40 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的贈款。

相關問題