1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snowflake Azure BLOB Storageデータロード:①ストレージ統合

Last updated at Posted at 2024-03-14

目次に戻る

■本記事の目的

Snowflakeのデータロードを理解する。
ユーザー管理のAzureBLOBStorageからSnowflakeにデータロードを行います。
コンテナーおよび取込用のテストデータ(CSV形式)は、事前に作成済みとします。
※階層型名前空間を有効にしないのでコンテナー配下のフォルダはありません。

■概要

ストレージ統合を作成していきます。
ストレージ統合とは、SnowflakeとBLOBStorageの間のセキュアアクセスを行うための
認証情報とストレージの所在の定義とご理解いただけると良いと思います。
また、Snowflake,ユーザー管理のAzureの双方で、セキュリティに関する設定を行っていきます。

■前提

SnowflakeはAzure(tokyoリージョン)にホストします。トライアル環境です。

■前提の備忘

実は、一度SnowflakeをAWSホストの環境でも検証したのですが、外部ステージの接続確認の段階で"パブリックアクセス"をBLOBのネットワークで許可する必要があることが判明しました。Snowflake(AWS)とAzureストレージの組み合わせだと、ストレージ側でネットワークの制限(Snowflake(AWS)のみの制限など)を行うことができないようです。
サービスプリンシパルのみ許可することでも、セキュリティを担保できるとは思いますが、やはり実務的な環境だとネットワーク周りのセキュリティを確保することも必要になります。
あまりセキュアではない検証は今後の顧客の環境構築でも良くないと考え、今回はやり直し、Azureでサービスプロバイダを揃えています。

このことから、Snowflakeをホストしているクラウドプロバイダとストレージサービスのクラウドプロバイダが異なるケースについては、セキュリティ要件(ネットワークなど)を含め必ず検証をいただくことをお願いいたします。

■AzureのテナントIDとBLOBStorageのロケーションを取得する。

ユーザー管理のAzureでの作業です。
 
Snowflakeからデータロードに使用するAzureのテナントIDとBLOBStorageのロケーションを取得します。
 
AzureのテナントIDを取得する。
AzurePortal > MicrosoftEntraID > プロパティ > テナントID
image.png
  ↓↓↓↓
image.png

 
BLOBStorageのロケーションを取得する。
ストレージアカウント > コンテナー > プロパティ
※一旦URLを取得してください。
image.png
 
取得したURLをストレージ統合用に手動で変換します。

https://<ストレージアカウント>.blob.core.windows.net/<コンテナー>
↓↓↓↓ httpsをazureに変換します。     末尾に"/"を追加します。↓↓↓↓
azure://<ストレージアカウント>.blob.core.windows.net/<コンテナー>/

 

■ストレージ統合を作成する。

Snowflakeアカウントに戻ります。
 
AzureBlobStorageの場合は、以下の構文でストレージ統合を作成します。
デフォルトでは、アカウント管理者が作成できます。
別のロールに作成させる場合は、ストレージ統合作成権を、別途割り当ててください。

use role ACCOUNTADMIN;

create storage integration <ストレージ統合>
type=EXTERNAL_STAGE --外部ステージ
storage_provider='AZURE' --ストレージのクラウドプロバイダ名
enabled=TRUE --有効化
azure_tenant_id='<AzureテナントID>'
storage_allowed_locations=('変換後のロケーションURL',<追加のURL>・・・)
;

例)
use role ACCOUNTADMIN;
create storage integration TEST_INTEG_AZ
type=EXTERNAL_STAGE --外部ステージ
storage_provider='AZURE' --ストレージのクラウドプロバイダ名
enabled=TRUE --有効化
azure_tenant_id='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
storage_allowed_locations=('azure://storage_account.blob.core.windows.net/container/')
;

 

■ストレージ統合使用権を、外部ステージ作成者のロールに付与する。

後ほど、外部ステージを作成する際、ストレージ統合使用権がないと
外部ステージを作成できないため権限を付与します。

use role ACCOUNTADMIN;
grant usage on integration <ストレージ統合> to role <ロール>;

 

■ストレージ統合の情報を取得する。

作成後、以下の構文でストレージ統合の情報を照会します。

describe integration <ストレージ統合>;

照会後の出力から赤枠内のSnowflakeアカウントの
AZURE_CONSENT_URLおよびAZURE_MULTI_TENANT_APP_NAMEの値を取得します。
image.png

AZURE_CONSENT_URL:Microsoftのアクセス許可リクエストページへの URL。
AZURE_MULTI_TENANT_APP_NAME:アカウント用に作成されたSnowflakeクライアントアプリケーション
 

■AZURE_CONSENT_URLへのアクセスからサービスプリンシパル(アプリ)の作成

BLOBへのセキュアアクセスを行うためのサービスプリンシパル(アプリ)をAzure上に作成するためにURLをクリックします。
 
アクセスすると、以下のように権限なしとのことなので、
サービスプリンシパル作成に同意できませんでした。
image.png
 
Azureの管理者に、問合わせて
「Application administrator」 などのアプリケーション作成が許可されているロールを許可してもらう必要があるようです。
以下のように許可してもらいました。
image.png
 
許可後、同意画面が出てきました。>承諾します。
image.png
 

MicrosoftEntraID>エンタープライズアプリケーション>一覧
AZURE_MULTI_TENANT_APP_NAMEの"_"より前の文字列の名義で、作成されたことを確認できます。
(承諾後、作成に時間がかかることもあるようです。)
image.png

 

■ストレージアカウントからエンタープライズアプリケーションへのアクセス許可

ストレージアカウント>アクセス制御 (IAM)>追加>ロールの割り当ての追加
image.png
 
ロール>BLOBで検索>以下、用途に応じて、いずれかを選択する。>次へ
読み取り専用:Storage Blob Data Reader(ストレージ BLOB データ閲覧者)を選択する。
読み取り、書き込み、削除:Storage Blob Data Contributor (ストレージ BLOB データ共同作成者)を選択する。
image.png

メンバー>ユーザー・グループまたはサービスプリンシパル>メンバーを選択する。
image.png
 
メンバー選択は、AZURE_MULTI_TENANT_APP_NAMEの"_"より前の名義で検索する。>
チェックを入れる>選択
image.png

レビューと割り当てをクリックする。
image.png

再度、レビューと割り当てをクリックする。
image.png

アクセス制御(IAM)で確認できます。
image.png

正常に割り当てが行われたら、ストレージ統合作成は以上です。

■あとがき

次回は、Azureストレージのネットワーク構成を記事にします。
少し内容が複雑なので、ストレージ統合と切り分けを行います。

■次の記事

Snowflake Azure BLOB Storageデータロード:②ストレージネットワーク構成

目次に戻る

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?