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?

Snowpark Container Servicesの呼び出し元権限ではまったこと

Posted at

概要

Snowpark Container Services(以降 SPCS)を使って「呼び出し元権限」で処理を実行する際、Cortex の COMPLETE 関数を併用しようとするとハマる点があったため、その体験を共有します。


1. 呼び出し元権限下で Cortex COMPLETE を使いたくてハマった点

Snowflake CortexでLLM周りの機能を使いたい場合は、snowflake.cortex_userというデータベースロールを付与する必要があります。Cortex AISQLで必要な権限
呼び出し元権限での実行時にはアクセス権限をサービスのオーナーロールにgrant callerする必要がありますが、データベースロールやアクセスロールを直接付与することができず、模索した結果以下のように権限付与することで解決しました。
SPCSでの呼び出し元権限

GRANT INHERITED CALLER USAGE ON ALL SCHEMAS IN DATABASE snowflake TO ROLE your_service_role;
GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN DATABASE snowflake TO ROLE your_service_role;
GRANT CALLER USAGE ON DATABASE snowflake TO ROLE your_service_role;

注意点として、Snowflakeデータベース内の全関数のcaller grant権限を付与しているので、最小権限にならない可能性があります。

以下補足情報を書いていくので、ご参考にしてください。

2. 呼び出し元権限(Caller’s Rights)での実行

SiSやSPCSは原則作成者の権限で動きますが、権限制御をしている状況下では呼び出した人の権限で動かしたいということがあると思います。
そんな時に使えるのが、呼び出し元権限での実行です。
参考チュートリアル

2.1 アクセス許可

以下の流れでアクセスがチェックされます。

  • 呼び出し元のロールが対象オブジェクトに対して権限をもっているか
  • サービスのオーナーが対象オブジェクトに対するcaller grant権限をもっているか

上記アクセス許可の流れからわかるように、呼び出し元権限による実行では2回権限チェックがあります。
caller grant権限(呼び出し元権限)とは、呼び出し元の権限で実行されたクエリのうち該当サービスで実行してよい権限だけを事前に定義しておくものと考えられます。

2.2 実装の流れ

  • 呼び出し元ユーザに適切な権限を付与する
  • サービスのownership権限を持っているロールにgrant caller文で対象オブジェクトへの必要な権限を付与する
    ※caller grantが付与されてもサービスのオーナーロールが直接対象オブジェクトにアクセスすることはできません。適切な権限を持った呼び出し元ロールが該当サービスを使用することで対象オブジェクトへのアクセスが可能となります。
  • specファイルにて以下のようにexecuteAsCallerをTrueに設定する
spec:
      containers:
      - name: main
        image: /tutorial_db/data_schema/tutorial_repository/query_service:latest
        env:
          SERVER_PORT: 8000
        readinessProbe:
          port: 8000
          path: /healthcheck
      endpoints:
      - name: execute
        port: 8000
        public: true
    capabilities:
      securityContext:
        executeAsCaller: true
    serviceRoles:
    - name: ui_usage
      endpoints:
      - execute

おわりに

この記事がどなたかの参考になれば幸いです。

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?