0

객체 또는 버킷 자체를 공개적으로 읽을 수 없게 설정하고 App Engine App에서 Cloud Storage Bucket의 파일에 액세스하고 싶습니다. 내가 인증 (클라이언트 라이브러리, 서명 된 URL 등)을 사용하여 객체를 버킷에 액세스 할 수있는 여러 가지 옵션을 알고 있지만 복잡한 요소는 그 경로로 파일에 액세스 할 수 있기를 원한다는 것입니다. 문제의 버킷의 폴더 구조와 비슷합니다.버킷을 공개적으로 읽을 수 없도록 App Engine을 통해 Cloud Storage 객체에 액세스하기

예를 들어, 내 버킷을 공개적으로 읽을 수있게 만들면 공용 링크 인 객체를 액세스 할 수 있습니다 : https://storage.googleapis.com/MY_BUCKET/FOLDER_IN_MY_BUCKET/FILE_IN_FOLER.txt. 이 URL은 버킷의 내부 폴더 구조를 모방합니다. 그러나 버킷이 공개적으로 읽을 수없는 경우에는 유사한 URL이없는 것으로 보입니다. 내 App Engine App 서비스 계정이 필요한 버킷의 저장소 관리자로 추가되었지만 버킷 개체에 액세스하는 데 사용할 수있는 URL이 있는지 확실하지 않습니다. 개체의 mediaLink은 생성 정보가 끝에 추가되고 selfLink이 404 오류가 발생하므로 작동하지 않습니다.

URL이 필요하다는 것은 버킷에 수천 개의 개체가 포함되어 있기 때문입니다. 클라이언트 라이브러리를 사용하여 App Engine의 영구 저장 장치 종류로 다운로드하면 내 경우에 클라우드 저장소를 사용하는 목적을 상실합니다. 요청이있을 때 그들 모두를위한 서명 된 URL을 얻는 것은 시간이 많이 걸릴 것입니다. 그런 다음 어딘가에 수천 개의 서명 된 URL을 관리해야합니다.

공개 URL과 마찬가지로 예측 가능한 URL이 포함 된 클라우드 저장소 버킷을 읽을 수 있나요? 요청을 계속 인증하는 중입니까?

답변

0

당신이 언급 URL은 버킷을 만들거나 브라우저가 계정이 해당 리소스에 액세스 갖는 인증되어 지정된 공개 파일없이 액세스 할 수 있습니다 (다른 응용 프로그램을 통해 파일에 대한 액세스에 관한 https://storage.cloud.google.com/MY_BUCKET/FOLDER_IN_MY_BUCK‌​ET/FILE_IN_FOLDER

을 예를 들어 App Engine)에서 언제든지 client libraries for your preferred language을 사용할 수 있습니다. API가 단지 MY_BUCKETFOLDER_IN_MY_BUCKET/FILE_IN_FOLDER객체 매개 변수로 버킷 매개 변수를 정의함으로써 documentation에서 작동하는 방식을 테스트 할 수 있습니다. 원하는 클라이언트 라이브러리에 적용 할 때 이와 동일한 구조를 사용해야합니다.

+0

storage.googleapis.com에는 Google 쿠키가 없으므로 사용자가 브라우저를 통해 인증 할 수 없습니다. 해당 끝점을 사용할 때 OAuth (또는 서명 된 URL)를 사용해야합니다. –

+0

당신이 옳습니다, 제 잘못입니다. 나는 의미 : 'https : // storage.cloud.google.com/MY_BUCKET/FOLDER_IN_MY_BUCKET/FILE_IN_FOLDER'. 내 대답을 편집하게하십시오. 답장을 보내 주셔서 감사합니다! – dsesto

+1

정상적으로 작동하지만, 일반적으로 사용자는 ACL에 직접 최종 사용자를 배치해야하므로 (보안상의 현명한 방법은 아니며 최종 사용자가 Google 계정을 갖고 있지 않은 경우에는 불가능합니다.) 그 종말점은 또한 ..미묘하게 사용하기가 어렵습니다 (최종 사용자가 여러 계정에 로그인하는 경우 어떤 계정을 사용해야하는지 지정해야합니다. 외부 사용자에게는 불가능하지는 않습니다.). –

2

응답에서 수천 개의 서명 된 URL을 판매하는 대신 앱 엔진 앱에서 '리디렉션'엔드 포인트를 만들 수 있습니다.

사용자가 'GET'을 수행합니다 www.myapp.com/fetch/<bucket>/<object>

이 엔드 포인트를 처리하는 앱 엔진 코드는 사용자에게 액세스 권한이 있는지 확인하고 URL에서 버켓/객체를 가져온 다음 리소스에 대한 액세스를 허용하는 서명 된 URL을 생성합니다 해당 URL로 302 리디렉션을 반환합니다.

+0

이것은 좋은 생각이며, 이것이 아마도 가장 좋은 방향이라고 생각합니다. 그러나 이것은 많은 서명 된 URL을 만들어야합니다. 이 옵션 (리디렉션)은 Google CDN 또는 CloudFront를 사용하는 것과 어떻게 비교 될까요? – quicklikerabbit

+0

에지 캐싱으로 인해 CDN이 더 빨라졌지만 AFAIK Google CDN은 (현재) 어떤 형식의 서명 된 URL도 지원하지 않으므로 CDN 서비스를 통해 프록시를 통해 효과적으로 양동이를 공개하게됩니다. –