Google Cloud Storageからのロードのトラブルシューティング

このトピックでは、Google Cloud Storageステージからのデータロードに関する固有の問題を解決する手順を説明します。

一般的なデータのロードに関するトラブルシューティング手順については、 バルクデータロードのトラブルシューティング をご参照ください。

このトピックの内容:

エラー:ステージエリアの使用の失敗

Google Cloud Storage(GCS)バケットからデータをロードしようとすると、次のエラーが発生する可能性があります。

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

このエラーは、 VPC サービスコントロールを使用して機密データを保護するように構成された GCP サービス境界に設定された制限違反を示しています。Snowflakeアカウント用に作成された GCS サービスアカウントにはバケットの読み取りおよび書き込み権限が付与されている場合がありますが、サービス境界のアクセスルールは GCP 組織レベルで適用され、複数のプロジェクトに影響を与える可能性があります。エラーメッセージに関連する追加の詳細を確認するには、 VPC サービスコントロールのエラーログにアクセスします。ログの violationReason 値の説明については、 GCP のドキュメントをご参照ください。

エラーを解決する最も簡単なオプションは、サービス境界から除外されているバケットからデータをロードすることです。確立されたセキュリティルールでそのオプションが許可されていない場合は、アクセスレベルポリシーにサービスアカウントを追加すると、Snowflakeアカウントの GCS サービスアカウントをサービス境界フィルターから除外できます。サービスアカウントは、 GCSとの統合を構成する手順で説明されている標準の IAM ポリシーを使用して、承認されたリソースへのアクセスを引き続き必要とすることに注意してください。

GCP 組織のアクセスポリシーには、アクセスレベルが含まれています。アクセスレベルは、Access Context ManagerとGoogle Cloud Console、gcloudコマンドラインツール、またはクラウド API を使用して作成および管理されます。次の手順は、gcloudコマンドラインツールに依存しています。

Snowflakeアカウントの GCS サービスアカウントをアクセスレベルポリシーに追加するには:

  1. Snowflakeクライアントを使用して、Snowflakeアカウント用に自動的に作成されたCloud Storageサービスアカウントの ID を取得します( DESCRIBE INTEGRATION を使用)。

    DESC STORAGE INTEGRATION <integration_name>;
    

    統合名 は、アカウントのストレージ統合の名前です。詳細については、 Google Cloud Storageの統合の構成 をご参照ください。

  2. ローカルマシンに snowflake_policy.yaml という名前のファイルを作成します。 members 属性でサービスアカウント ID を指定します。

    - members:
       - serviceAccount:<service_account>
    

    例:

    - members:
       - serviceAccount:service-account-id@project1-123456.iam.gserviceaccount.com
    
  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>
    

条件:

  • ポリシー名 は、 GCP 組織のアクセスポリシー名です。

  • アクセスレベル名 は、アクセスレベル名として選択した名前です。