2016-09-07 92 views
0

我已經在Amazon S3上用CannedChannelList作爲PublicRead上傳了幾個文件。請記住,只有該文件具有公共讀取權限,而不是整個存儲桶或文件夾。用戶將能夠使用給定的URL訪問該文件。但是這裏有一個安全問題,用戶可以操縱給定的URL來訪問相同或不同文件夾中的其他文件。 有沒有什麼方法可以讓用戶在點擊該URL時發送一些驗證密鑰,同時閱讀該文件,以及如何讓用戶知道他們必須使用哪個驗證密鑰? 我已閱讀關於IAM用戶,但是這是爲了上傳文件和所有。我只想在使用URL讀取數據時進行一些身份驗證。Amazon S3上的用戶級別權限公開閱讀URL

數據是由單個管理員用戶上傳的,但是,所有用戶都向我的服務器發送數據,並且我使用單個管理員用戶上傳所有S3上的這些數據。

這是我用於管理員用戶的策略。

if(isBucketExist(bucketName)){ 
       Statement allowPublicReadStatement = new  Statement(Statement.Effect.Allow) 
         .withPrincipals(Principal.AllUsers) 
         .withActions(S3Actions.GetObject) 
         .withResources(new S3ObjectResource(bucketName, "*")); 
Policy policy = new Policy() 
         .withStatements(allowPublicReadStatement 
                 ); 
amazonS3.setBucketPolicy(bucketName, policy.toJson()); 
      } 

這是CannedChannelList同時上傳數據

InitiateMultipartUploadRequest(bucketName, folderName).withCannedACL(CannedAccessControlList.PublicRead); 

回答

1

您是否嘗試過使用「S3:GetObject的」在IAM政策行動,然後你可以指定一個像「阿爾恩資源阿爾恩:AWS :s3 ::: examplebucket/*「或您希望用戶具有讀訪問權限的任何特定前綴。

IAM策略的一個例子是這樣的:

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "AllowListingOfS3", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
      "arn:aws:s3:::bucket-name" 
     ], 
     "Condition": { 
      "StringLike": { 
       "s3:prefix": [ 
        "folder/sub-folder/*" 
       ] 
      } 
     } 
    }, 
    { 
     "Sid": "AllowAllS3ActionsInFolder", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:GetObject" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::bucket-name/folder/sub-folder/*" 
     ] 
    } 
] 
}