高度な SAML SSO 機能

このトピックでは、Snowflakeで高度な SAML SSO 機能を構成して使用する方法について説明します。

このトピックの内容:

概要

SAML2 セキュリティ統合は、Snowflakeの高度な SAML SSO 機能の基盤です。

SAML2 セキュリティ統合を構成した後、セキュリティ統合を使用して、 SAML SSO 構成を管理し、 SAML アサーションを暗号化できます。

SAML2 セキュリティ統合への移行

SAML2 セキュリティ統合は、Snowflakeの IdP 情報を指定し、 SAML_IDENTITY_PROVIDER パラメーターに含まれる情報を置き換えることを目的としています。

Snowflakeで IdP を指定するには、2つのオプションがあります。

  1. システム関数を使用して、既存の IdP 情報をセキュリティ統合に移行します。

  2. IdP 情報が含まれるようにセキュリティ統合を作成または置き換えます。

オプション1は、 SAML_IDENTITY_PROVIDER パラメーターに基づいてSnowflakeへのフェデレーション認証を使用する IdP 設定が すでになされている 場合に推奨されるパスウェイです。

アカウントに SAML_IDENTITY_PROVIDER パラメーターが ない 場合、オプション2が推奨されるパスウェイです。

オプション1:システム関数を使用する

システム関数 SYSTEM$MIGRATE_SAML_IDP_REGISTRATION を使用して、既存の IdP 構成を SAML_IDENTITY_PROVIDER パラメーターからセキュリティ統合に移行できます。

このシステム関数を実行した後は、 SAML_IDENTITY_PROVIDER パラメーターを SAML SSO の構成や管理に使用しないでください。代わりに、 SAML2セキュリティ統合の管理 に示すように、 SAML2 セキュリティ統合を管理します。

注釈

必要に応じて、システム関数を実行する前に、次のステートメントを実行して SAML_IDENTITY_PROVIDER 構成を確認できます。

show parameters like 'SAML_IDENTITY_PROVIDER' in account;

オプション2:セキュリティ統合を作成するか置き換える

統合認証を使用するようにSnowflakeで既存の IdP を構成しておらず、統合認証用にSnowflakeで IdP を構成する場合は、 CREATE SECURITY INTEGRATION を使用して TYPE = SAML2 でセキュリティ統合を作成します。

TYPE = SAML2 に既存のセキュリティ統合があり、1つ以上のパラメーターを更新する必要がある場合は、 ALTER SECURITY INTEGRATION ステートメントを実行する、 または セキュリティ統合全体を CREATE OR REPLACE SECURITY INTEGRATION ステートメントに置き換えます。

SAML アサーションの暗号化

Snowflakeを使用すると、ユーザーが IdP に対して認証に成功した後、組織の IdP が暗号化された SAML2 アサーションをSnowflakeに送信できます。

暗号化された SAML2 アサーションにより、ユーザーはフェデレーション SSO を介してSnowflakeにアクセスしながら、安全に情報を転送できるようになります。お客様は、Snowflakeの公開証明書を使用して SAML アサーションを暗号化できます。顧客 IdP から暗号化されたアサーションを受け取ると、Snowflakeはその秘密鍵で暗号化されたアサーションを復号化します。Snowflakeが、その秘密鍵をエクスポートまたは使用可能にすることはありません。

暗号化された SAML アサーションは、 SAML2 セキュリティ統合に統合されています。既存の SAML2 セキュリティ統合を使用するか、新しい SAML2 セキュリティ統合を作成できます。

暗号化された SAML アサーションを構成して使用する一般的な手順は次のとおりです。

  1. SAML2 セキュリティ統合を作成します。

  2. Snowflakeから公開証明書を PEM 形式でエクスポートします。

  3. 公開証明書を SAML IdP にインポートします。

  4. Snowflakeに接続します。

暗号化された SAML アサーションの手順

以下のステップに従って暗号化された SAML アサーションを構成し、Snowflakeに接続します。

ステップ1: SAML2 セキュリティ統合を作成または移行する

Snowflakeに既存の SAML 設定があり、この機能を使用したい場合は、この SQL ステートメントを実行して、 SAML2 セキュリティ統合に移行できます。このシステム関数の詳細については、 SYSTEM$MIGRATE_SAML_IDP_REGISTRATION をご参照ください。

select system$migrate_saml_idp_registration('<integration_name>', '<issuer>');

それ以外の場合は、次の SQL ステートメントを実行して SAML2 セキュリティ統合を作成します。詳細については、 CREATE SECURITY INTEGRATION をご参照ください。

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='my_x509_cert'
    saml2_sp_initiated_login_page_label = 'my_idp'
    saml2_enable_sp_initiated = false;

ステップ2:Snowflakeから公開証明書をエクスポートする

Snowflakeから公開証明書をエクスポートするには、以下の手順を実行します。

  1. SAML2 統合で次の SQL ステートメントを実行して、 SAML2_SNOWFLAKE_X509_CERT 値(行7内)を取得します。

    desc security integration my_idp;
    
  2. 値を PEM 形式で保存します。必ず BEGIN CERTIFICATE および END CERTIFICATE 区切り文字を含めてください。以下は、 PEM 形式の切り捨てられた証明書の代表的な例です。

    -----BEGIN CERTIFICATE-----
    MIICrTCCAZWgAwIBAgIJAOF6EPk93wjlMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
    BAMMC1RFU1RBQ0NPVU5UMB4XDTIwMDE....
    -----END CERTIFICATE-----
    

証明書署名要求(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...';
    

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

ステップ3: SAML IdP を構成する

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

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

ステップ4:Snowflakeに接続する

IdP を構成した後、次のタスクを完了します。

  • IdP の設定を確認します。

  • Snowflakeでユーザーを作成し、ロールを割り当てます。

  • ユーザーがSnowflakeに接続する際、介する SSO が IdP から開始されるのか、 SP から開始されるのかを決定します。

    • IdP で開始された SSO の場合は、Snowflakeへのアクセス方法(例:内部ポータルへのアクセス)をユーザーに通知します。

    • SP で開始された SSO (つまり、ユーザーがSnowflakeにアクセスしてから顧客 IdP にリダイレクトされる)の場合、アカウントパラメーター SSO_LOGIN_PAGE をtrueに設定して、Snowflakeで開始された SSO を有効にします。ACCOUNTADMIN ロールを持つユーザーとして、次のステートメントを実行します。

      use role accountadmin;
      
      alter account set SSO_LOGIN_PAGE = true;
      
  • フェデレーション認証の管理/使用 に示すようにSnowflakeにアクセスします。

署名済みの SAML リクエスト

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

署名済みの SAML リクエストは、 SAML2 セキュリティ統合に統合されています。 type = saml2 の既存のセキュリティ統合を使用するか、新しいセキュリティ統合を作成して、署名済みの SAML リクエストを使用します。

IdP が署名済みの SAML リクエストの受け入れをサポートしている場合、署名済みの SAML リクエストを構成して使用するための一般的な手順は次のとおりです。

  1. セキュリティ統合を作成または更新します。

  2. SAML2 セキュリティ統合を更新します。

  3. 署名済みの SAML リクエストを受け入れるように IdP を構成します。

  4. Snowflakeに接続します。

署名済みの SAML リクエスト手順

以下のステップに従って署名済みの SAML アサーションを構成し、Snowflakeに接続します。

ステップ1: SAML2 セキュリティ統合を作成または移行する

Snowflakeに既存の SAML 設定があり、この機能を使用したい場合は、この SQL ステートメントを実行して、 SAML2 セキュリティ統合に移行できます。このシステム関数の詳細については、 SYSTEM$MIGRATE_SAML_IDP_REGISTRATION をご参照ください。

select system$migrate_saml_idp_registration('<integration_name>', '<issuer>');

それ以外の場合は、次の SQL ステートメントを実行して SAML2 セキュリティ統合を作成します。詳細については、 CREATE SECURITY INTEGRATION をご参照ください。

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='my_x509_cert'
    saml2_sp_initiated_login_page_label = 'my_idp'
    saml2_enable_sp_initiated = false;

ステップ2: SAML2 セキュリティ統合を更新する

Snowflakeで署名済みのリクエストを使用するには、Snowflakeで以下を実行する必要があります。

  • セキュリティ統合を有効にしてリクエストに署名します。

  • 次のステップで使用するために saml2_snowflake_x509_cert の値を保存します。

アカウント管理者(つまり、 ACCOUNTADMIN ロールを持つユーザー)として、次のステートメントを実行します。

-- update the security integration

alter security integration my_idp set SAML2_SIGN_REQUEST = true;

-- view the updated security integration, save the certificate value in row 7.

desc security integration my_idp;

ステップ3:署名済みのリクエストを受け入れるように IdP を設定する

Snowflakeから署名済みのリクエストを受け入れるように IdP を設定します。構成中、 IdP は証明書を saml2_snowflake_x509_cert パラメーターに保存する必要があります。IdP はこの証明書を使用して、 SAML リクエストがSnowflakeからのものであることを確認します。

注釈

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

ステップ4:Snowflakeに接続する

IdP を構成した後、次のタスクを完了します。

  • IdP の設定を確認します。

  • Snowflakeでユーザーを作成し、ロールを割り当てます。

  • ユーザーがSnowflakeに接続する際、介する SSO が IdP から開始されるのか、 SP から開始されるのかを決定します。

    • IdP で開始された SSO の場合は、Snowflakeへのアクセス方法(例:内部ポータルへのアクセス)をユーザーに通知します。

    • SP で開始された SSO (つまり、ユーザーがSnowflakeにアクセスしてから顧客 IdP にリダイレクトされる)の場合、アカウントパラメーター SSO_LOGIN_PAGE をtrueに設定して、Snowflakeで開始された SSO を有効にします。ACCOUNTADMIN ロールを持つユーザーとして、次のステートメントを実行します。

      use role accountadmin;
      
      alter account set SSO_LOGIN_PAGE = true;
      
  • フェデレーション認証の管理/使用 に示すようにSnowflakeにアクセスします。

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

IdP が SAML アサーションで SAML NameID の指定をサポートしている場合、 NameID を構成して指定する一般的な手順は次のとおりです。

  1. Snowflakeで SAML2 セキュリティ統合を作成または移行します。

  2. NameId をサポートするように、セキュリティ統合を更新します。

  3. IdP を構成して、 SAML NameID 形式を指定します。

  4. Snowflakeに接続します。

SAML NameID 構成手順

以下のステップに従って SAML NameID 形式を構成し、Snowflakeに接続します。

ステップ1: SAML2 セキュリティ統合を作成または移行する

Snowflakeに既存の SAML 設定があり、この機能を使用したい場合は、この SQL ステートメントを実行して、 SAML2 セキュリティ統合に移行できます。このシステム関数の詳細については、 SYSTEM$MIGRATE_SAML_IDP_REGISTRATION をご参照ください。

select system$migrate_saml_idp_registration('<integration_name>', '<issuer>');

それ以外の場合は、次の SQL ステートメントを実行して SAML2 セキュリティ統合を作成します。詳細については、 CREATE SECURITY INTEGRATION をご参照ください。

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='my_x509_cert'
    saml2_sp_initiated_login_page_label = 'my_idp'
    saml2_enable_sp_initiated = false;

ステップ2: NameID の SAML2 セキュリティ統合を更新する

SAML NameID 形式を指定するには、アカウント管理者(つまり、 ACCOUNTADMIN ロールを持つユーザー)として、次のステートメントを実行します。

-- update the security integration

alter security integration my_idp set SAML2_REQUESTED_NAMEID_FORMAT = '<string_literal>';

-- view the updated security integration

desc security integration my_idp;

ステップ3: IdP を構成して、 NameID を指定する

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

注釈

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

ステップ4:Snowflakeに接続する

IdP を構成した後、次のタスクを完了します。

  • IdP の設定を確認します。

  • Snowflakeでユーザーを作成し、ロールを割り当てます。

  • ユーザーがSnowflakeに接続する際、介する SSO が IdP から開始されるのか、 SP から開始されるのかを決定します。

    • IdP で開始された SSO の場合は、Snowflakeへのアクセス方法(例:内部ポータルへのアクセス)をユーザーに通知します。

    • SP で開始された SSO (つまり、ユーザーがSnowflakeにアクセスしてから顧客 IdP にリダイレクトされる)の場合、アカウントパラメーター SSO_LOGIN_PAGE をtrueに設定して、Snowflakeで開始された SSO を有効にします。ACCOUNTADMIN ロールを持つユーザーとして、次のステートメントを実行します。

      use role accountadmin;
      
      alter account set SSO_LOGIN_PAGE = true;
      
  • フェデレーション認証の管理/使用 に示すようにSnowflakeにアクセスします。

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

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

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

desc security integration my_idp;

------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
              property              | property_type |                               property_value                                | property_default |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
SAML2_X509_CERT                     | String        | MIICrTCCAZWgAwIBAgIJAOF6EPk93wj...                                          |                  |
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        | MIICrTCCAZWgAwIBAgIJAOF6EPk93wj...                                          |                  |
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>MIICrTCCAZWgAwIBAgIJAOF6EPk93wj... </dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:KeyDescriptor use="encryption">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICrTCCAZWgAwIBAgIJAOF6EPk93wj... </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>

参考までに、次のテーブルは、 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

SAML2 セキュリティ統合の管理

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

  • X.509証明書を既存の SAML2 セキュリティ統合に文字列としてアップロードします。

    alter security integration my_idp set SAML2_SNOWFLAKE_X509_CERT = 'AX2bv...';
    
  • 既存の秘密鍵と自己署名証明書を上書きし、新しい秘密鍵と自己署名証明書を生成します。

    alter security integration my_idp refresh SAML2_SNOWFLAKE_PRIVATE_KEY;
    
  • 署名済みのリクエストを有効にします。

    alter security integration my_idp set SAML2_SIGN_REQUEST = true;
    
  • NameID 形式を指定します。

    alter security integration my_idp set SAML2_REQUESTED_NAMEID_FORMAT = 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified';
    

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