フェデレーション認証を使用するためのSnowflakeの構成

このトピックでは、 SAML2 セキュリティ統合を使用して、フェデレーション認証用にSnowflakeを構成する方法について説明します。このトピックでは、 Snowflakeで動作するように IdP をすでに構成 していることを前提としています。

注釈

SAML2 セキュリティ統合は、廃止された SAML_IDENTITY_PROVIDER アカウントパラメーターを置き換えます。

この廃止されたアカウントパラメーターを使用する既存の SSO 実装がある場合は、フェデレーション認証用にSnowflakeを構成する前に、 SAML セキュリティ統合に移行 する必要があります。

Snowflakeは、廃止されたアカウントパラメーターを使用する実装がある限り、そのパラメーターを引き続きサポートします。

このトピックの内容:

SAML2 セキュリティ統合を作成する

Snowflakeは、 SAML2 セキュリティ統合を使用して、フェデレーション認証を実装するために使用している IdP と統合します。 CREATE SECURITY INTEGRATION コマンドを使用して、 SSO のSnowflakeの構成を開始します。

重要

SSO の IdP を構成する 場合は、Snowflakeアカウントの URL を入力します。この URL の 形式 は、セキュリティ統合の SAML2_SNOWFLAKE_ISSUER_URL および SAML2_SNOWFLAKE_ACS_URL プロパティの URLs と一致する必要があります。

セキュリティ統合の作成時にこれらのプロパティを定義しない場合は、デフォルトでアカウントの レガシー URL になります。

たとえば、プライベート接続でアカウント名 URL を使用するセキュリティ統合を作成するには、次の SQL コマンドを実行します。

CREATE SECURITY INTEGRATION my_idp
  TYPE = saml2
  ENABLED = true
  SAML2_ISSUER = 'https://example.com'
  SAML2_SSO_URL = 'http://myssoprovider.com'
  SAML2_PROVIDER = 'ADFS'
  SAML2_X509_CERT = 'MIICr...'
  SAML2_SNOWFLAKE_ISSUER_URL = 'https://<orgname>-<account_name>.privatelink.snowflakecomputing.com'
  SAML2_SNOWFLAKE_ACS_URL = 'https://<orgname>-<account_name>.privatelink.snowflakecomputing.com/fed/login';
Copy

SAML2_SNOWFLAKE_ACS_URL プロパティの URL には /fed/login が追加されることに注意してください。Snowflakeアカウントの URL 形式の詳細については、 URL での接続 をご参照ください。

SAML2 セキュリティ統合を構成した後、セキュリティ統合を使用して次のタスクを実行します。

  • SAML アサーションを暗号化する

  • 署名済みの SAML リクエストを送信する

  • SAML NameID 形式を指定する

  • SAML2 セキュリティ統合メタデータをエクスポートする

  • Snowflakeプロシージャに再認証を強制する

注釈

アカウントが Business Critical Edition以上 の場合は、 クライアントリダイレクトで SAML2 セキュリティ統合を使用 できます。

詳細については、 クライアント接続のリダイレクト をご参照ください。

ユーザーの SSO ログインを構成する

SAML2 セキュリティ統合を作成した後、ユーザーが IdP またはSnowflakeから SSO ログインを開始するかどうかを構成できます。

IdP によって開始される SSO には、Snowflakeでの構成は必要ありません。Snowflakeへのアクセス方法をユーザーに通知するだけで済みます(例: 内部ポータルの使用)。

SAML2_ENABLE_SP_INITIATED プロパティは、Snowflake主導の SSO を有効にします。 SAML2_SP_INITIATED_LOGIN_PAGE_LABEL プロパティは、 IdP を識別する文字列を定義します。この文字列がSnowflakeログインページに表示されるため、ユーザーは IdP にアクセスできます。

ALTER SECURITY INTEGRATION コマンドを使用して、これらのプロパティを設定します。

ALTER SECURITY INTEGRATION my_idp SET SAML2_ENABLE_SP_INITIATED = true;
ALTER SECURITY INTEGRATION my_idp SET SAML2_SP_INITIATED_LOGIN_PAGE_LABEL = 'My IdP';
Copy

ユーザーの SSO ログインを構成した後にクライアントがSnowflakeに接続する方法については、 Snowflakeに接続するクライアントアプリケーションでの SSO の使用 をご参照ください

SAML アサーションを暗号化する

SAML2_SNOWFLAKE_X509_CERT プロパティにより、 SAML2 アサーションがSnowflakeの公開証明書を使用して暗号化され、ユーザーがフェデレーション認証を介してSnowflakeにアクセスする際のトラフィックが確実に保護されます。

顧客 IdP から暗号化されたアサーションを受信した後、Snowflakeはその秘密キーで暗号化されたアサーションを復号化します。Snowflakeが、その秘密鍵をエクスポートまたは使用可能にすることはありません。

SAML アサーションを暗号化するには、以下のセクションをご参照ください。

Snowflakeから公開証明書をエクスポートする

SAML2 セキュリティ統合を作成 した後、次のステップに従います。

  1. SAML2 統合で次の SQL ステートメントを実行します。

    DESC SECURITY INTEGRATION my_idp;
    
    Copy
  2. 行7で SAML2_SNOWFLAKE_X509_CERT の値を探します。これは、 PEM 形式の公開証明書です。

  3. BEGIN CERTIFICATEEND CERTIFICATE の区切り文字が含まれていることを確認して、値を保存します。たとえば、以下のコードブロックには、切り捨てられた PEM 形式の証明書が含まれています。

    -----BEGIN CERTIFICATE-----
    MIICr...
    -----END CERTIFICATE-----
    
    Copy

証明書署名要求(CSR)を作成する --- オプション

デフォルトでは、Snowflakeの SAML2 セキュリティ統合は、 SAML IdP の自己署名証明書を使用して SAML アサーションを暗号化します。組織が認証機関(CA)から発行された証明書を使用する必要がある場合は、以下のステップを実行します。

  1. システム関数 SYSTEM$GENERATE_SAML_CSR を使用して、Snowflakeから証明書署名要求(CSR)を生成します。

  2. 証明書を発行できるように、選択したCAにCSRを提供します。

  3. 次の ALTER ステートメントを使用し、 BEGIN CERTIFICATE および END CERTIFICATE 区切り文字なしで、Base64でエンコードされた証明書を SAML 統合にアップロードします。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SNOWFLAKE_X509_CERT = 'AX2bv...';
    
    Copy
  4. DESCRIBE INTEGRATION コマンドを実行して、更新されたセキュリティ統合を表示します。

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

そうすると、関数によって生成された CSR を使用して、自分の秘密キーの証明書をSnowflakeにアップロードできます。

SAML IdP を構成する

  1. 保存した証明書を PEM 形式で組織の IdP に SAML 暗号化証明書としてアップロードします。

  2. Snowflakeサービスプロバイダー(SP)の SAML アサーションを暗号化するように IdP を構成します。

署名済みの SAML リクエストを送信する

署名済みの SAML リクエストをSnowflakeから IdP に送信して、Snowflakeが正規のサービスプロバイダーであることを確認できます。Snowflakeを検証するには、 SAML2 セキュリティ統合に保存されている証明書を使用するように IdP を設定して、 SAML リクエストがSnowflakeを偽装しているサードパーティではなく、Snowflakeから発信されるようにします。

SAML2_SIGN_REQUEST プロパティを設定する

初めて SAML2 セキュリティ統合を作成 する場合は、必ず SAML2_SIGN_REQUEST プロパティを設定してください。

SAML2 プロパティを設定せずに SAML2_SIGN_REQUEST セキュリティ統合を作成した場合は、次のステップに従います。

  1. ACCOUNTADMIN ロールを持つユーザーとして ALTER SECURITY INTEGRATION コマンドを実行し、セキュリティ統合を更新します。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SIGN_REQUEST = true;
    
    Copy
  2. DESCRIBE INTEGRATION コマンドを実行して、更新されたセキュリティ統合を表示します。

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

署名済みのリクエストを受け入れるように IdP を構成する

Snowflakeから署名済みのリクエストを受け入れるようにIdPを設定します。構成中、 IdP には SAML2_SNOWFLAKE_X509_CERT プロパティに格納された証明書が必要です。IdPはこの証明書を使用して、SAMLリクエストがSnowflakeからのものであることを確認します。

注釈

Snowflakeは IdP の構成を担当しません。IdP の構成については、内部セキュリティ管理者にご相談ください。

  1. DESCRIBE INTEGRATION コマンドを実行します。

    DESC SECURITY INTEGRATION my_idp;
    
    Copy
  2. SAML2_SNOWFLAKE_X509_CERT プロパティ値を行7に保存して、 IdP 設定で使用します。

SAML NameID 形式を指定する

Snowflakeでは、Snowflakeから IdP に送信される、送信 SAML 認証リクエストで要求される SAML NameID フォーマットを管理者(つまり、 ACCOUNTADMIN ロールを持つユーザー)が指定できるようにします。

SAML NameID 形式を指定すると、Snowflakeで IdP からの SAML アサーションでユーザーの識別属性(つまり、 SAML サブジェクト)の期待値を設定して、Snowflakeへの有効な認証を確認できます。

SAML NameID 形式は、 SAML2 セキュリティ統合に統合できます。次のいずれかの値を使用して、セキュリティ統合で SAML NameID を指定できます。

  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

  • urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName

  • urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName

  • urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient

SAML NameID 形式が指定されていない場合、Snowflakeは次の値を使用します。

urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

SAML2_REQUESTED_NAMEID_FORMAT プロパティを設定する

初めて SAML2 セキュリティ統合を作成 する場合は、必ず SAML2_REQUESTED_NAMEID_FORMAT プロパティを設定してください。

SAML2 プロパティを設定せずに SAML2_REQUESTED_NAMEID_FORMAT セキュリティ統合を作成した場合は、次のステップに従います。

  1. ACCOUNTADMIN ロールを持つユーザーとして ALTER SECURITY INTEGRATION コマンドを実行し、 SAML NameId 形式を指定します。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_REQUESTED_NAMEID_FORMAT = '<string_literal>';
    
    Copy
  2. DESCRIBE INTEGRATION コマンドを実行して、更新されたセキュリティ統合を表示します。

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

IdP を構成して、 NameID を指定する

SAML アサーションで SAML NameID 形式を指定するように IdP を構成します。

注釈

Snowflakeは IdP の構成を担当しません。IdP の構成については、内部セキュリティ管理者にご相談ください。

SAML2 セキュリティ統合メタデータをエクスポートする

Snowflakeは、IdPでのSnowflakeサービスプロバイダーの設定を容易にするために、SAML2セキュリティ統合用のSAML 2.0メタデータを提供します。

SAML 2.0メタデータは SAML2_SNOWFLAKE_METADATA プロパティに含まれており、SAML2 セキュリティ統合で DESCRIBE INTEGRATION コマンドを実行して取得できます。例:

DESC SECURITY INTEGRATION my_idp;
Copy
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
              property              | property_type |                               property_value                                | property_default |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
SAML2_X509_CERT                     | String        | MIICr...                                                                    |                  |
SAML2_PROVIDER                      | String        | OKTA                                                                        |                  |
SAML2_ENABLE_SP_INITIATED           | Boolean       | false                                                                       | false            |
SAML2_SP_INITIATED_LOGIN_PAGE_LABEL | String        | my_idp                                                                      |                  |
SAML2_SSO_URL                       | String        | https://okta.com/sso                                                        |                  |
SAML2_ISSUER                        | String        | https://okta.com                                                            |                  |
SAML2_SNOWFLAKE_X509_CERT           | String        | MIICr...                                                                    |                  |
SAML2_REQUESTED_NAMEID_FORMAT       | String        | urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress                      |                  |
SAML2_SNOWFLAKE_ACS_URL             | String        | https://example.snowflakecomputing.com/fed/login                            |                  |
SAML2_SNOWFLAKE_ISSUER_URL          | String        | https://example.snowflakecomputing.com                                      |                  |
SAML2_SNOWFLAKE_METADATA            | String        | <md:EntityDescriptor entityID="https://example.snowflakecomputing.com"> ... |                  |
SAML2_DIGEST_METHODS_USED           | String        | http://www.w3.org/2001/04/xmlenc#sha256                                     |                  |
SAML2_SIGNATURE_METHODS_USED        | String        | http://www.w3.org/2001/04/xmldsig-more#rsa-sha256                           |                  |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+

代表的な例として、 SAML2_SNOWFLAKE_METADATA プロパティからフォーマットされた SAML 2.0 XML メタデータを以下に示します。 signing および encryptionX509certificate 値は切り捨てられることに注意してください。

<md:EntityDescriptor xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" entityID="https://example.snowflakecomputing.com">
 <md:SPSSODescriptor AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  <md:KeyDescriptor use="signing">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICr...</dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:KeyDescriptor use="encryption">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICr...</dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:AssertionConsumerService index="0" isDefault="true" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://example.snowflakecomputing.com/fed/login" />
 </md:SPSSODescriptor>
</md:EntityDescriptor>
Copy

参考までに、次のテーブルは、XMLメタデータタグをSnowflake SAML2セキュリティ統合プロパティにマップしています。

XML 出力

SAML2 セキュリティ統合プロパティ

entityID

SAML2_SNOWFLAKE_ISSUER_URL

AuthnRequestsSigned

SAML2_SIGN_REQUEST

署名証明書

SAML2_SNOWFLAKE_X509_CERT

暗号化証明書

SAML2_SNOWFLAKE_X509_CERT

アサーションコンシューマーサービス URL

SAML2_SNOWFLAKE_ACS_URL

Snowflakeに再認証を強制する

Snowflakeは、SAML2セキュリティ統合の構成をサポートしており、初期認証SSOフロー中、または現在のSnowflakeセッションの有効期限が切れたときに、認証ユーザーはSnowflakeにアクセスするために再認証する必要があります。

Snowflake SAML2 セキュリティ統合でこの機能を有効にすると、SnowflakeはSnowflakeから IdP への送信 SAML リクエストで SAML 仕様 ForceAuthn プロパティを True に設定します。IdP が ForceAuthn プロパティを True に設定したリクエストを受信すると、IdP はSnowflakeにリクエストを送信します。その結果、ユーザーはSnowflakeにアクセスするために認証情報(ユーザー名、パスワードなど)を再入力するよう求められます。

この機能は、再認証を通じてセキュリティを強化します。さらに、再認証プロンプトを使用すると、 SSO を開始してSnowflakeにアクセスするために使用したものとは異なる認証情報のセットをユーザーは入力できます。

重要

この機能を実装する前に、 IdP が SSO 認証フロー中のIDの切り替えをサポートしていることを確認してください。

この機能がSnowflakeに実装されており、IdP が最初の SSO 認証フロー中にIDの切り替えをサポートしていない場合、ユーザーは、再認証プロンプトで提供される異なる認証情報のセットを使用してSnowflakeにアクセスできない可能性があります。

初めて SAML2 セキュリティ統合を作成 する場合は、必ず SAML2_FORCE_AUTHN プロパティを設定してください。

Snowflakeにアクセスするために強制的な再認証をサポートするように既存の SAML2 セキュリティ統合を更新するには、次のステップに従います。

  1. ALTER SECURITY INTEGRATION コマンドを実行して、セキュリティ統合を更新します。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_FORCE_AUTHN = true;
    
    Copy
  2. DESCRIBE INTEGRATION コマンドを実行して、更新されたセキュリティ統合を表示します。

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

条件:

SAML2_FORCE_AUTHN = TRUE | FALSE

ユーザーが最初の認証フロー中に、Snowflakeにアクセスするために再認証を強制されるかどうかを示すブール値。 TRUE に設定すると、SnowflakeからIDプロバイダーへの送信リクエストで、Snowflakeは ForceAuthn SAML プロパティを TRUE に設定します。

  • TRUE は、IDプロバイダーとの有効なセッションが存在する場合でも、ユーザーにSnowflakeにアクセスするための再認証を強制します。

  • FALSE は、Snowflakeにアクセスするためにユーザーに再認証を強制することはありません。

デフォルト: FALSE

カスタムログアウトエンドポイント

Snowflakeは、Snowflakeからログアウトした後にユーザーをリダイレクトする、カスタムエンドポイント URL の定義をサポートしています。エンドポイントは、 SAML2 セキュリティ統合の SAML2_POST_LOGOUT_REDIRECT_URL プロパティを介して設定されます。

SAML SSO を介してSnowflakeにアクセスするユーザーに対して有効にした場合は、 Classic Console の Log Out ボタンをクリックすると、SnowflakeはSnowflakeセッションを終了し、ユーザーを指定されたエンドポイントにリダイレクトします。

重要

この動作は、 Snowsight には適用 されません

ログアウトエンドポイントを定義すると、管理者は、Snowflakeからログアウトした後にユーザーがリダイレクトされる場所を制御できます。たとえば、カスタムエンドポイントは、スクリプトをトリガーして IdP セッションを同時に終了できます。この実装の利点は、Snowflakeセッションと IdP セッションの両方が終了することです。このため、ユーザーは IdP に対して再認証してSnowflakeにアクセスする必要があります。

初めて SAML2 セキュリティ統合を作成 する場合は、必ず SAML2_POST_LOGOUT_REDIRECT_URL プロパティを設定してください。

SAML2_POST_LOGOUT_REDIRECT_URL プロパティを設定せずに SAML2 セキュリティ統合を作成した場合は、 ALTER SECURITY INTEGRATION コマンドを実行してカスタムログアウトエンドポイントを構成します。

ALTER SECURITY INTEGRATION my_idp SET SAML2_POST_LOGOUT_REDIRECT_URL = 'https://logout.example.com';
Copy

SAML2 セキュリティ統合を管理する

ALTER SECURITY INTEGRATION コマンドを使用して、 SAML2 セキュリティ統合を管理できます。例:

  • X.509証明書を既存の SAML2 セキュリティ統合に文字列として更新します。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_X509_CERT = 'AX2bv...';
    
    Copy
  • SAML リクエスト署名を検証するため、または SAML レスポンスを暗号化するために、 IdP を構成する場合は、既存の秘密キーと自己署名証明書を上書きし、新しい秘密キーと自己署名証明書を生成できます。

    1. 新しい秘密キーを生成します。

      注意

      以下のコマンドを実行すると、 SAML 認証が機能しなくなります。これは、 IdP がまだ古い SAML2_SNOWFLAKE_X509_CERT 証明書を使用しているためです。混乱を最小限に抑えるため、以下のコマンドはユーザーがアクティブでないときに実行してください。

      ALTER SECURITY INTEGRATION my_idp REFRESH SAML2_SNOWFLAKE_PRIVATE_KEY;
      
      Copy
    2. セキュリティ統合の SAML2_SNOWFLAKE_X509_CERT プロパティの値を取得します。

      DESCRIBE SECURITY INTEGRATION my_idp;
      SELECT "property_value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
        WHERE "property" = 'SAML2_SNOWFLAKE_X509_CERT';
      
      Copy
    3. 取得した値を IdP にアップロードして、 IdP 内の古い証明書を新しい証明書に置き換えます。

  • 署名済みのリクエストを有効にします。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SIGN_REQUEST = true;
    
    Copy
  • NameID 形式を指定します。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_REQUESTED_NAMEID_FORMAT = 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified';
    
    Copy
  • 既存のセキュリティ統合を更新して、強制再認証を有効にします。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_FORCE_AUTHN = true;
    
    Copy
  • 既存のセキュリティ統合を更新して、強制再認証を無効にします。

    ALTER SECURITY INTEGRATION my_idp UNSET SAML2_FORCE_AUTHN;
    
    Copy
  • カスタムログアウトエンドポイントを更新します。

    ALTER SECURITY INTEGRATION my_idp SET SAML2_POST_LOGOUT_REDIRECT_URL = 'https://logout.example.com';
    
    Copy

詳細については、 ALTER SECURITY INTEGRATION をご参照ください。

SSO 構成を複製する

Snowflakeは、ソースアカウントからターゲットアカウントへの SAML2 セキュリティ統合 の複製とフェールオーバー/フェールバックをサポートします。

詳細については、 複数のアカウントにわたるセキュリティ統合とネットワークポリシーの複製 をご参照ください。