---
schema_version: "1"
id: 2b03f3853cf6065d6aad0473655dda1516c148ce6a91f7f9c77121820d2fa027
title: "Snowflake 用の外部 OAuth 設定: クライアント クレデンシャルのフロー"
collection: tableau
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/tableau/current/ja-jp/server-linux/config_oauth_snowflake_client_creds.md
canonical_url: https://help.tableau.com/current/server-linux/ja-jp/config_oauth_snowflake_client_creds.htm
source_site: help.tableau.com
content_type: documentation
content_hash: cbf58c14919b6672fdd1439ded3e4792d9eb65c9ddab423eb2c2389bccaae60c
description: Configure Azure AD OAuth and modern authentication for Azure and Microsoft connectors in Tableau Server.
---
[メイン コンテンツに進む](#main-content)

# Snowflake 用の外部 OAuth 設定: クライアント クレデンシャルのフロー

OAuth クライアント クレデンシャル認証を使用すると、ユーザーの操作を必要とせずに、Snowflake へのマシン間接続が可能になります

。この方法は次のような場合に最適です。

- データの自動更新のためのサービス アカウント
- スケジュールされている抽出ジョブ
- CI/CD パイプライン
- 埋め込みクレデンシャルを必要とするパブリッシュされたデータ ソース

認可コードのフローを使用する標準の OAuth とは異なり、クライアント クレデンシャルのフローは

ユーザーにサインインを求めるプロンプトを表示しません。代わりに、Tableau はクライアント ID とクライアント シークレットを使用して、ID プロバイダーと直接認証を行います

。

**注:** クライアント クレデンシャルのフローには、Snowflake の外部 OAuth 機能と、対応できる ID プロバイダーが必要です。これは、Snowflake のネイティブ OAuth とは異なります。

## はじめる前に

Snowflake で OAuth クライアント クレデンシャルを使用するには、次が必要です。

 
| 要件 | 説明 |
| --- | --- |
| ID プロバイダー | クライアント クレデンシャル グラント用に設定された Okta、Azure AD、または Ping Federate |
| Snowflake のアカウント | Enterprise 版またはそれ以上、および ACCOUNTADMIN アクセス権 |
| OAuth アプリケーション | API サービス (Okta)、アプリの登録 (Azure AD)、または同等のサービス |
| カスタム スコープ | Snowflake ロール割り当てのスコープ (例: \`session:role:SYSADMIN\`) |

## ID プロバイダーの設定

以下の手順では、例として Okta を使用します。その他のプロバイダーについては、クライアント クレデンシャルの設定について、各プロバイダーのドキュメントを参照してください。

### ステップ 1: API サービス アプリケーションの作成

1. Okta Admin Console にサインインします。
2. **\[アプリケーション\]**、**\[アプリケーション\]** の順に移動します。
3. **\[アプリ統合の作成\]** を選択します。
4. \*\***API サービス**\*\* を選択し、\*\***次へ**\*\* を選択します。
5. アプリケーション名を入力します (例: `snowflake-tableau-service`)。
6. **\[保存\]** を選択します。
7. **クライアント ID** と **クライアント シークレット** をコピーします。これらの値は後で必要になります。

### ステップ 2: DPoP の無効化 (有効な場合)

クライアント クレデンシャルのフローでは、DPoP (所有証明の提示) を無効にする必要があります。

1. アプリケーション設定で、**\[全般\]**、**\[クライアント資格情報\]** の順に移動します。
2. **トークン要求の \[DPoP (所有証明の提示) を要求\]** チェックボックスをオフにします。
3. **\[保存\]** を選択します。

### Step 3: カスタム スコープの追加

Snowflake では、認証されたセッションにロールを割り当てるためにカスタム スコープが必要です。

1. **\[セキュリティ\]**、**\[API\]**、**\[認可サーバー\]** の順に移動します。
2. **\[既定\]** の認可サーバー (またはカスタム サーバー) を選択します。
3. **\[スコープ\]** タブを選択し、**\[スコープの追加\]** を選択します。
4. これらのスコープを追加します。
    
     
    | スコープ名 | 説明 |
    | --- | --- |
    | Snowflake | Snowflake の一般的なアクセス スコープ |
    | session:role:SYSADMIN | SYSADMIN ロールを割り当てます (お使いのロールに合わせて調整) |
    
    **注:** サービス アカウントに必要なその他のロールのスコープも作成してください。

### ステップ 4: アクセス ポリシーの設定

1. **\[アクセス ポリシー\]** タブを選択します。
2. 既存のポリシーを選択するか、新しいポリシーを作成してください。
3. これらの設定でルールを追加します。
    
    - **グラント タイプ:** クライアント クレデンシャル
    - **スコープ:** 任意のスコープ (または特定のスコープを選択)
4. **\[ルールの作成\]** または **\[保存\]** を選択します。

## Snowflake の設定

ACCOUNTADMIN として、次の SQL ステートメントを Snowflake で実行します。プレースホルダーの値は設定に合わせて置き換えてください。

### ステップ 1: 外部 OAuth 統合の作成

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE SECURITY INTEGRATION okta\_oauth\_integration
  TYPE = EXTERNAL\_OAUTH
  ENABLED = TRUE
  EXTERNAL\_OAUTH\_TYPE = OKTA
  EXTERNAL\_OAUTH\_ISSUER = 'https://<your-okta-domain>.okta.com/oauth2/default'
  EXTERNAL\_OAUTH\_JWS\_KEYS\_URL = 'https://<your-okta-domain>.okta.com/oauth2/
default/v1/keys'
  EXTERNAL\_OAUTH\_TOKEN\_USER\_MAPPING\_CLAIM = 'sub'
  EXTERNAL\_OAUTH\_SNOWFLAKE\_USER\_MAPPING\_ATTRIBUTE = 'login\_name'
  EXTERNAL\_OAUTH\_AUDIENCE\_LIST = ('api://default', 'snowflake')
EXTERNAL\_OAUTH\_ANY\_ROLE\_MODE = 'ENABLE';

 
| パラメーター | 説明 |
| --- | --- |
| `EXTERNAL_OAUTH_TYPE` | ID プロバイダー: `OKTA`、`AZURE`、または `PING_FEDERATE` |
| `EXTERNAL_OAUTH_ISSUER` | 認可サーバーからの発行者の URL |
| `EXTERNAL_OAUTH_JWS_KEYS_URL` | トークンの検証用の JWKS エンドポイント |
| `EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA IM` | ユーザーを識別する JWT クレームです。Okta には `sub` を使用します。 |
| `EXTERNAL_OAUTH_ANY_ROLE_MODE` | スコープを介したロールの割り当てを許可するには、`ENABLE` に設定します。 |

### ステップ 2: サービス ユーザーの作成

OAuth クライアント ID と一致する `LOGIN_NAME` を持つ Snowflake ユーザーを作成します。

CREATE USER IF NOT EXISTS service\_account\_user  
  LOGIN\_NAME = '<your-okta-client-id>'  
  DISPLAY\_NAME = 'OAuth Service Account'  
  MUST\_CHANGE\_PASSWORD = FALSE  
  DISABLED = FALSE;
  
\-- Grant role to the service user  
GRANT ROLE SYSADMIN TO USER service\_account\_user;
  
\-- Set the default role  
ALTER USER service\_account\_user SET DEFAULT\_ROLE = 'SYSADMIN';
  
\-- Grant warehouse access  
GRANT USAGE ON WAREHOUSE <your-warehouse> TO USER service\_account\_user;
  
\-- Grant database and schema access  
GRANT USAGE ON DATABASE <your-database> TO USER service\_account\_user;  
GRANT USAGE ON SCHEMA <your-database>.<your-schema> TO USER  
service\_account\_user;  
GRANT SELECT ON ALL TABLES IN SCHEMA <your-database>.<your-schema> TO USER  
service\_account\_user;

**重要:** `LOGIN_NAME` は、OAuth トークンの `sub` クレームと完全に一致している必要があります。Okta API サービス アプリケーションの場合、これがクライアント ID です。

## Tableau Desktop から接続する

1. Tableau Desktop で **\[接続\]**、**\[Snowflake\]** の順に選択します。
2. 接続の詳細を入力します。
    
     
    | フィールド | 値 |
    | --- | --- |
    | サーバー | Snowflake アカウントの URL (例: `account.snowflakecomputing.com`) |
    | ロール | 使用するロール (例: `SYSADMIN`) |
    | ウェアハウス | お使いの Snowflake ウェアハウス |
    | 認証 | OAuth クライアント クレデンシャル |
3. Oauth の設定を入力します。
    
     
    | フィールド | 値 |
    | --- | --- |
    | OAuth トークン要求 URL | `https://<your-okta-domain>.okta.com/oauth2/default/ v1/token` |
    | ユーザー名 | OAuth クライアント ID |
    | パスワード | OAuth クライアント シークレット |
    | OAuth のスコープ | `snowflake session:role:SYSADMIN` |
    
    **注:** OAuth スコープには、ロールの割り当て用に設定した任意のカスタム スコープが含まれている必要があります。
4. **\[サインイン\]** を選択します。

## Tableau Cloud または Tableau Server へのパブリッシュ

OAuth クライアント クレデンシャルを使用するワークブックまたはデータ ソースをパブリッシュする場合、

1. **\[パブリッシュ\]** ダイアログで、**\[データ ソース\]** の横にある **\[編集\]** を選択します。
2. **\[認証\]** で、**\[埋め込みパスワード\]** を選択します。
3. クライアント クレデンシャルは、パブリッシュされたコンテンツに埋め込まれています。

**重要:** 標準の OAuth とは異なり、クライアント クレデンシャルは埋め込みパスワードとして処理されます。パブリッシュされたコンテンツにアクセスするユーザーは、自身の ID ではなく、サービス アカウントのクレデンシャルを使用します。

### クレデンシャルのローテーション

OAuth のクライアント シークレットがローテーションされる際、Tableau Cloud で埋め込みクレデンシャルを更新します。

1. Tableau Cloud にサインインします。
2. パブリッシュされたデータ ソースに移動します。
3. **\[接続\]**を選択します。
4. 新しいクライアント シークレットで接続を更新します。

自動ローテーションの場合は、Tableau REST API を使用して、接続のクレデンシャルをプログラムで更新します。

## よくある質問

### 標準の OAuth ではなく、OAuth クライアント クレデンシャルを使用すべき場合は?

無人でマシン対マシンの認証が必要な場合は、クライアント クレデンシャルを使用します。標準の

OAuth では、最初のサインインと定期的な再認証でユーザーによる操作が必要です。クライアント クレデンシャルでは、

サービス アカウントの ID を使用し、ユーザー操作を必要としません。

### Snowflake のネイティブ OAuth でクライアント クレデンシャルを使用できますか?

いいえ。Snowflake のネイティブ OAuth では、認可コードのフローのみがサポートされています。クライアント クレデンシャルでは、対応している ID プロバイダー (Okta、Azure AD、Ping Federate) を使用した外部 OAuth が必要です。

### パブリッシュ済みコンテンツのシークレットのローテーションはどのように処理しますか?

OAuth クライアント シークレットがローテーションされたら、Tableau Cloud で埋め込みの認証資格情報を更新する必要があります。Tableau Cloud UI を介して手動で行うか、Tableau REST API を使用してプログラムで実行できます。シークレットのローテーション ワークフローの一部として、このプロセスの自動化を検討してください。

### EXTERNAL\_OAUTH\_ANY\_ROLE\_MODE が有効になっているのに、接続がロール エラーで失敗するのはなぜですか?

Snowflake では、OAuth トークンにロール情報を含める必要があります。カスタム スコープ (例: `session:role:SYSADMIN`) を認可サーバーに追加し、Tableau から接続するときにそのスコープを \[OAuth スコープ\] フィールドに含めてください。

## トラブルシューティング

  
| エラー メッセージ | 原因 | 解決策 |
| --- | --- | --- |
| 「ユーザーが存在しないか、認可されていません」 | Snowflake ユーザー `LOGIN_NAME` が OAuth クライアント ID と一致しない | ユーザーの `LOGIN_NAME` を `sub` クレーム (Okta のクライアント ID) と一致するように設定します。 |
| 「要求されたロールがアクセス トークンに記載されていません」 | トークンにロール スコープがない | `session:role:<ROLE>` スコープを認可サーバーに追加し、それを OAuth スコープに含めます。 |
| 「無効な DPoP 証明」 | Okta で DPoP が有効になっている | Okta アプリで \[DPoP (所有証明の提示) を要求\] を無効にします |
| 「無効なスコープ」 | カスタム スコープが設定されていない | 必要なスコープを認可サーバーに追加します。`openid` は含めないでください。 |
| 「トークン検証の失敗」 | JWKS URL または issuer が正しくない | `EXTERNAL_OAUTH_JWS_KEYS _URL` と `EXTERNAL_OAUTH_ISSUER` が認可サーバーと一致することを確認します。 |

## 関連項目

- [Tableau Server での Snowflake 接続用 OAuth の設定](https://help.tableau.com/current/server-linux/ja-jp/config_oauth_snowflake.htm) - Snowflake を使用した標準的な OAuth 認証について説明します。
- [外部 OAuth セキュリティ統合](https://docs.snowflake.com/en/user-guide/oauth-external-overview) - 外部 OAuth プロバイダーを設定するための Snowflake のドキュメント。
- [Okta クライアント クレデンシャルのフロー](https://developer.okta.com/docs/guides/implement-grant-type/clientcreds/main/) - クライアント クレデンシャルを実装するための Okta ドキュメント。
- [データ ソース接続の更新](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) - クレデンシャルの更新に関する Tableau REST API リファレンス。