🔒

dbt CloudからOAuth認証でSnowflakeへ接続する

2024/01/25に公開

はじめに

私が所属しているライフイズテックのデータ基盤グループではデータウェアハウスとしてSnowflakeを利用し、Transformationにdbtを利用しています。
以前はdbt coreを使いtroccoでdbtを実行していましたが、開発効率やdocsのためにdbt Cloudを導入しました。その際にセキュリティ観点で監査ログやOAuth接続のためにdbt CloudのEnterpriseプランを選択しました。

本記事では、dbt CloudからSnowflakeへの接続のためにOAuth認証の設定方法をまとめます。
設定に際しては下記の記事を参考にしました。
Set up Snowflake OAuth
dbt cloudからSnowflakeへのOAuth接続を試してみた

Snowflakeのセキュリティ統合

dbt CloudからSnowflakeへOAuth認証を行うためのセキュリティ統合をSnowflakeに準備します。弊社ではSnowflakeの管理にTerraformを導入しているため、terraformのsnowflake_oauth_integrationを利用します。
セキュリティ統合を作成する際にSnowflakeのAccountAdminの権限が必要になります。

resource "snowflake_oauth_integration" "dbt_cloud_oauth" {
  name                         = "DBT_CLOUD_OAUTH"
  oauth_client                 = "CUSTOM"
  enabled                      = true
  oauth_client_type            = "CONFIDENTIAL"
  oauth_redirect_uri           = "https://cloud.getdbt.com/complete/snowflake"
  oauth_issue_refresh_tokens   = true
  oauth_refresh_token_validity = 7776000 // リフレッシュ期間はデフォルトの90日間
}
sqlでセキュリティ統合を作成する場合
CREATE OR REPLACE SECURITY INTEGRATION DBT_CLOUD_OAUTH
  TYPE = OAUTH
  ENABLED = TRUE
  OAUTH_CLIENT = CUSTOM
  OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
  OAUTH_REDIRECT_URI = 'https://YOUR_ACCESS_URL/complete/snowflake'
  OAUTH_ISSUE_REFRESH_TOKENS = TRUE
  OAUTH_REFRESH_TOKEN_VALIDITY = 7776000;

dbt CloudのOAuth設定

Snowflakeのセキュリティ統合の作成ができたので、続いてdbt CloudのProjectに先程作成したセキュリティ統合のClient IDとClient Secretを設定します。

Client IDとClient Secretの取得

Snowflakeから今回作成したClient IDとClient Secretを取得します。

with 
integration_secrets as (
  select parse_json(system$show_oauth_client_secrets('DBT_CLOUD_OAUTH')) as secrets
)

select
  secrets:"OAUTH_CLIENT_ID"::string     as client_id,
  secrets:"OAUTH_CLIENT_SECRET"::string as client_secret
from 
  integration_secrets;

dbt Cloudの画面からOAuthの有効化

dbt Cloudの Account Settings > Projectsから該当のプロジェクトを選択し、編集画面で Allow SSO Loginにチェックをつけ、先程のClient IDとClient Secretを入力します。
プロジェクトの編集画面

各ユーザーのCredentialsの設定

dbtのプロジェクトへのOAuthの有効化ができたため、各ユーザーのDevelopment CredentialsをSSOに変更します。
Account Settings > Your Profile > Credentialsより概要のプロジェクトを選択し、SnowflakeとのSSOを有効にして認証を実行し、Snowflakeの認証画面でログインを実行します。
各人のCredentialsの設定画面

最後に

以上がdbt CloudからSnowflakeを接続する際にOAuthを利用する手順をまとめました。
Development Environmentについては以上のようにOAuthで接続が可能になります。
ただしDeployment EnvironmentについてはOAuthで設定できないため、ID/パスワードかKey Pairでの接続が必要になります。

宣伝

ライフイズテック サービス開発部では、月毎に気軽にご参加いただけるカジュアルなイベントを実施しています。開催予定のイベントは、 connpass のグループからご確認ください。興味のあるイベントがあったらぜひ参加登録をお願いいたします。皆さんのご参加をお待ちしています!

Discussion