Microsoft TeamsおよびMicrosoft 365 Copilot対応のCortex Agents¶
概要¶
ほとんどのチームにとって、データインサイトに適宜アクセスすることは、専用の分析プラットフォームと通信ツール間でコンテキストスイッチが起こることを意味し、遅延や生産性の低下を引き起こします。エージェント AI システムをMicrosoft Teamsに統合することで、会話や意思決定が行われる場に直接回答を得られるため、ビジネス全体の情報の流れを加速させることができます。しかし、パワフルで直感的でありながら安全なチャット内分析ソリューションを構築することは極めて大変です。そこで役立つのがSnowflakeです。
Snowflake Cortex AgentsはMicrosoft TeamsおよびMicrosoft 365 Copilotとの統合に対応し、Snowflakeの会話型 AI エージェントをビジネスコミュニケーションプラットフォームに組み込むことができます。ビジネスチームや非技術系ユーザーは、シンプルな自然言語を使用してSnowflakeの構造化データを使用でき、Teamsチャットやより広範なMicrosoft 365エコシステムを離れることなく、直接的な回答や可視化を受け取ることができます。統合はMicrosoft AppSource 経由で使用でき、シームレスにデプロイできます。
主要な機能¶
自然言語によるシームレスな分析。 Microsoft TeamsおよびMicrosoft 365 Copilotインターフェース内でインサイトを得られるようにすることで、ビジネスの意思決定者を支援します。ユーザーは会話形式で質問し、LLM を活用した正確な回答をテキスト、表形式、チャート形式で即座に受け取り、データ主導の意思決定を劇的に加速させることができます。
包括的なワークフローのためのデュアルインターフェース。 Microsoft Teams向けのCortex Agentは、さまざまなビジネスニーズをサポートするために、2つの異なるインターフェースを提供します。標準のTeams Applicationでは、Teams Botアプリケーションのチャット内で専用の詳細分析を得られます。また、Microsoft 365 Copilot Agentでは、Microsoft 365 Copilotエコシステム内のより幅広い会話型ワークフロー内で、ターゲットを絞ったSnowflakeのインサイトにアクセスできます。
Snowflake Cortex Agentsを活用。 この統合は、Snowflake Cortex Agents API を活用し、データから正確で信頼性の高いインサイトを生成するための複雑な作業に対応します。エージェントシステムは、ユーザーリクエストをインテリジェントに解釈して応答を生成するため、チームは複雑な会話の AI パターンを構築したり、基礎となるモデルを管理したりする必要がなくなります。
エンタープライズグレードのセキュリティとガバナンス。 この統合はSnowflakeのプライバシー重視の基礎に基づいているため、安心して AI 駆動型のユースケースを利用できます。これは次のことを意味します。
データはSnowflakeのガバナンス境界内に留まります。 ユーザープロンプトはCortex Agents API に送信されますが、回答を生成するために照会されるデータがSnowflakeの安全な環境の外に送信されることはありません。結果として生じる SQL クエリはSnowflake仮想ウェアハウス内で実行されます。
Snowflakeのプライバシーおよびガバナンス機能とのシームレスな統合。 統合は、Snowflakeのロールベースのアクセス制御(RBAC)を尊重しています。ユーザーの代わりに実行されるすべてのクエリは、確立された権限を遵守し、ユーザーに対してはアクセス許可のあるデータのみが表示されるようにします。
統合の設定¶
Cortex AgentのMicrosoft Teams統合により、組織の管理者は複数のSnowflakeアカウントを組織内のTeamsおよびCopilotワークスペースに接続できます。統合の設定では、以下にまとめられたいくつかの簡単なステップを行います。
Azure管理者によるテナント全体の設定。 統合では、Microsoft Azure管理者による1回限りの設定が必要で、Azure Active Directory(AAD)テナント内のSnowflakeアプリケーションに同意を付与します。このステップでは、統合に対して安全な OAuth 2.0 認証を有効にします。
Snowflakeセキュリティ統合。 Azure管理者がテナント全体の設定を完了した後、Snowflake管理者は、Microsoft TeamsまたはM365 Copilotアプリケーションに接続させたい各Snowflakeアカウントのセキュリティ統合を構成する必要があります。このステップにより、統合は各Snowflakeアカウント内の必要なデータに安全にアクセスできるようになります。
アカウントをボットにリンク。 セキュリティ統合が構成されると、Snowflake管理者はSnowflakeアカウントをMicrosoft TeamsまたはM365Copilotボットにリンクできます。このステップにより、ボットはSnowflakeアカウントのデータと機能にアクセスできるようになり、ユーザーはTeamsまたはCopilot内で直接データを操作できるようになります。
前提条件¶
統合プロセスを開始する前に、以下が確立されていることを確認してください。
管理者アクセス: この設定では、SnowflakeとMicrosoftテナント両方の管理アクセスが必要です。
Snowflakeアカウントのリージョン: Snowflakeアカウントは、Azure US 東部2リージョンでホストされている必要があります。Snowflakeは、このプレビューの進捗に伴い追加のリージョンをサポートする予定です。
Snowflakeの管理者権限: Snowflakeユーザーは、ACCOUNTADMIN または SECURITYADMIN ロールにアクセスできる必要があります。これらの権限は、Snowflakeアカウントで必要なセキュリティ統合オブジェクトを作成するために必要です。
Microsoftの管理者権限: Azureユーザーは、Microsoft Entra ID テナントのグローバル管理者権限(または同等のロール)を持っている必要があります。これらの権限は、アプリケーションに必要なテナント全体の管理者の同意を付与するために必要です。
Microsoftテナント ID: Snowflake セキュリティ統合を構成するために、組織のMicrosoftテナント ID が必要です。組織のテナント ID の確認については、Azureポータルでのサブスクリプションとテナント IDs の取得 をご参照ください。
個々のユーザーアカウント: すべてのエンドユーザーは、自分のMicrosoftおよびSnowflakeのユーザーアカウントを持っている必要があります。
エンドユーザーライセンス: ユーザーは、Microsoft Teamsにアクセスするために、適切なMicrosoftライセンスを持っている必要があります。Microsoft 365 Copilotとの統合を使用する場合は、Copilotライセンスも必要です。
ステップ1:テナント全体のEntra ID 設定¶
Cortex Agentsの安全な認証を有効にするには、Microsoft Azure管理者が、Snowflakeのテナントでホストされている2つのアプリケーションに対して同意を付与し、Entra ID テナント内のアプリケーションごとに*サービスプリンシパル*を作成する必要があります。2つのアプリケーションは次のとおりです。
Cortex Agents Bot OAuth リソース: 保護されたSnowflake API を表し、クライアントアプリケーションのアクセス許可(スコープ)を定義します。
**Cortex Agents Bot Snowflake OAuth クライアント:**アクセストークンをリクエストした後にSnowflake API を呼び出すクライアントアプリケーションを表します。この場合はTeamsアプリケーションバックエンドサービスを指します。
これらのアプリケーションに対して同意を付与するための手順は以下のとおりです。プロセスはどちらのアプリケーションも非常によく似ていますが、具体的な権限とスコープは若干異なります。
OAuth リソースプリンシパルへの同意の付与¶
Cortex Agents Bot OAuth リソースアプリケーションのサービスプリンシパルに同意を付与するには、以下を実行します。
ブラウザーで、
https://login.microsoftonline.com/<tenant-id>/adminconsent?client_id=5a840489-78db-4a42-8772-47be9d833efe
にナビゲートします。この場合、tenant-id
は組織のMicrosoftテナント ID です。まだサインインしていない場合は、サインインするよう求められます。
Permission requested ダイアログが表示され、アプリケーションが必要とする権限が表示されます。
Accept を選択し、リクエストされた権限を付与します。
OAuth クライアントプリンシパルへの同意の付与¶
このプロセスは、2つのダイアログを表示します。どちらも OAuth リソースプリンシパルのものと似ていますが、リクエストされる権限は異なります。
Cortex Agents Bot Snowflake OAuth クライアントアプリケーションのサービスプリンシパルに同意を付与するには、以下を実行します。
ブラウザーで、
https://login.microsoftonline.com/<tenant-id>/adminconsent?client_id=bfdfa2a2-bce5-4aee-ad3d-41ef70eb5086
にナビゲートします。この場合、tenant-id
は組織のMicrosoftテナント ID です。Permissions requested (1 of 2) ダイアログが表示され、アプリケーションが必要とする権限のセットが 1 つ表示されます。
Accept を選択して、リクエストされた権限を付与します。
2 つ目の権限ダイアログが表示されます(Permissions requested (2 of 2))。
Accept を選択して、リクエストされた権限を付与します。
重要
次のような、「必要なクエリ文字列パラメーターがありません」というエラーメッセージが表示される場合があります。
{
"error": {
"code": "ServiceError",
"message": "Missing required query string parameter: code. Url = https://unitedstates.token.botframework.com/.auth/web/redirect?admin_consent=True&tenant=<TENANT-ID>"
}
}
このエラーが表示された場合でも、同意は正常に付与されているため、無視しても大丈夫です。念のため、次のセクションの手順に従って、権限が正常に付与されたことを確認します。
権限の付与の確認¶
両方のアプリケーションに同意を付与した後、Microsoft Entra ID ポータルの Enterprise applications セクションを確認すると、権限が正常に付与されたことを確認できます。
必要に応じて、Microsoft Entra管理者センター にログインします。
検索ボックスに「enterprise applications」と入力し、検索結果の Enterprise applications を選択してエンタープライズアプリケーションに移動します。
All applications リストに、同意を付与したばかりの2つのアプリケーション(Snowflake Cortex Agents Bot OAuth リソースとSnowflake Cortex Agents Bot OAuth クライアント)があります。これを簡単に行うには、「Snowflake Cortex Agent」を検索します。
両方のアプリケーションがリストに表示されれば、権限は正しく付与されています。アプリケーションの1つまたは両方が見つからない場合は、再度同意を付与してみてください。
ステップ2:Snowflakeセキュリティ統合¶
SnowflakeをMicrosoft Teamsと統合するには、SnowflakeアカウントとEntra ID テナント間で暗号化の信頼を確立するセキュリティ統合が必要です。このプロセスには以下が必要です。
Entra ID をSnowflakeの外部 OAUth プロバイダーとして有効化する。
Cortex Agentとその他の必要なオブジェクトの定義を準備する。
エージェントを使用するユーザーが、エージェントのSnowflakeオブジェクトにアクセスする権限を持っていることを確認する。
Entra ID を外部 OAuth プロバイダーとして有効化する¶
Snowflakeセキュリティ統合オブジェクトは、外部 OAuth プロバイダー(この場合はMicrosoft Entra ID)との統合を表しています。この統合により、SnowflakeはMicrosoft TeamsまたはCopilotにログインしているユーザーを認証できるようになります。
次の SQL ステートメントは、統合を作成するための注釈付きのテンプレートです。このコマンドは、ACCOUNTADMIN 権限を持つロールによって実行する必要があります。tenant-id
プレースホルダーをMicrosoft Tenant ID に置き換えます。
CREATE OR REPLACE SECURITY INTEGRATION entra_id_cortex_agents_integration
TYPE = EXTERNAL_OAUTH
ENABLED = TRUE
EXTERNAL_OAUTH_TYPE = AZURE
EXTERNAL_OAUTH_ISSUER = 'https://login.microsoftonline.com/<tenant-id>/v2.0'
EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys'
EXTERNAL_OAUTH_AUDIENCE_LIST = ('5a840489-78db-4a42-8772-47be9d833efe')
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = ('email', 'upn')
EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'email_address'
EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE'
このコマンドで使用可能なパラメーターの完全なリファレンスについては、CREATE SECURITY INTEGRATION (外部 OAuth) をご参照ください。
また、 EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM および EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE パラメーターはEntra ID IDをSnowflake IDにリンクさせます。認証が成功するようにするには、JWT で指定されたクレームの値がSnowflakeのユーザーオブジェクトで指定された属性の値と完全に一致する必要があります。Snowflakeが推奨する2つの主な構成は次のとおりです。
ユーザープリンシパル名によるマッピング(UPN):EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM パラメーターを 'upn' に設定し、EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE パラメーターを 'LOGIN_NAME' に設定します。
メールアドレスによるマッピング:EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM パラメーターを 'email' に設定し、EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE パラメーターを 'EMAIL_ADDRESS' に設定します。
上記のステートメント例では、メールアドレスのマッピング構成を使用していますが、EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM パラメーターで UPN も指定しています。これにより、EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE を変更するだけでマッピングメソッドを変更できます。
ステートメント例は、ユーザーの既定のロールが使用されるように EXTERNAL_OAUTH_ANY_ROLE_MODE も有効にしています。
OAuth スコープの詳細については、スコープ をご参照ください。
Cortex Agentの定義を準備する¶
セキュリティ統合を構成したら、Snowflake内でエージェントの環境と定義を準備する必要があります。そのために、必要なデータベースオブジェクトを作成し、単一の JSON オブジェクトでエージェントのロジックを定義します。定義は、エージェントの指示、そのツール(Cortex AnalystやCortex Searchなど)、およびそれらのツールのリソースを指定します。スキーマの定義は Cortex Agent API リクエスト本文スキーマ といくつかの追加事項に従います。以下は JSON オブジェクトの最上位構造です。
{
"model": ...,
"response_instruction": ...,
"experimental": ...
"tools": ...
"tool_resources": ...
"tool_choice": ...
"starter_prompts": ...
}
エージェント定義をSnowflakeステージにアップロードし、エージェントを使用するすべてのエンドユーザーがアクセスできることを確認します。
検索結果と会話ガイダンスの2つのオプションフィールドを設定することで、ユーザーエクスペリエンスを向上させることができます。
引用検索では、検索ツールの
tool_resources
定義で2つのオプションフィールドを指定することで、判読可能なタイトルとソースドキュメントへの直接リンクが提供されます。title_column
は、ドキュメントの判読可能なタイトルを含む列です。id_column
は、Cortex Searchがドキュメントへのリンクを構築するために使用する、ドキュメントの一意の識別子を含む列です。
スタータープロンプトでは、エージェント定義の最上位にある
starter_prompts
フィールドで質問を作成する際にユーザーにガイドを提供します。{ .... "starter_prompts": ["prompt #1", "prompt #2", ...], ... }
エンドユーザーに必要な権限を付与する¶
エンドユーザーがTeamsのCortex Agentと正常にやり取りできるようにするには、デフォルトのSnowflakeロール(またはその他の指定されたロール)に、基礎となるオブジェクトすべてに対する権限が付与されている必要があります。
Cortex Agentsトピックの アクセス制御要件セクション に一覧表示されているすべての付与
エージェントの JSON 定義を含むステージへの READ アクセス
エージェントに割り当てられたウェアハウスの USAGE
ステップ3:Teamsアプリを設定し、Snowflakeアカウントを接続する¶
統合プロセスの最後のステップは、Microsoft Teamsアプリケーションを設定し、それを使用するSnowflakeユーザーに接続することです。これには次のタスクを完了する必要があります。
TeamsストアからCortex Agentアプリをインストールする
SnowflakeアカウントをTeamsアプリケーションに接続する
Teamsストアからアプリをインストールする¶
すべてのユーザーは、Microsoft TeamsストアからCortex Agentアプリをインストールする必要があります。アプリをインストールするには、Teamsアプリストアで「Snowflake Cortex Agents」を検索し、Add をクリックします。
注釈
組織のMicrosoft Teamsポリシーによっては、ユーザーがアプリを利用するには、Teams管理者がアプリを承認する必要がある場合があります。手順については、Teams管理者センターのアプリ管理とガバナンスの概要 をご参照ください。
SnowflakeアカウントをTeamsアプリに接続する¶
TeamsでCortex Agentアプリを操作する最初のユーザーは、Snowflakeアカウントをアプリに接続するよう促されます。このステップを成功させるために、このユーザーはSnowflakeで ACCOUNTADMIN または SECURITYADMINロールを持っている必要があります。
要約すると、Snowflakeの全ユーザーの既定のロールは、Cortex Agentsトピックの アクセス制御要件セクション で説明されているように、エージェントのオブジェクトにアクセスするために必要な権限と、エージェントの JSON 定義を含むステージへ READ アクセスとエージェントのウェアハウスでの USAGE を持っている必要があります。(ユーザーの既定のロールは、ユーザーのプロファイルの DEFAULT_ROLE 設定で指定されます。)
セキュリティ統合は、デフォルトで主要なSnowflake管理者ロールをブロックします。したがって、Teams Botを設定するユーザーに既定のロールとして ACCOUNTADMIN などの管理者ロールを使用することはできません。この制限の詳細については、CREATE SECURITY INTEGRATION トピックの BLOCKED_ROLES_LIST をご参照ください。
Snowflakeでは、必要な権限を持つ専用の非管理者ロールを作成し、セットアップユーザーのデフォルトとして設定することを推奨します。もしくは以下のように SECONDARY ROLES メカニズムを使用して、ユーザーが持つプライマリの既定のロールを変更することなく、追加の権限を付与します。
GRANT ROLE <integration_specific_role> TO USER <user_name>;
ALTER USER <user_name> SET DEFAULT_SECONDARY_ROLES = ('<integration_specific_role>');
Teams Botを設定するには、以下の手順に従います。
プロセスを開始するには、 :ui:`I'm the Snowflake administrator`をクリックします。これは、管理者がTeams用にSnowflakeを構成する必要があることを知らせる通知の下にあります。
必要に応じてSnowflakeアカウント URL を提供します。
この URL を見つけるには、Snowsightにログインし、ページの左下隅にあるアカウントセレクターをクリックします。URL のホスト名部分はメニューの上部に
your-organization-your-account
形式で表示されます。完全な URL はyour-organization-your-account.snowflakecomputing.com
です。設定ウィザードは URL がAzure US 東部2リージョンの有効なSnowflakeインスタンスにつながっていることを検証し、ユーザーがそのインスタンスへのアクセスを持ち、必要な管理者権限を持っていることを確認します。
注釈
セキュリティ統合が「Microsoft IDプラットフォームアクセストークンv2.0」を使用していることを確認するように指示する警告が表示される場合があります。この警告は無視しても大丈夫です。Snowflakeセキュリティ統合トークン形式は互換性があります。
この検証に合格すると、次の設定の詳細を要求するフォームが表示されます。
この情報を入力して、Finalize account configuration をクリックします。
設定が最終検証に合格すると、TeamsアプリがSnowflakeアカウントに接続され、エージェントを使用できるようになります。
Tip
SnowflakeアカウントをCortex Teamsアプリに接続すると、必要な権限を持つユーザーでTeamsアプリにログインし、チャットで「新しいアカウントを追加」コマンドを実行することで、同じアプリに追加のSnowflakeアカウントを接続できます。
Cortex Agentを使用する¶
統合を設定した後、Microsoft Teamsインターフェースにボットが表示され、ユーザーはプライベートチャットでボットと対話できるようになります。ユーザーは自然言語で質問し、ボットはSnowflakeデータに基づいた回答を返します。
Microsoft 365 Copilotでは、ユーザーはより広範なワークフローのコンテキストでエージェントと対話することができ、Copilotインターフェース内でSnowflakeデータに関する質問や回答をやり取りすることができます。
セキュリティに関する考慮事項¶
Microsoft TeamsのCortex Agents統合は、Snowflakeの既存のセキュリティ機能とMicrosoft Entra ID の認証機能を活用して、セキュリティを念頭に置いて設計されています。統合により、ユーザーデータは安全に保たれ、アクセスはSnowflakeのロールベースのアクセス制御(RBAC)システムによって制御されます。
エンドツーエンドの認証フロー¶
Microsoft TeamsにCortex Agents統合を使用する際のセキュリティ上の影響を理解するには、エンドツーエンドの認証フローを理解することが重要です。このプロセスには次のステップが含まれます。
ユーザーインタラクション: ユーザーは、Microsoft TeamsのSnowflake Cortex Agentsボットにメッセージを送信します。
認証トリガー: ボットのバックエンドサービス(「クライアント」アプリ)が OAuth 2.0フローを開始し、ユーザーはMicrosoft Entra ID にリダイレクトされます。
ユーザー認証: ユーザーは、企業の認証情報を使用してMicrosoftアカウントにサインインし、MFA またはテナントによって適用される条件付きアクセスポリシーを満たします。
トークン発行: Entra ID は、有効期間が短い認証コードを提供します。ボットのバックエンドは、JWT アクセストークンとこのコードを安全に交換します。
Snowflakeへの API 呼び出し: ボットバックエンドは、
Authorization: Bearer
ヘッダーのアクセストークンなど、Snowflake Cortex Agents API を呼び出します。Snowflakeトークンの検証: Snowflakeサービスはリクエストを受信し、Snowflakeセキュリティ統合オブジェクトで定義されたポリシーと照らし合わせて JWT を検証します。
ロールベースのアクセス制御¶
Teams統合は特定のユーザーロールのもとでCortex Agent API を使用するため、ユーザーの指定されたSnowflakeロールが持つ正確な権限を使用してCortex Agentsリクエストを実行します。エージェントは、以下を含むすべての既存のデータガバナンス制御を継承します。
ロールベースのアクセス制御: エージェントは、ユーザーのロールが使用を許可するデータベース、スキーマ、テーブル、ウェアハウスにのみアクセスできます。
データマスキングポリシー: エージェントは動的データマスキングポリシーを尊重し、ユーザーのロールで許可されている場合にのみアクセスを付与します。
行レベルのアクセスポリシー: エージェントは行レベルのセキュリティポリシーを適用します。
エージェントは既存のSnowflakeセキュリティ制御をバイパスできず、ユーザーはまだ表示を許可されていないデータにアクセスできません。
現在の制限¶
これらの制限は、Microsoft TeamsのCortex Agent統合プレビューリリースに適用されます。Snowflakeは、今後のリリースでこれらに対処する予定です。
- OAuth IDプロバイダーはEntra ID である必要があります
統合は、認証用のIDプロバイダーとしてMicrosoft Entra ID のみをサポートし、Entra ID ユーザーとSnowflakeユーザー間で1対1の直接的なマッピングを要求します。その他の IdPs(例:SnowflakeまたはOkta)を使用する組織は、現在この統合を使用できません。
- デフォルトのユーザーロールの依存関係
Cortex Agents API のアーキテクチャ上の制約により、統合の機能は各ユーザーのデフォルトのSnowflakeロールに関連付けられています。これにより、認証中に確立されたロールコンテキストに基づいてセッションの権限が決まります。したがって、ユーザーの既定のロールには、エージェントが正しく機能するための基礎となるオブジェクトで必要なすべての権限が付与されている必要があります。Snowflakeの SECONDARYROLES 機能はデータアクセスを広げるのに役立ちますが、プライマリ実行コンテキストはユーザーの既定のロールによって管理されます。
- Snowflakeアカウント1つにつき1つのエージェント定義
統合は、Teams統合インスタンスとSnowflakeアカウントあたり単一のCortex Agent定義の間で1対1のマッピングを提供します。現在、単一のSnowflakeアカウントから複数の異なるエージェントを公開することはできません。
- マルチターンコンテキストなし
統合は現在、マルチターン会話コンテキストをサポートしていません。Teamsユーザーからの各クエリは、個別のステートレストランザクションになります。エージェントは以前の質問のコンテキストを記憶しないため、ユーザーは各リクエストを明示的に入力する必要があります。
トラブルシューティング¶
Microsoft TeamsのCortex Agent統合で問題が発生した場合は、以下のセクションで考えられる解決策を確認してください。
権限とアクセスの問題¶
ユーザーの既定のロールは、エージェントが使用またはアクセスするオブジェクトにアクセスするために必要な権限を持っている必要があります。アクセスの問題によるエラーメッセージには通常、「データベースオブジェクトが存在しないか、許可されていません」というフレーズが含まれます。
このような問題のトラブルシューティングでは、以下の点を確認します。
ユーザーの既定のロールが、必要な権限を持つロールに設定されている。
ユーザーの既定のロールは、エージェントの JSON 定義を含むステージやエージェントに割り当てられたウェアハウスなど、エージェントのオブジェクトで必要な権限を持っている。
既定のロールの設定¶
アクセスの問題をトラブルシューティングするには、まずユーザーの既定のロール設定を確認します。この設定を確認するには、DESCRIBEUSER コマンドを実行し、出力で DEFAULT_ROLE プロパティを確認します。ユーザーの既定のロールが正しくない場合は、ALTERUSER コマンドを使用して変更します。
ALTER USER <user_name> SET DEFAULT_ROLE = '<correct_role>';
ユーザーのプライマリ DEFAULT_ROLE の変更ができない場合は、Snowflakeのセカンダリロールメカニズムを使用します。ユーザーは、プライマリロールとアクティブなセカンダリロールの権限を組み合わせてアクションを実行できます。これにより、ユーザーのプライマリロールを変更することなく、統合固有の追加ロールをユーザーに付与できます。
Cortex Agent統合のセカンダリロールを追加するには、以下のように SQL コマンドを使用します。ユーザーに既に割り当てられているセカンダリロールを削除しないようにするには、DESCRIBE USER の出力の DEFAULT_SECONDARY_ROLES プロパティを確認します。統合固有のロールを追加するときに、これらの既存のロールを含めます。
DESCRIBE USER <user_name>; -- take note of DEFAULT_SECONDARY_ROLES
GRANT ROLE <integration_specific_role> TO USER <user_name>;
ALTER USER <user_name> SET DEFAULT_SECONDARY_ROLES = ('<pre_existing_role_1>', ....,
'<integration_specific_role>');
必要な権限¶
ユーザーの既定のロール(またはデフォルトのセカンダリロール)は、以下で説明する権限を持っている必要があります。
SNOWFLAKE. CORTEX_USER ロール経由のCortex AI 機能アクセス。デフォルトで、このロールは PUBLIC ロールに付与されるので、すべてのユーザーがCortex AI 機能にアクセスできます。組織が PUBLIC から SNOWFLAKE. CORTEX_USER を削除した場合、エージェントが実行されるロールにそれを明示的に付与する必要があります。
エージェントがCortex Analystツールを使用する場合、そのロールは以下の権限も必要になります。
セマンティックモデルで参照されるすべてのデータベースとスキーマでの USAGE
セマンティックモデルで参照されるすべてのテーブルとビューでの SELECT
セマンティックモデルファイルを含むステージでの READ アクセス
エージェントがCortex Search Serviceを使用する場合、ロールは使用される特定のサービスでの USAGE を持っている必要があります。
セキュリティ統合の問題¶
Snowflakeセキュリティ統合は、Microsoft Entra ID テナントをSnowflakeアカウントに接続します。このセクションでの問題は、セキュリティ統合に関連しています。
無効な OAuth アクセストークン(エラーコード390303)¶
このエラーは、セキュリティ統合の1つ以上のプロパティ値が正しくなく、SnowflakeがEntra ID から受信したアクセストークンの検証を妨げていることを示している可能性があります。これを修正するには、セキュリティ統合の以下のフィールドをチェックします。特に、URLs のテナント ID が正しいか確認します。
EXTERNAL_OAUTH_ISSUER: これは正しいEntra ID 発行者 URL に設定する必要があります。形式はsamp:
https://login.microsoftonline.com/<tenant-id>/v2.0
で、tenant-id
は組織のMicrosoftテナント ID です。EXTERNAL_OAUTH_JWS_KEYS_URL: これは正しいEntra JWS キー URL に設定する必要があります。形式はsamp:
https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys
で、tenant-id
は組織のMicrosoftテナント ID です。EXTERNAL_OAUTH_AUDIENCE_LIST: これには、Cortex Agents Bot OAuth リソースの正しいオーディエンスが含まれている必要があります。これはアプリケーション ID
5a840489-78db-4a42-8772-47be9d833efe
です。
ALTER SECURITYINTEGRATION コマンドを使用して誤った値を更新します。
ユーザー名またはパスワードが正しくありません(エラーコード390304)¶
このエラーメッセージは、Entra ID によって送信されたユーザー識別子とSnowflakeの対応するユーザーの記録が一致していないことを示しています。これは通常、Entra ID がSnowflakeユーザーを正確にマッピングしていないためです。これは、Snowflakeユーザーが存在しない(またはマップされた UPN またはメールアドレスが正しくない)場合、またはマッピングが複数のSnowflakeユーザーに解決される場合(例:マッピングがメールアドレスを使用して実行され、複数のユーザーが同じアドレスを共有している場合)に起こることがあります。
エラーメッセージには、ユーザーがログインしようとしている UPN とメールアドレスが含まれます。この情報を使用し、DESCRIBE USER コマンドを使用して影響を受けるユーザーの設定を確認します。ユーザーの NAME または EMAIL プロパティが、Entra ID の対応するユーザーの同じプロパティ値と一致していることを確認します。メールアドレスマッピングを使用する場合は、Snowflakeアカウントの全ユーザーのメールアドレスが一意であることを確認します。
ロールがアクセストークンにリストされていないか、除外されました(エラーコード390317)¶
このエラーは、OAuth アクセストークンの情報に基づいて、Snowflakeがユーザーにロールを割り当てることができない場合に発生します。アクセストークンは session:role-any
スコープで構成され、ユーザーはSnowflakeで割り当てられたロールを引き受けることができます。ただし、この動作を許可するようにセキュリティ統合を明示的に構成する必要があります。
DESCRIBE SECURITY INTEGRATION コマンドを使用して、EXTERNAL_OAUTH_ANY_ROLE_MODE プロパティの値を確認し、ENABLE
または ENABLE_FOR_LOGIN
に変更します。
DESCRIBE SECURITY INTEGRATION entra_id_cortex_agents_integration;
ALTER SECURITY INTEGRATION entra_id_cortex_agents_integration
SET EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';
接続文字列で指定されたロールは、このユーザーに付与されていません(エラーコード390186)¶
このエラーは、Snowflakeセキュリティ統合が、ユーザーの既定のロールにセキュリティ統合の使用を許可していない場合に発生します。
この問題を解決するには、DESCRIBE SECURITY INTEGRATION の出力にある次のプロパティを確認します。
EXTERNAL_OAUTH_ALLOWED_ROLES_LIST:パラメーターが有効になっている場合は、そのパラメーターにユーザーの既定のロールが含まれていることを確認します。
EXTERNAL_OAUTH_BLOCKED_ROLES_LIST:パラメーターが有効になっている場合は、そのパラメーターにユーザーの既定のロールが含まれていないことを確認します。