2017-05-28 45 views
5

Wykonuję kompilację z Androidem przez aws code build. APK Pliki generowane są domyślnie stosowane z server side encryption (aws-kms) mogę rozbroić szyfrowania ręcznie, klikając jak pokazano poniżej z wiadra s3 przez odznaczania ASW-KMS  Programowo wyłączone szyfrowanie pliku w aws s3

co daje następujące okienko

Tutaj wybieranie None opcję ręcznie spowoduje link do pobrania. Chcę osiągnąć to programowo.

Próbowałem już dodawać uprawnienia, o których wspomniano: here. Zrobiłem też eksperyment trochę z pytonem boto3. Jednak dotychczas nie udało się osiągnąć żadnego sukcesu. Z góry dziękuję!

+1

ustawienia szyfrowania po stronie serwera nie shoild wpływać na zdolność do pobrania pliku w tak czy inaczej. Jaki jest faktyczny problem, który próbujesz rozwiązać? –

+0

Dzięki za odpowiedź. Zasadniczo próbuję zrobić automatyzację kompilacji za pomocą narzędzi aws. Jestem całkiem nowy w aws. Mam doświadczenie w korzystaniu z automatyzacji budowania w oparciu o jenkins z github za pomocą webhooków. Teraz chcę osiągnąć to samo, używając aws. Stworzyłem więc kompilację kodu podłączoną do potoku kodu Mogę albo uruchomić potok za pomocą funkcji aws lambda, albo z klienta boto3 (to już zrobiłem). Pomysł polega na połączeniu kolejnej funkcji lambda po etapie budowania kodu, która wyśle ​​pocztę z wynikiem procesu kompilacji wraz z linkiem do pobrania wygenerowanego pliku APK. (ciąg dalszy) – ranjjose

+1

Obecny problem polega na tym, że artefakt załadowany do s3 z kodu budującego kod aws jest domyślnie szyfrowany za pomocą aws-km, a kliknięcie tego linku z wiadra s3 powoduje błąd z komunikatem 'Żądania określanie szyfrowania po stronie serwera za pomocą kluczy zarządzanych AWS KMS wymaga podpisu AWS w wersji 4. ' – ranjjose

Odpowiedz

1

OK, otrzymałem do tego obejście . Po utworzeniu encypowanego artefaktu po stronie serwera (aws-kms) i przesłaniu go do s3 (w ramach budowania kodu aws), utwórz kopię pliku z numerem 'ACL':'public-read'. Są następujące kroki:

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') część jest trick, aby uzyskać dostęp do zaszyfrowanego pliku.

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

Od S3 otrzymasz adres URL do pobrania.

Można również uzyskać link do pobrania bezpośrednio z zaszyfrowanego elementu S3 bez kopiowania go do innego zasobnika. Problem polega jednak na tym, że szyfrowanie s3v4 ma maksymalnie 7 dni. Więc link działa tylko przy max 7 days.The następującym krokiem jest taka sama:

  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'})