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:
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'))
url = s3_client.generate_presigned_url(ClientMethod='get_object', Params={'Bucket':'SOURCE BUCKET', 'Key':'test/app-debug.apk'})
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ć? –
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
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