Google Cloud Storage에서 로드 관련 문제 해결하기

이 항목에서는 Google Cloud Storage 스테이지에서 데이터를 로드하는 것과 관련된 문제를 해결하기 위한 지침을 제공합니다.

일반 데이터 로딩 문제 해결 단계에 대해서는 대량 데이터 로드 문제 해결하기 를 참조하십시오.

이 항목의 내용:

오류: 스테이지 영역 사용 실패

Google Cloud Storage(GCS) 버킷에서 데이터를 로드할 때 다음과 같은 오류가 발생할 수 있습니다.

Failure using stage area. Cause: [Request violates VPC Service Controls. (Status Code: 403)]
Copy

이 오류는 VPC 서비스 제어를 사용하여 민감한 데이터를 보호하도록 구성된 GCP 서비스 경계에 설정된 제한을 위반했음을 나타냅니다. Snowflake 계정에 대해 생성된 GCP 서비스 계정에 버킷에 대한 읽기 및 쓰기 권한이 부여되었을 수 있지만, 서비스 경계에 대한 액세스 규칙은 GCS 조직 수준에서 적용되어 여러 프로젝트에 영향을 미칠 수 있습니다. 오류 메시지와 관련된 추가적인 세부 정보를 살펴보려면 VPC 서비스 제어 오류 로그에 액세스하십시오. 로그에서 violationReason 값에 대한 설명은 GCP 설명서를 참조하십시오.

가장 간단한 오류 옵션은 서비스 경계에서 제외된 버킷에서 데이터를 로드하는 것입니다. 설정된 보안 규칙에서 해당 옵션을 허용하지 않는 경우 액세스 수준 정책에 서비스 계정을 추가하여 Snowflake 계정에 대한 GCS 계정 서비스 계정을 서비스 경계 필터에서 제외할 수 있습니다. 이러한 경우에도 서비스 계정은 GCS 통합 구성 지침에 설명된 표준 IAM 정책을 사용하여 승인된 리소스에 액세스해야 합니다.

GCP 조직에 대한 액세스 정책에는 액세스 레벨이 포함되어 있습니다. 액세스 수준은 액세스 컨텍스트 관리자와 Google Cloud Console, gcloud 명령줄 도구 또는 클라우드 API 중 하나를 사용하여 생성 및 관리됩니다. 다음 지침에서는 gcloud 명령줄 도구를 사용하는 경우에 대해서만 설명합니다.

Snowflake 계정에 대한 GCS 서비스 계정을 액세스 수준 정책에 추가하려면:

  1. Snowflake 클라이언트를 사용하여 Snowflake 계정에 대해 자동으로 생성된 클라우드 저장소 서비스 계정에 대한 ID 검색(DESCRIBE INTEGRATION 사용):

    DESC STORAGE INTEGRATION <integration_name>;
    
    Copy

    여기서 integration_name 은 계정의 저장소 통합 이름입니다. 자세한 내용은 Google Cloud Storage용 통합 구성하기 섹션을 참조하십시오.

  2. 로컬 시스템에서 이름이 snowflake_policy.yaml 인 파일을 만듭니다. 서비스 계정 ID를 members 속성으로 지정합니다.

    - members:
       - serviceAccount:<service_account>
    
    Copy

    예:

    - members:
       - serviceAccount:service-account-id@project1-123456.iam.gserviceaccount.com
    
    Copy
  3. gcloud 명령줄 도구를 사용하여 다음 명령어를 실행하여 액세스 수준을 생성합니다.

    참고

    이 명령을 위해서는 VCP 서비스 제어를 변경하기 위한 필수 권한이 있는 GCP 역할이 필요합니다.

    gcloud access-context-manager levels create <access_level_name> \
       --title snowflake \
       --basic-level-spec snowflake_policy.yaml \
       --combine-function=OR \
       --policy=<policy_name>
    
    Copy

여기서:

  • policy_name 은 GCP 유기적 구성의 액세스 정책 이름입니다.

  • access_level_name 은 액세스 수준 이름으로 선택한 이름입니다.