dbt CloudからOAuth認証でSnowflakeへ接続する
はじめに
私が所属しているライフイズテックのデータ基盤グループではデータウェアハウスとして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の認証画面でログインを実行します。
最後に
以上がdbt CloudからSnowflakeを接続する際にOAuthを利用する手順をまとめました。
Development Environmentについては以上のようにOAuthで接続が可能になります。
ただしDeployment EnvironmentについてはOAuthで設定できないため、ID/パスワードかKey Pairでの接続が必要になります。
宣伝
ライフイズテック サービス開発部では、月毎に気軽にご参加いただけるカジュアルなイベントを実施しています。開催予定のイベントは、 connpass のグループからご確認ください。興味のあるイベントがあったらぜひ参加登録をお願いいたします。皆さんのご参加をお待ちしています!
Discussion