0

Google Cloud Storage (GCS)와의 인터페이스로 웹 응용 프로그램에서 작업하고 있습니다.웹 응용 프로그램에서 Google Cloud Storage에 항상 액세스하십시오. 403

저는 백엔드 서비스를 사용하여 GCS에 저장된 파일 목록과 JSON API를 사용하여 URL 목록을 검색하고이를 웹 응용 프로그램에 반환합니다. 그러나 실제로 URL 403을 통해 파일을로드 할 수는 없었습니다.이 URL은 항상 403 금지되었습니다.

장면 뒤에서 GCS 인증이 작동하는 방식과 웹 응용 프로그램에 대한 액세스 권한을 직접 부여 할 수 있는지 여부는 확실하지 않습니다. http 요청을 통해 응용 프로그램 인증 정보를 어떻게 첨부 할 수 있는지 잘 모르겠습니다. 내가 아는 것은 내가 백엔드 서비스를 통해 할 수 있다는 것이지만 단순성 때문에 그걸 가지고 돌아 다니는 것이 가능한지 궁금하다. 내가 시도한 것 중 하나는 웹 애플리케이션 도메인 (HTTP 요청의 리퍼러를 통해 전송 됨)을 해당 버킷에 대한 ACL에 추가하는 것으로 전혀 작동하지 않는다.

그리고 @Brandon이 지적한 것에 감사드립니다. GCS의 콘텐츠를 볼 수있는 사람은 누구나 애플리케이션에 액세스 할 수있는 사람에게 권한을 부여하고 내부 앱이므로 웹 애플리케이션을 처음 제공 할 때 이미 인증을 확인했습니다.

====

솔루션

내가 5 분 만료 내가보기 엔 gcloud를 사용하여 GCS와 상호 작용하는 것이 좋습니다 그 signedUrl를 사용하여 종료 (그들의 python document 정말 좋다). 철저한 답변에 다시 한 번 감사드립니다!

+0

누구의 사용 권한을 사용 하시겠습니까?애플리케이션의 자체 권한 또는 애플리케이션의 개별 사용자 (자신의 Google 계정이있는 사용자)의 권한? @Brandon 감사합니다. –

+0

. 내 응용 프로그램이므로 단순성을 위해 응용 프로그램 권한을 사용하고 싶습니다. 또한, 나는 그들이 GAE에서 호스팅되는 경우 백엔드 서비스를 가질 수도 있다는 것을 안다. appid를 사용하여 액세스를 요청한다. 하지만 실제로 프론트 엔드에만 의존하고 싶습니다. – yeelan

답변

1

웹 브라우저에 사용자의 응용 프로그램 서비스 계정 만 읽기 권한이있는 개체를 다운로드하려고합니다. 몇 가지 옵션이 있습니다.

  1. 확장 액세스 :이 객체를 공개 할 수있게 만듭니다. 이 정보가 민감한 경우 최선의 선택이 아닐 수도 있지만, 그렇지 않은 경우 가장 쉬운 해결책입니다.
  2. 앱으로 인증 할 수 있도록 사용자의 앱 자격증 명을 사용자에게 제공합니다. 이것은 정말로 나쁜 생각이며, 여기에 나열하지 않아야 할 것입니다.
  3. 사용자가 파일을 다운로드하려는 경우 앱에 파일을 요청하도록 요청한 다음 앱에서 파일을 가져 와서 사용자에게 전송하도록합니다. 이것은 클라이언트 측 코드를위한 가장 쉬운 솔루션이지만 앱이 파일 내용을 스트리밍하는 것을 담당하게합니다.
  4. 사용자가 파일을 다운로드하려면 앱에 권한을 요청하고 GCS에서 직접 데이터를 가져 오는 데 사용할 수있는 일종의 토큰을 사용하여 파일에 답하게합니다.

# 4는 원하는 것입니다. 사용자가 앱에 파일을 요청하면 앱이 수행중인 작업 (비밀번호, IP 검사, 쿠키 등)을 통해 파일에 액세스 할 수 있는지 여부를 결정합니다. 그러면 앱이 사용자의 URL로 응답합니다 GCS에서 파일을 직접 가져 오는 데 사용할 수 있습니다.

이 URL을 "서명 된 URL"이라고합니다. 앱은 자체 비공개 키를 사용하여 무기명에 의해 다운로드 될 수있는 객체와 해당 URL이 유효한 동안을 나타내는 서명을 URL에 추가합니다. procedure for signing URLs은 다소 까다 롭지만 다행히 gcloud 스토리지 라이브러리 have helper functions을 생성 할 수 있습니다.

+0

철저한 솔루션 비교에 대해 Brandon에게 감사드립니다. 나는 우리의 다른 응용 프로그램 중 하나가 정확하게 솔루션 # 4를 사용했음을 기억하지만 당시 API는 그다지 친숙하지 않았습니다. 그러나 gcloud 로의 이전이 이제는 더 간단 해 졌으면 좋겠다. – yeelan

관련 문제