2017-05-15 4 views
1

내가 원하는 것은 파일 (ex.image 또는 pdf)을 볼 수있는 링크를 생성하는 것입니다. URL (https://[bucket].s3.amazonaws.com/img_name.jpg)로 항목에 액세스 할 수 없으므로 공개가 아닌 비공개로 생각하십니까? (나는 양동이의 소유자는 아니지만 그는 나에게 access_key와 secret_key를주었습니다.)boto3를 사용하여 s3에서 url로 이미지에 액세스하는 방법?

지금은이 코드로 파일을 다운로드 할 수 있습니다.

s3.Bucket('mybucket').download_file('upload/nocturnes.png', 'dropzone/static/pdf/download_nocturnes.png') 

s3의 이미지에 액세스 할 수 있도록 HTML에 저장할 수 있도록 액세스 및 비밀 키를 사용하여 볼 수 있습니까? 도와 줄 수있는 사람들에게 감사드립니다!

+0

파일, 돈을 검색하는 많은 양의 트래픽이있는 경우 이 직접 파일 검색을 수행하지 마십시오. – mootmoot

+0

@mootmoot 왜? 검색은 어떻게해야합니까? –

+0

CDN을 사용하는 연구 옵션. AWS는 클라우드 프론트를 사용하지 않는 AWS에서 데이터를 전송할 때 $ 0.09/GB를 청구하기 때문에. – mootmoot

답변

4

generate_presigned_url 기능을 사용하여 사전 서명 된 URL을 사용하여이를 수행 할 수 있습니다. 사전 서명 된 URL에는 만료일이 있어야한다는 점이주의해야합니다. 허용 된 최대 기간에 대한 문서를 찾을 수 없습니다. 자격 증명을 추가 서명 부분을 싶지 않아 따라서 공공 개체에 대한 generate_presigned_url을 사용하려는 사람들에게

url = s3.generate_presigned_url('get_object', 
           Params={ 
            'Bucket': 'mybucket', 
            'Key': 'upload/nocturnes.png', 
           },         
           ExpiresIn=3600) 
print url 
+0

고마워,이게 내가 찾고 있었던거야. 마침내 s3의 이미지를 내 사이트에 올릴 수 있습니다. 하지만 새로운 문제가 있습니다. js 라이브러리 (pdf.js)를 사용하여 아마존에서 내 사이트로 pdf 파일을 볼 수 있습니다. 그러나 그것은 "교차 원산지 요청 차단 : 동일한 원산지 정책으로 원격 리소스를 읽지 못하도록합니다 ....."라고 말하면서 또 다른 질문입니다. 다시 한번 감사드립니다. –

+1

@jordanm 궁금한 점이 있으시면 모든 AWS 지역에서 작동하는 최대 시간은 604800 초 (7 일)입니다. 이전 지역은 URL이 서명 버전 2로 서명되었지만 어디서나 작동하는 값인 7 일인 경우 2038 년 이후 만료를 지원하는 것으로 보입니다. URL을 서명 한 액세스 키 ID가 사용 중지/삭제 된 경우 해당 키로 서명 된 모든 URL도 사용할 수 없게되며 액세스 키 순환이 가장 좋은 방법이므로 서명 된 URL은 키 순환 정책에서 허용하는 한 마지막으로 사용됩니다. –

0

가, 내가 찾은 최고의 솔루션이 여전히 generate_presigned_url을 사용하는 것입니다 예를 들면 : botocore.UNSIGNED으로 설정해야합니다.

다음은 서명하지 않은 공개 링크를 반환합니다.

config.signature_version = botocore.UNSIGNED 
boto3.client('s3', config=config).generate_presigned_url('get_object', ExpiresIn=0, Params={'Bucket': bucket, 'Key': key}) 

boto3 저장소에 관련 논의

은 다음과 같습니다