ワークロードIDフェデレーション¶
このドキュメントは以下を対象としています。
社内クラウドサービスの開発者。
内部および外部サービスとの統合を管理する管理者。
自分のプラットフォームで実行されている個々のワークロードに OpenID Connect(OIDC)フェデレーション ID トークンを発行することで、各顧客のワークロードがSnowflakeに専用ユーザーとして認証されるようにしたいマルチテナント SaaS アプリケーションの開発者。
ワークロードIDフェデレーションは、アプリケーション、サービス、コンテナなどのワークロードが、AWS Identity and Access Management (AWS IAM) ロール、Microsoft Entra ID、Google Cloud サービスアカウントなどのクラウドプロバイダーのネイティブIDシステムを使ってSnowflakeが使用し検証できる証明書を取得することで、Snowflakeで認証されるようにするサービス間の認証メソッドです。
ワークロードIDフェデレーションにより、Snowflakeでの認証用のパスワード、API キー、キーペア、プログラムによるアクセストークンなどの長期間有効な認証情報を管理および保存する必要がなくなります。また、ワークロードIDフェデレーションによって、認証情報の取得にかかる複雑さも軽減されます。外部 OAuth などの他のメソッドでは設定により多くの作業が必要になる場合があります。Snowflakeコネクタを使用するアプリケーション、サービス、およびコンテナは、各プラットフォームのネイティブメカニズムを通じてプラットフォームのIDプロバイダー(IdP)から有効期限が短い認証情報を自動的に取得します。
利点¶
このセクションでは、認証にワークロードIDフェデレーションを使用する理由について説明します。
費用対効果:既存の IdPs を使用してサービスIDを管理する場合、追加のツールやライセンスが不要になり、費用対効果が高くなります。
相互運用性:AWS IAM、Entra ID、Google Cloud などの人気のあるクラウドプロバイダーサービスは、外部ワークローメソッドとしてワークロードIDフェデレーションをサポートし、推奨しています。
便利な監査と監視:
管理者は、AWS CloudTrail および Azureモニター などの既存のクラウドプロバイダーサービスを利用して、アクティビティをログ記録および監視できます。
Snowflake管理者は、ワークロードIDフェデレーションを使用するサービスを監視および監査するため、LOGIN_HISTORY および CREDENTIALS ビューを ACCOUNT_USAGE スキーマ でクエリできます。
ワークロードIDフェデレーションを実装するためのワークフロー¶
ワークロードIDフェデレーションにより、各種の IdPs を使用してさまざまなワークロードを認証することができますが、次のステップに示すように、基本的なワークフローは同じです。
ワークロード管理者として、ネイティブIDプロバイダーを使用するようにサービスを構成することで、プロバイダーがワークロードのIDの*証明書*を発行できるようにします。この証明書は、多くの場合 JSON ウェブトークン(JWT)ですが、必ずそうとは限りません。
Snowflake管理者として、ワークロード用にSnowflakeサービスユーザーを作成します。このユーザーのプロパティを、プロバイダーから送信された証明書に含まれる値に設定します。たとえば、ユーザープロパティで IAM ロールの名前やプロバイダーの発行者 URL を指定します。
ワークロード開発者として、Snowflake ドライバー を使用するようにワークロードを構成します。ドライバーは、確認のために証明書をSnowflakeに送信します。
各種のワークロードと IdPs に関する、このワークフローのエンドツーエンドの例を確認するには、はじめるにあたり をご参照ください。
アクセス制御の要件¶
Snowflakeサービスユーザー、つまり、TYPE プロパティが SERVICE
に設定されたユーザーのワークロードIDフェデレーションを構成するには、アクティブ化されたロールに次のいずれかの権限を付与する必要があります。
サービスユーザーについての OWNERSHIP。
サービスユーザーについての MODIFY PROGRAMMATIC AUTHENTICATION METHODS。
サポートされているSnowflakeドライバー¶
ワークロードは、Snowflakeに接続するときに、Snowflakeドライバーを使用して証明書を送信します。次のドライバーは、ワークロードIDフェデレーションをサポートしています。
ドライバー |
最小バージョン |
---|---|
v1.16.0 |
|
v3.26.0 |
|
v4.8.0 |
|
v2.2.0 |
|
v3.11.0 |
|
v3.17.0 |
セキュリティ体制の強化¶
認証ポリシー を使用すると、ワークロードIDフェデレーションで認証できるSnowflakeサービスユーザーを制御できます。認証ポリシーを作成して設定することで、ワークロードが指定されたIDプロバイダーまたはそのプロバイダー内のアカウントを使用する場合にのみ、認証できるようにすることもできます。
たとえば、次の認証ポリシーでは、ワークロードがプロバイダーとして Microsoft Entra ID を使用し、証明書の発行者がテナント ID が https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0
である Microsoft Entra ID テナントである場合にのみ認証できます。
CREATE AUTHENTICATION POLICY workload_policy WORKLOAD_IDENTITY_POLICY=( ALLOWED_PROVIDERS = (AZURE) ALLOWED_AZURE_ISSUERS = ( 'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0') );
WORKLOAD_IDENTITY_POLICY
パラメーターの詳細については、CREATE AUTHENTICATION POLICY をご参照ください。
認証ポリシーを設定して適用する方法の詳細については、アカウントまたはユーザーに認証ポリシーを設定する をご参照ください。
はじめるにあたり¶
AWS IAM ロールとSnowflake Pythonドライバーを使用したSnowflakedeでの認証¶
AWS を構成する¶
AWS サービスが AWS IAM をIDプロバイダーとして使用するように構成するには、IAM ロールをアタッチします。詳細については、ワークロードに対応する AWS ドキュメントをご参照ください。
Amazon EC2 については、インスタンスへの IAM ロールのアタッチ をご参照ください。
AWS Lambdaについては、実行ロールを使用したLambda関数のアクセス許可の定義 をご参照ください。
Snowflakeの構成¶
Snowflakeを構成するには、ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うSnowflakeサービスユーザー、つまりタイプが SERVICE
のユーザーを作成します。
始める前に
Snowflakeを正常に構成するには、Snowflakeへの認証インスタンスに関連付けられたAWSユーザーまたはロールを一意に識別するAmazon Resource Identifier(ARN)を指定します。IAM ロールの ARN を取得するため、次のステップを完了します。
AWS コンソールにサインインしてから、IAM ダッシュボードに移動します。
左側のナビゲーションで、Roles を選択します。
AWS インスタンスにアタッチしたロールの名前を選択します。
Summary セクションで、ARN を見つけ、Copy アイコンを選択します。
Snowflakeは、次の IAM 識別子 形式を受け入れます。
arn:aws:iam::account:user/user_name_with_path
arn:aws:iam::account:role/role_name_with_path
arn:aws:sts::account:assumed_role/role_name/role_session_name
ワークロードのサービスユーザーを作成するには:
Snowsight にサインインします。
ワークシートのリストを開くには、Projects » Worksheets を選択します。
新しい SQL ワークシートを開くには、+ を選択します。
ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うサービスユーザーを作成するには、ワークシートの CREATE USER ステートメントを実行します。
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = AWS ARN = '<amazon_resource_identifier>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
ここでは、
ARN
は、これらのステップを開始する前に取得した値です。
Snowflakeドライバーを使用するようにワークロードを構成する¶
注釈
ワークロードIDフェデレーションをサポートする任意のSnowflakeドライバーを使用するようにワークロードを構成できます。完全なリストについては、 サポートされているSnowflakeドライバー をご参照ください。
ワークロードにPythonドライバーが必要な場合は、以下のステップを完了します。
Pythonアプリケーションコードに、以下のソースコードを追加します。
import os import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='AWS' )
Pythonアプリケーションを実行します。ワークロードIDフェデレーションを使用してSnowflakeでの認証を行います。
Microsoft Entra ID およびSnowflake Pythonドライバーを使用したSnowflakeでの認証¶
以下にリストされている各セクションのステップを完了し、ワークロードIDフェデレーションを使用して Microsoft Entra ID からSnowflakeでの認証を行います。
Microsoft Entra ID を構成する¶
Microsoft Entra ID テナント管理者は、SnowflakeワークロードIDの使用を許可するために、以下のステップを完了する必要があります。これらの手順は Microsoft Entra ID テナントごとに1回実行するだけで済みます。
Microsoft Azure ポータルにログインします。
間違いなく Azure テナント管理者権限があることを確認します。
同意 URI に移動し、マルチテナント Snowflake EntraID アプリのインストールに同意します。
マルチテナントSnowflake EntraID アプリはパブリッシャー確認済みで、Snowflakeをリソースとして表します。このアプリは、Snowflakeでの認証時に、アクセストークンのオーディエンスとして使用されます。このアプリは基本的な権限のみを必要とし、特権は必要ありません。
Accept を選択して、Snowflake EntraID アプリに権限を付与します。
Microsoft Azure を構成する¶
次のステップを完了して、Microsoft Azure サービスがワークロードIDフェデレーションを使用するように構成します。
Microsoft Azure ポータルにログインします。
サイドバーで、Security » Identity に移動します。
Azure VM または Azure Function のマネージドIDを有効にします。
後のステップのために Object (Principal) ID を保存します。
Snowflakeの構成¶
Snowflakeを構成するには、ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うSnowflakeサービスユーザー、つまりタイプが SERVICE
のユーザーを作成します。
始める前に
Snowflakeを正常に構成するには、次の情報が必要です。
大文字と小文字を区別する、前のステップ で有効にしたマネージドIDのオブジェクト ID (プリンシパル ID)。この識別子は、Azure Portal を使用してAzure VM または Function の Identity ページからコピーできます。
Microsoft Entraテナント ID。この値を使用して、認証機関 URL を構築します。
Microsoft Entra Consoleを使用してテナント ID を取得するには、Microsoft Entraテナント ID を検索する方法 をご参照ください。
PowerShell を使用してテナント ID を取得するには、次のコマンドを実行します。
Connect-AzAccount Get-AzTenant
ワークロードのサービスユーザーを作成するには:
Snowsight にサインインします。
ワークシートのリストを開くには、Projects » Worksheets を選択します。
新しい SQL ワークシートを開くには、+ を選択します。
ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うサービスユーザーを作成するには、ワークシートの CREATE USER ステートメントを実行します。
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = AZURE ISSUER = 'https://login.microsoftonline.com/<tenant_id>/v2.0' SUBJECT = '<managed_identity_object_id>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
ここでは、
ISSUER
およびSUBJECT
は、これらのステップを開始する前に取得した値です。
Snowflakeドライバーを使用するようにワークロードを構成する¶
注釈
ワークロードIDフェデレーションをサポートする任意のSnowflakeドライバーを使用するようにワークロードを構成できます。完全なリストについては、 サポートされているSnowflakeドライバー をご参照ください。
ワークロードにPythonドライバーが必要な場合は、以下のステップを完了します。
Pythonアプリケーションコードに、以下のソースコードを追加します。
import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='AZURE' )
Pythonアプリケーションを実行します。ワークロードIDフェデレーションを使用してSnowflakeでの認証を行います。
注釈
ワークロードの開発者は、ワークロード管理者が有効にしたマネージドIDに関連する環境変数を設定する必要がある場合があります。管理者が システム割り当てマネージドIDではなく ユーザー割り当てマネージドID を有効にした場合、MANAGED_IDENTITY_CLIENT_ID 環境変数をSnowflakeでの認証に使用するマネージドIDのクライアント ID に設定する必要があります。
Google Cloud およびSnowflake Pythonドライバーを使用したSnowflakeでの認証¶
Google Cloud を構成する¶
サービスが Google Cloud をIDプロバイダーとして使用するように構成するには、サービスアカウントを GCE またはCloud Runインスタンス にアタッチします。
Snowflakeの構成¶
Snowflakeを構成するには、ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うSnowflakeサービスユーザー、つまりタイプが SERVICE
のユーザーを作成します。
始める前に
Snowflakeを正常に構成するには、サービスアカウントの uniqueId
プロパティの値が必要です。この一意の ID を取得するには、Google Cloud CLI を使用して次のコマンドを実行します。
gcloud iam service-accounts describe "<SERVICE_ACCOUNT_EMAIL_ADDRESS>" --format="value(uniqueId)"
ワークロードのサービスユーザーを作成するには:
Snowsight にサインインします。
ワークシートのリストを開くには、Projects » Worksheets を選択します。
新しい SQL ワークシートを開くには、+ を選択します。
ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うサービスユーザーを作成するには、ワークシートの CREATE USER ステートメントを実行します。
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = GCP SUBJECT = '<unique_id_of_service_account>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
ここでは、
SUBJECT
は、これらのステップを開始する前に取得した値です。
Snowflakeドライバーを使用するようにワークロードを構成する¶
注釈
ワークロードIDフェデレーションをサポートする任意のSnowflakeドライバーを使用するようにワークロードを構成できます。完全なリストについては、 サポートされているSnowflakeドライバー をご参照ください。
ワークロードにPythonドライバーが必要な場合は、以下のステップを完了します。
Pythonアプリケーションコードに、以下のソースコードを追加します。
import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='GCP' )
Pythonアプリケーションを実行します。ワークロードIDフェデレーションを使用してSnowflakeでの認証を行います。
Elastic Kubernetes Service (EKS) から OpenID Connect (OIDC)発行者を使用したSnowflakeでの認証¶
以下にリストされている各セクションのステップを完了し、ワークロードIDフェデレーションを使用して Elastic Kubernetes Service (EKS) からSnowflakeでの認証を行います。
EKS を構成する¶
Snowflake と互換性のある ID トークンを発行するように EKS を構成します。
snowflakecomputing.com
というオーディエンスクレームを含む ID トークンを構成します。以下は、適切なオーディエンスによる YAML 構成の例です。
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.com
Snowflakeの構成¶
Snowflakeを構成するには、ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うSnowflakeサービスユーザー、つまりタイプが SERVICE
のユーザーを作成します。
始める前に
Snowflakeを正常に構成するには、次の情報が必要です。
Kubernetesサービスアカウント用に ID トークンを生成している OIDC プロバイダーの発行者 URL。この発行者 URL を取得するには、次のタスクのいずれかを実行します。
クラスターの Overview タブに移動し、OpenID Connect provider URL フィールドの値をコピーします。
API サーバーエンドポイントにアクセスできる状態で、次のコマンドを実行します。
aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
Kubernetesサービスアカウントの名前空間と名前。この情報を使用して、OIDC プロバイダーが発行した ID トークンのサブジェクトを構築します。
ワークロードのサービスユーザーを作成するには:
Snowsight にサインインします。
ワークシートのリストを開くには、Projects » Worksheets を選択します。
新しい SQL ワークシートを開くには、+ を選択します。
ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うサービスユーザーを作成するには、ワークシートの CREATE USER ステートメントを実行します。
CREATE USER my_eks_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://oidc.eks.<region>.amazonaws.com/id/<issuer_id>' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
ここでは、
ISSUER
およびSUBJECT
は、これらのステップを開始する前に取得した値です。
Snowflakeドライバーを使用するようにワークロードを構成する¶
注釈
ワークロードIDフェデレーションをサポートする任意のSnowflakeドライバーを使用するようにワークロードを構成できます。完全なリストについては、 サポートされているSnowflakeドライバー をご参照ください。
ワークロードにPythonドライバーが必要な場合は、以下のステップを完了します。
Pythonアプリケーションコードに、以下のソースコードを追加します。
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
ここでは、
service_account_token_path
は、EKS を構成する ステップで作成したものです。このステップの YAML の例に基づくと、トークンパスは/var/run/secrets/tokens/snowflake-token
になります。Pythonアプリケーションを実行します。ワークロードIDフェデレーションを使用してSnowflakeでの認証を行います。
Azure Kubernetes Service (AKS) から OpenID Connect (OIDC)発行者を使用したSnowflakeでの認証¶
以下にリストされている各セクションのステップを完了し、ワークロードIDフェデレーションを使用して Azure Kubernetes Service (AKS) からSnowflakeでの認証を行います。
AKS を構成する¶
Snowflake と互換性のある ID トークンを発行するように AKS を構成します。
Snowflake と互換性のある ID トークンを発行するように AKS を構成します。
snowflakecomputing.com
というオーディエンスクレームを含む ID トークンを構成します。以下は、適切なオーディエンスによる YAML 構成の例です。
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.com
Snowflakeの構成¶
Snowflakeを構成するには、ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うSnowflakeサービスユーザー、つまりタイプが SERVICE
のユーザーを作成します。
始める前に
Snowflakeを正常に構成するには、次の情報が必要です。
Kubernetesサービスアカウント用に ID トークンを生成している OIDC プロバイダーの発行者 URL。この発行者 URL を取得するには、Microsoft のドキュメント をご参照ください。
Kubernetesサービスアカウントの名前空間と名前。この情報を使用して、OIDC プロバイダーが発行した ID トークンのサブジェクトを構築します。
ワークロードのサービスユーザーを作成するには:
Snowsight にサインインします。
ワークシートのリストを開くには、Projects » Worksheets を選択します。
新しい SQL ワークシートを開くには、+ を選択します。
ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うサービスユーザーを作成するには、ワークシートの CREATE USER ステートメントを実行します。
CREATE USER my_aks_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://<region>.oic.prod-aks.azure.com/<tenant_id>/<uuid>/' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
ここでは、
ISSUER
およびSUBJECT
は、これらのステップを開始する前に取得した値です。
Snowflakeドライバーを使用するようにワークロードを構成する¶
注釈
ワークロードIDフェデレーションをサポートする任意のSnowflakeドライバーを使用するようにワークロードを構成できます。完全なリストについては、 サポートされているSnowflakeドライバー をご参照ください。
ワークロードにPythonドライバーが必要な場合は、以下のステップを完了します。
Pythonアプリケーションコードに、以下のソースコードを追加します。
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
ここでは、
service_account_token_path
は、AKS を構成する ステップで作成したものです。このステップの YAML の例に基づくと、トークンパスは/var/run/secrets/tokens/snowflake-token
になります。Pythonアプリケーションを実行します。ワークロードIDフェデレーションを使用してSnowflakeでの認証を行います。
Google Kubernetes Engine (GKE) から OpenID Connect (OIDC)発行者を使用したSnowflakeでの認証¶
以下にリストされている各セクションのステップを完了し、ワークロードIDフェデレーションを使用して Google Kubernetes Engine (GKE) からSnowflakeでの認証を行います。
GKE を構成する¶
Snowflake と互換性のある ID トークンを発行するように GKE を構成します。
snowflakecomputing.com
というオーディエンスクレームを含む ID トークンを構成します。以下は、適切なオーディエンスによる YAML 構成の例です。
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.com
Snowflakeの構成¶
Snowflakeを構成するには、ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うSnowflakeサービスユーザー、つまりタイプが SERVICE
のユーザーを作成します。
始める前に
Snowflakeを正常に構成するには、次の情報が必要です。
その Google Cloud プロジェクト ID、クラスターのリージョン、クラスター名。この情報を使用して、OIDC 発行者を構築します。
Kubernetesサービスアカウントの名前空間と名前。この情報を使用して、OIDC プロバイダーが発行した ID トークンのサブジェクトを構築します。
ワークロードのサービスユーザーを作成するには:
Snowsight にサインインします。
ワークシートのリストを開くには、Projects » Worksheets を選択します。
新しい SQL ワークシートを開くには、+ を選択します。
ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うサービスユーザーを作成するには、ワークシートの CREATE USER ステートメントを実行します。
CREATE USER my_gke_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://container.googleapis.com/v1/projects/<project_id>/locations/<region>/clusters/<cluster_name>' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
ここでは、
ISSUER
およびSUBJECT
は、これらのステップを開始する前に取得した値です。
Snowflakeドライバーを使用するようにワークロードを構成する¶
注釈
ワークロードIDフェデレーションをサポートする任意のSnowflakeドライバーを使用するようにワークロードを構成できます。完全なリストについては、 サポートされているSnowflakeドライバー をご参照ください。
ワークロードにPythonドライバーが必要な場合は、以下のステップを完了します。
Pythonアプリケーションコードに、以下のソースコードを追加します。
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
ここでは、
service_account_token_path
は、GKE を構成する ステップで作成したものです。このステップの YAML の例に基づくと、トークンパスは/var/run/secrets/tokens/snowflake-token
になります。Pythonアプリケーションを実行します。ワークロードIDフェデレーションを使用してSnowflakeでの認証を行います。
カスタムの OpenID Connect (OIDC)プロバイダーを使用したSnowflakeでの認証¶
以下にリストされている各セクションのステップを完了し、ワークロードIDフェデレーションを使用して、カスタムの OIDC プロバイダーからSnowflakeでの認証を行います。
OIDC プロバイダーの構成¶
Discovery仕様内で指定されているとおりに、間違いなく OIDC プロバイダーが`OpenID Configuration <https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig>`_ をサポートしていることを確認します。構成と構成の
jwks_uri
エンドポイントの両方がパブリックにアクセス可能である必要があります。OpenID プロバイダーが、
snowflakecomputing.com
または空でないカスタムリストに設定されたオーディエンスクレームを含む ID トークンを発行するように構成します。空でないカスタムリストを定義する場合は、Snowflakeでサービスユーザーを作成するときに指定する必要があります。
Snowflakeの構成¶
Snowflakeを構成するには、ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うSnowflakeサービスユーザー、つまりタイプが SERVICE
のユーザーを作成します。
始める前に
Snowflakeを正常に構成するには、次の情報が必要です。
OIDC プロバイダーの発行者 URL。
ワークロードに関連するサブジェクトクレーム。
これらの値はいずれも、ワークロード用に発行された ID トークンの iss
クレームと sub
クレームを解析することで取得できます。たとえば、Unixライクな環境に jq
、cat
、echo
でアクセスできる場合、ID トークンをファイルに保存して、次のコマンドで実行することができます。
ID_TOKEN_PATH=<id_token_path>
JWS_PAYLOAD=$(cat $ID_TOKEN_PATH | jq -R 'split(".") | .[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson')
echo "ISSUER = '$(echo $JWS_PAYLOAD | jq -r .iss)'"
echo "SUBJECT = '$(echo $JWS_PAYLOAD | jq -r .sub)'"
ID を取得する方法については、OIDC プロバイダーのドキュメントをご参照ください。
ワークロードのサービスユーザーを作成するには:
Snowsight にサインインします。
ワークシートのリストを開くには、Projects » Worksheets を選択します。
新しい SQL ワークシートを開くには、+ を選択します。
ワークロードIDフェデレーションを使用してSnowflakeでの認証を行うサービスユーザーを作成するには、ワークシートの CREATE USER ステートメントを実行します。
CREATE USER my_custom_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = '<issuer>' SUBJECT = '<subject>' OIDC_AUDIENCE_LIST = ('<custom_audience>') ) TYPE = SERVICE;
条件:
ISSUER
およびSUBJECT
は、これらのステップを開始する前に取得した値です。OIDC_AUDIENCE_LIST
は、OIDC プロバイダーの構成 で設定された ID トークンのオーディエンスクレームの空でないスーパーセットです。ID トークンのオーディエンスクレームがsnowflakecomputing.com
の場合、OIDC_AUDIENCE_LIST
を指定する必要はありません。
Snowflakeドライバーを使用するようにワークロードを構成する¶
注釈
ワークロードIDフェデレーションをサポートする任意のSnowflakeドライバーを使用するようにワークロードを構成できます。完全なリストについては、 サポートされているSnowflakeドライバー をご参照ください。
ワークロードにPythonドライバーが必要な場合は、以下のステップを完了します。
Pythonアプリケーションコードに、以下のソースコードを追加します。
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token='<id_token>' )
ここでは、
id_token
は、ワークロードの OIDC プロバイダーから受信した期限切れの ID トークンです。このトークンを取得する方法については、OIDC プロバイダーのドキュメントをご参照ください。Pythonアプリケーションを実行します。ワークロードIDフェデレーションを使用してSnowflakeでの認証を行います。
制限と考慮事項¶
Azureワークロードは、Azure中国、Azure US 政府などのAzureソブリンクラウドに配置することはできません。この制限は、アカウントのSnowflakeリージョンに関連していません。