Google Cloud Storage에서 로드 문제 해결

Google Cloud Storage에서 로드 문제 해결

이 주제는 Google Cloud Storage 스테이지에서 데이터를 로드할 때 발생하는 문제를 해결하는 지침을 제공해요.

일반적인 데이터 로드 문제 해결 단계는 대량 데이터 로드 문제 해결을 참고해요.

출처: Documentation

본문

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

Google Cloud Storage(GCS) 버킷에서 데이터를 로드하려고 할 때 다음 오류가 발생할 수 있어요.

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

이 오류는 VPC Service Controls로 구성된 GCP 서비스 경계(perimeter)에 대해 설정된 제한을 위반했음을 나타내요. 민감한 데이터를 보호하기 위해 VPC Service Controls가 사용돼요. Snowflake 계정을 위해 만들어진 GCS 서비스 계정에 버킷 읽기/쓰기 권한이 부여되었을 수 있지만, 서비스 경계의 액세스 규칙은 여러 프로젝트에 영향을 줄 수 있는 GCP 조직 수준에서 적용돼요. 오류 메시지와 관련된 추가 세부 정보를 검토하려면 VPC Service Control 오류 로그에 접근해요. 로그의 violationReason 값에 대한 설명은 GCP 문서를 참고해요.

오류를 해결하는 가장 간단한 옵션은 서비스 경계에서 제외된 버킷에서 데이터를 로드하는 것이에요. 확립된 보안 규칙으로 그 옵션이 허용되지 않는다면, 액세스 수준 정책에 서비스 계정을 추가해 Snowflake 계정용 GCS 서비스 계정을 서비스 경계 필터에서 제외할 수 있어요. 서비스 계정은 GCS와 통합을 구성하는 지침에 설명된 표준 IAM 정책을 사용해 승인된 리소스에 여전히 접근해야 한다는 점에 주의해요.

GCP 조직의 액세스 정책에는 액세스 수준이 포함돼요. 액세스 수준은 Access Context Manager와 Google Cloud Console, gcloud 명령줄 도구 또는 Cloud API를 사용해 만들고 관리해요. 다음 지침은 gcloud 명령줄 도구에 의존해요.

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

  1. Snowflake 클라이언트를 사용해 Snowflake 계정을 위해 자동으로 만들어진 Cloud Storage 서비스 계정의 ID를 (DESCRIBE INTEGRATION을 사용해) 검색해요.
DESC STORAGE INTEGRATION <integration_name>;

여기서 *integration_name*은 계정의 스토리지 통합 이름이에요. 자세한 내용은 Google Cloud Storage용 통합 구성을 참고해요.

  1. 로컬 머신에 snowflake_policy.yaml이라는 파일을 만들어요. members 특성에 서비스 계정 ID를 지정해요.
- members:
- serviceAccount:<service_account>

예를 들어:

- members:
- serviceAccount:[email protected]
  1. gcloud 명령줄 도구를 사용해 다음 명령을 실행해 액세스 수준을 만들어요.

참고 — 이 명령은 VPC Service Control을 변경할 수 있는 필요한 권한이 있는 GCP 역할이 필요해요.

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

여기서:

  • *policy_name* — GCP 조직의 액세스 정책 이름.
  • *access_level_name* — 액세스 수준 이름으로 선택한 이름.

더 알아보기