我正在通过aws code build
执行android构建。生成的APK文件是通过用server side encryption (aws-kms)
施加默认我可以手动通过点击如通过取消选择ASW-KMS 以编程方式取消为aws中的文件加密s3
其给出如下弹出
这里选择None
选项如下所示从S3桶取消设置加密手动将使链接可下载。 我想以编程方式实现这个。
我已经尝试添加权限,如here所述。还用python boto3做了一些实验。但迄今为止没有取得任何成功。 在此先感谢!
我正在通过aws code build
执行android构建。生成的APK文件是通过用server side encryption (aws-kms)
施加默认我可以手动通过点击如通过取消选择ASW-KMS 以编程方式取消为aws中的文件加密s3
其给出如下弹出
这里选择None
选项如下所示从S3桶取消设置加密手动将使链接可下载。 我想以编程方式实现这个。
我已经尝试添加权限,如here所述。还用python boto3做了一些实验。但迄今为止没有取得任何成功。 在此先感谢!
好的,我得到了一个解决方法为此。在加密(服务器端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天。以下是相同的步骤:
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'})
服务器端加密设置shoild不会影响到下载的文件的能力任何方式。你试图解决的实际问题是什么? –
感谢您的回复。我基本上正在尝试使用aws工具来进行构建自动化。我对aws很陌生。我有使用webhooks从github使用基于jenkins的构建自动化的经验。现在,我想用aws来达到同样的效果。所以我创建了一个代码构建,将它连接到代码管道,我可以使用aws lambda函数或boto3客户端(我已经这样做)来触发管道。这个想法是在代码构建阶段之后连接另一个lambda函数,该函数将发送一个包含构建过程结果的邮件以及生成的apk的可下载链接。 (续) – ranjjose
目前的问题是,从aws代码构建上传到s3的工件缺省情况下是通过aws-kms进行加密的,当从s3存储桶中单击该链接时,它会给出错误信息:Requests使用AWS KMS托管密钥指定服务器端加密需要AWS签名版本4. – ranjjose