2017-05-28 38 views
5

我正在通過aws code build執行android構建。生成的APK文件是通過用server side encryption (aws-kms)施加默認我可以手動通過點擊如通過取消選擇ASW-KMS  以編程方式取消爲aws中的文件加密s3

其給出如下彈出

這裏選擇None選項如下所示從S3桶取消設置加密手動將使鏈接可下載。 我想以編程方式實現這個

我已經嘗試添加權限,如here所述。還用python boto3做了一些實驗。但迄今爲止沒有取得任何成功。 在此先感謝!

+1

服務器端加密設置shoild不會影響到下載的文件的能力任何方式。你試圖解決的實際問題是什麼? –

+0

感謝您的回覆。我基本上正在嘗試使用aws工具來進行構建自動化。我對aws很陌生。我有使用webhooks從github使用基於jenkins的構建自動化的經驗。現在,我想用aws來達到同樣的效果。所以我創建了一個代碼構建,將它連接到代碼管道,我可以使用aws lambda函數或boto3客戶端(我已經這樣做)來觸發管道。這個想法是在代碼構建階段之後連接另一個lambda函數,該函數將發送一個包含構建過程結果的郵件以及生成的apk的可下載鏈接。 (續) – ranjjose

+1

目前的問題是,從aws代碼構建上傳到s3的工件缺省情況下是通過aws-kms進行加密的,當從s3存儲桶中單擊該鏈接時,它會給出錯誤信息:Requests使用AWS KMS託管密鑰指定服務器端加密需要AWS簽名版本4. – ranjjose

回答

1

好的,我得到了一個解決方法爲此。在加密(服務器端aws-kms)工件創建並上傳到s3(作爲aws代碼生成的一部分)後,使用'ACL':'public-read'創建該文件的副本。以下是具體步驟:

s3 = boto3.resource('s3',aws_access_key_id='<YOUR ACCESS KEY>', aws_secret_access_key='<YOUR SECRET ACCESS KEY>', region_name = 'ap-southeast-1', config=Config(signature_version='s3v4')) 

config=Config(signature_version='s3v4')部分是招可以訪問加密文件。

copy_source = {'Bucket': 'SOURCE BUCKET','Key':'test/app-debug.apk'} 
s3.meta.client.copy(copy_source, 'DESTINATION BUCKET', 'app-debug.apk', {'ACL':'public-read'}) 

從S3開始,您將獲得一個可下載的URL。

或者,您可以直接從加密的S3項目獲得可下載鏈接,而無需將其複製到其他存儲桶。但是,問題是s3v4加密帶有7天的最大期限。所以鏈接的作品在最大僅爲7天。以下是相同的步驟:

  1. s3_client = boto3.client('s3',aws_access_key_id='<YOUR ACCESS KEY>', aws_secret_access_key='<YOUR SECRET KEY>', region_name='ap-southeast-1', config=Config(signature_version='s3v4'))
  2. url = s3_client.generate_presigned_url(ClientMethod='get_object', Params={'Bucket':'SOURCE BUCKET', 'Key':'test/app-debug.apk'})
相關問題