1
0

More than 1 year has passed since last update.

Unity Catalogのストレージ資格情報と外部ロケーションを作成してみる

Posted at

こちらのマニュアルに沿って、実際にストレージ資格情報(storage credential)と外部ロケーション(external location)を作成して使用してみます。

S3バケットの作成

外部ロケーションを経由してアクセスするS3バケットを作成します。ここではtaka-external-location-bucketというバケット名にしています。

Screen Shot 2023-01-02 at 13.06.53.png

ストレージ認証情報の作成

AWSマネジメントコンソールでの作業

  1. クロスアカウントIAMロールを作成します。
    Screen Shot 2023-01-02 at 13.08.13.png
  2. ここではuc-external-locationというロールを作成します。一度デフォルトの設定で作成します。
  3. ロール一覧から作成したIAMロールにアクセスし、信頼関係ステップ1: IAMロールの作成、更新のJSONポリシーを貼り付けます。
    Screen Shot 2023-01-02 at 13.12.17.png
  4. IAMポリシーを作成します。上のステップで作成したS3バケットにここで作成したIAMロールを仮定することを許可します。
    Screen Shot 2023-01-02 at 13.17.04.png
    Screen Shot 2023-01-02 at 13.18.27.png
  5. 上で作成したIAMロールにポリシーをアタッチします。
    Screen Shot 2023-01-02 at 13.20.53.png
    Screen Shot 2023-01-02 at 13.21.21.png

上の画面でARNをコピーしておきます。

Databricksでの作業

  1. Databricksワークスペースにログインします。
  2. サイドメニューのデータをクリックします。
  3. ストレージ資格情報をクリックします。
  4. 資格情報を作成をクリックします。
    Screen Shot 2023-01-02 at 13.26.57.png
  5. 上でコピーしたARNを指定して資格情報を作成します。
    Screen Shot 2023-01-02 at 13.31.16.png
    Screen Shot 2023-01-02 at 13.32.10.png

外部ロケーションの作成

  1. Databricksワークスペースにログインします。
  2. サイドメニューのデータをクリックします。
  3. 外部の格納場所をクリックします。
  4. 格納場所を作成をクリックします。
    Screen Shot 2023-01-02 at 13.34.54.png
  5. 上で作成したS3バケットと資格情報と指定して外部ロケーションを作成します。
    Screen Shot 2023-01-02 at 13.35.45.png
    Screen Shot 2023-01-02 at 13.36.25.png

これでストレージ資格情報と外部ロケーションが作成できました。

ストレージ資格情報や外部ロケーションへのアクセス

  1. まずは、ストレージ資格情報を確認してみます。Unity Catalogにアクセスできるクラスターを起動して、ノートブックをアタッチします。
    Screen Shot 2023-01-02 at 13.41.36.png

  2. SHOW STORAGE CREDENTIALSで資格情報を一覧します。
    Screen Shot 2023-01-02 at 13.42.44.png

  3. SHOW EXTERNAL LOCATIONSで外部ロケーションを一覧することもできます。
    Screen Shot 2023-01-02 at 13.44.04.png

  4. DESCRIBE LOCATIONで詳細を確認します。ロケーション名にハイフンが入っているのでバッククオートで囲みます。
    Screen Shot 2023-01-02 at 13.45.22.png

  5. 外部ロケーションを使って外部テーブルを作成します。今回は資格情報やロケーションの作成者自身で作業しているので明示的に権限は付与していません。

    SQL
    CREATE TABLE main.default.student_external 
    (id INT, name STRING, age INT) 
    LOCATION 's3://taka-external-location-bucket/external-tables/student_external';
    
    SQL
    INSERT INTO main.default.student_external VALUES
    (1, 'Amy Smith', 16);
    
  6. テーブルが作成されました。
    Screen Shot 2023-01-02 at 14.09.43.png
    Screen Shot 2023-01-02 at 14.12.07.png

  7. S3バケット上でもファイルを確認することができます。
    Screen Shot 2023-01-02 at 14.12.34.png

まとめ

一旦今回はここまで。私の理解では、これまではインスタンスプロファイルを用いてS3へのアクセス設定をクラスターに持たせていたのですが、それを分離して設定自体をアクセスコントロールできるようにしたのが、ストレージ資格情報と外部ロケーションです。

(適切にS3に設定がされていれば)ストレージ資格情報(IAMロール)だけでもアクセス制御は可能なのですが、その場合、それを使う側は目の前にあるIAMロールがどのS3パスにアクセスできるのかを事前に調べないといけません。なので、S3パスの情報を外部ロケーションとして定義することで、ユーザーはどのS3パスに対してアクセスできるのかを知ることができるようになります。管理の柔軟性や再利用可能性とアクセスコントロールのバランスをとった実装だと思います。まだ使いこなしていないのであれですが。
Screen Shot 2023-01-02 at 14.17.38.png

次回はもう少しディープダイブしていきます。

Databricks 無料トライアル

Databricks 無料トライアル

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