CloudStorage 서명된 URL에 만료 날짜를 설정했지만 며칠 후에 403에서 액세스할 수 없습니다.

TL;DR



서명된 URL을 생성하는 서비스 계정의 키를 명시적으로 설정합니다.

배경



CloudStorage에 업로드한 동영상에서 미리보기 이미지를 생성하고 싶습니다.
CloudFunctions에서 업로드 트리거를 사용하여 생성하는 프로세스를 구현했습니다.

다음과 같은 느낌의 코드입니다.
htps : // 기주 b. 코 m/후우레바세/훈 c치온 s-사 mpぇs/bぉb/마s테 r/게네라테-mb 없는 l/푼c치온 s/그리고 x. js

생성된 미리보기 이미지는 CloudStorage에 업로드하고,
서명 된 URL을 생성하여 데이터베이스에 저장하는 것과 같은 것을 구현했습니다.
며칠 후에 생성한 URL이 403에서 연주되게 되었습니다.

제대로 샘플과 같이 유효기간을 설정하고 있었는데입니다.
htps : // 기주 b. 코 m / 푹신 헛소리 / 훙 c 치온 s mp ぇ s / b ぉ b / 8f599 4c56 에 f849136982d19f4d9d5348d3dc58 x. js#L84-L92
  // Get the Signed URLs for the thumbnail and original image.
  const config = {
    action: 'read',
    expires: '03-01-2500',
  };
  const results = await Promise.all([
    thumbFile.getSignedUrl(config),
    file.getSignedUrl(config),
  ]);

원인



Issue 에 비슷한 현상이 있는 사람이 있었습니다.
이 댓글에 따르면,

서비스 계정의 키는 일정 시간(5~7일)이 경과하면 삭제됩니다.

라는 것입니다.
CloudFunctions에는 임시 서비스 계정이 있으므로,
CloudFunctions에서 서명한 URL은 '일정 시간(5~7일)'이 서 버리면 일치하지 않는다는 것이었습니다.
유효 기한이 짧아서 좋으면 아무런 문제가 없는 것이라고 생각합니다만,
1일 이상으로 하는 경우는 보험도 하지 않고 별도 서비스 어카운트를 명시적으로 설정해 줄 필요가 있을 것 같습니다.

대응



이 댓글 입니다.

설정 절차



서비스 계정 키 만들기


  • GoogleCloudConsole에서 IAMと管理를 엽니다.
  • 왼쪽 메뉴에서 サービスアカウント를 엽니다.
  • 서명을 위한 서비스 계정을 만듭니다.
  • 입력이 끝나면 작성을 눌러
  • 마법사를 진행해 가면 키를 작성할 수 있는 화면이 되므로 여기서 json 형식으로 생성해 완료를 눌러

  • IMA 추가


  • GoogleCloudConsole에서 IAMと管理를 엽니다.
  • 왼쪽 메뉴에서 IAM를 엽니다.
  • 방금 추가 한 서비스 계정의 IAM 추가
  • 다음 역할 설정
  • 스토리지 관리자 역할을 추가하여 Storage 작업을 수행할 수 있도록 합니다.

  • 서비스 계정 토큰 작성자 역할을 추가하여 서명된 URL을 생성할 수 있도록 합니다.



  • 생성된 키를 Functions 환경 변수에 정의


    // jsonにあるprivate_key
    firebase functions:config:set service_account.private_key=xxxxxxxx
    
    // jsonにあるclient_email
    firebase functions:config:set service_account.client_email=xxxxxxxx
    
    // 設定されているか確認
    firebase functions:config:get
    

    Functions의 Storage 인스턴스 생성 옵션 설정


    // 環境変数を取得
    const credentials = {
      client_email: functions.config().service_account.client_email,
      private_key: functions.config().service_account.private_key
    }
    
    // キーを設定してインスタンス生成
    const gcs = new Storage({ credentials: credentials });
    
    // 以降任意の処理
    

    결과



    이 문장이 갱신되지 않고 붙어 있다는 것은 분명 해결할 수 있었다는 것일 것이다...

    참고



    서비스 계정 키 만들기
    h tps : // c ぉ d. 오, ぇ. 코 m/아 m/도 cs/c 레아친 g-마나긴 g-세 r hl = 그럼

    Issue
    htps : // 기주 b. 코 m / 오오 g ぇ 아피 s / 그래서 js-s 어깨 / 이스에 s / 244
    htps : // 기주 b. 코 m / 오 g ぇ 아피 s / 그래서 js-s 가시 / 이스에 s / 244 # 이스에 코멘 t-403601209

    GCP 측 설정
    htps : // 이 m / 가시 l / ms / 665df7b1d806577b32

    좋은 웹페이지 즐겨찾기