Cloud SQL で Managed Microsoft AD を使用する

このページでは、Cloud SQL を使用して次のことを行う方法について説明します。

  • Managed Service for Microsoft Active Directory(Managed Microsoft AD とも呼ばれます)と統合する。
  • AD ユーザーでインスタンスに接続する。

Managed Microsoft AD と統合される Cloud SQL インスタンスは、SQL 認証に加えて Windows 認証もサポートします。

始める前に

  1. Google Cloud Console で、プロジェクト名を選択します。
  2. Google Cloud プロジェクトの課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法
  3. Cloud SDK をインストールし、初期化します。
  4. ユーザー アカウントに Cloud SQL 管理者のロールがあることを確認します。IAM ページに移動します。
  5. 統合の前提条件を確認します。

Windows 認証を使用するインスタンスを作成する

インスタンスの作成時に Managed Microsoft AD と統合して、そのインスタンスに対して Windows 認証を有効にできます。統合するには、インスタンスが参加するドメインを選択します。ドメインの参加に失敗すると、インスタンスを作成できません。

Windows 認証を使用してインスタンスを作成するにあたっては、ヒント制限事項と代替案を確認してください。

パブリック IP を持つインスタンスは、プライベート IP も持っている場合に限りサポートされます。インスタンスに対してプライベート IP を有効にする必要があります。そのため、パブリック IP とプライベート IP の両方が使用可能である限り、インスタンスへの接続にどちらを使用するか選択できます。

Managed Microsoft AD と統合されたインスタンスを作成するオプションは次のとおりです。

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [インスタンスを作成] をクリックします。
  3. [SQL Server を選択] をクリックします。
  4. インスタンスの名前を入力します。インスタンス名には機密情報や個人を特定できる情報を含めないでください。インスタンス名は外部から閲覧可能です。インスタンス名にプロジェクト ID を含める必要はありません。これは、必要に応じて自動的に(ログファイルなどに)作成されます。
  5. 'sqlserver' ユーザーのパスワードを入力します。
  6. インスタンスのリージョンを設定します。Managed Microsoft AD と統合するためのベスト プラクティスをご覧ください。
  7. [構成オプション] セクションで、必要なオプションを設定します(ただし、認証オプションについては次の手順まで待ちます)。
  8. [認証] をクリックします。Managed Active Directory ドメインに参加するためのプルダウン メニューには、以前にプロジェクトに追加された Managed Microsoft AD ドメインが一覧表示されます。
  9. Managed Active Directory ドメインに参加するためのプルダウン メニューから、ドメインを選択します。
  10. 構成オプションの選択が終了したら、[作成] をクリックします。Cloud SQL は、プロダクトごと、プロジェクトごとのサービス アカウントを自動的に作成します。アカウントに適切なロールがない場合は、managedidentities.sqlintegrator のロールを付与するよう求められます。

gcloud

次のコマンドは、Managed Microsoft AD と統合し、Windows 認証が有効なインスタンスを作成します。インスタンスを作成する基本的なコマンドについては、インスタンスの作成をご覧ください。

gcloud コマンドで --active-directory-domain=DOMAIN のパラメータを指定します。たとえば、--active-directory-domain=ad.mydomain.com を指定します。

gcloud コマンドのプロトタイプを以下に示します。

gcloud beta sql instances create INSTANCE_NAME \
--database-version=EDITION \
--root-password=PASSWORD \
--active-directory-domain=DOMAIN\
--cpu=CPU \
--memory=MEMORY  \
--network=NETWORK

REST

REST API を使用すると、Managed Microsoft AD と統合するインスタンスを作成できます。このリクエストのプロトタイプに示すように、domain フィールドにドメイン(subdomain.mydomain.com など)を指定します。

{
   "databaseVersion":"database-version",
   "name":"instance-id",
   "region":"region",
   "rootPassword":"password",
   "settings":{
      "tier":"machine-type",
      "ipConfiguration":{
         "privateNetwork":"network"
      },
      "activeDirectoryConfig":{
         "domain":"domain"
      }
   }
}

Windows 認証を使用するインスタンスを更新する

ドメインの変更や追加を行うと、既存のインスタンスのドメインを更新できます。

インスタンスの更新に関する一般的な情報については、インスタンスの編集をご覧ください。

インスタンスが現在 Managed Active Directory ドメインに参加している場合、新しいドメインに参加させる前に、先に参加しているドメインからそのインスタンスを外します。更新に失敗すると、インスタンスがどのドメインにも参加できなくなる場合があります。

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. [編集] をクリックします。
  4. [認証] をクリックします。[Join an Active Directory domain] プルダウン メニューには、以前にプロジェクトに追加された Managed Microsoft AD ドメインが一覧表示されます。
  5. Managed Active Directory ドメインに参加するためのプルダウン メニューから、インスタンスの新しい(置換する)ドメインを選択します。
  6. [保存] をクリックして変更を適用します。

gcloud

以下は、既存のインスタンスを更新するコマンドのプロトタイプです。このコマンドは、ドメインを追加または置換します。次のように --active-directory-domain=DOMAIN をコマンドに渡します。

gcloud beta sql instances patch INSTANCE_NAME \
--active-directory-domain=DOMAIN

REST

REST API を使用すると、既存のインスタンスを更新できます。domain フィールドにドメイン(subdomain.mydomain.com など)を指定します。リクエストのプロトタイプは次のとおりです。

{
   "settings":{
      "activeDirectoryConfig":{
         "domain":"domain"
      }
   }
}

インスタンスから Windows 認証を削除する

既存のインスタンスから Windows 認証(および Managed Microsoft AD 統合)を削除できます。

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. [編集] をクリックします。
  4. [認証] をクリックします。Managed Active Directory ドメインに参加するためのプルダウン メニューには、以前にプロジェクトに追加された Managed Microsoft AD ドメインが一覧表示されます。
  5. プルダウン メニューから、インスタンスに [ドメインなし / 後で参加] を選択します。
  6. インスタンスの再起動に関するメッセージを読み、[閉じる] をクリックします。
  7. [保存] をクリックして変更を適用します。

gcloud

ドメインからインスタンスを削除し、したがって Windows 認証を削除するには、そのドメインに対して空白値を使用します。つまり、コマンドでは次のように --active-directory-domain パラメータに空白値を使用します。

gcloud beta sql instances patch INSTANCE_NAME \
--active-directory-domain=

REST

REST API を使用すると、ドメインからインスタンスを削除できます。次のように、domain フィールドに空白値を指定します。

{
   "settings":{
      "activeDirectoryConfig":{
         "domain":""
      }
   }
}

ユーザーを使ってインスタンスに接続する

Cloud SQL for SQL Server の場合、デフォルト ユーザーsqlserver です。

インスタンスを Managed Microsoft AD と統合した後、次のように sqlserver ユーザーを使用してインスタンスに接続できます。

  1. 次のように、Windows ユーザーまたはグループに基づいて SQL Server ログインを作成します。

    CREATE LOGIN [domain\user_or_group] FROM WINDOWS
    
  2. インスタンスの DNS 名で、Windows 認証を使用してインスタンスにログインします。指定するインスタンスの DNS 名の例を次に示します。

    • プライベート IP 経由で接続するには:

      private.myinstance.us-central1.myproject.cloudsql.mydomain.com
      

    • パブリック IP 経由で接続するには:

      public.myinstance.us-central1.myproject.cloudsql.mydomain.com
      

    • Cloud SQL Auth Proxy 経由で接続するには(以下もご覧ください):

      proxy.myinstance.us-central1.myproject.cloudsql.mydomain.com
      

    インスタンス IP アドレスを使用する場合は、Kerberos クライアントが IP ホスト名をサポートするように構成する必要があります。信頼関係を通じて接続されたドメインからの IP アドレスでのログインはサポートされていません。

Windows 認証を使用する Cloud SQL Auth Proxy を使う

Managed Microsoft AD 統合を使用する Cloud SQL Auth プロキシを使用できます。

始める前に、次を確認してください。

Windows 認証の手順

Cloud SQL Auth Proxy の起動の背景的情報については、Cloud SQL Auth Proxy を起動するをご覧ください。

Windows 認証では、Cloud SQL Auth Proxy をポート 1433 で動作させる必要があります。事前定義されたサービス プリンシパル名(SPN)エントリを Cloud SQL Auth Proxy アドレスにマッピングします。

proxy.[instance].[location].[project].cloudsql.[domain]

Cloud SQL Auth Proxy をローカルで動作させる

Cloud SQL Auth Proxy をローカルで動作させる場合は、ホストファイルを使用して、以下を 127.0.0.1 にマッピングします。

proxy.[instance].[location].[project].cloudsql.[domain]

たとえば、以下を hosts ファイル(c:\windows\system32\drivers\etc\hosts など)に追加できます。

127.0.0.1 proxy.[instance].[location].[project].cloudsql.[domain]

次の例では、このコマンドを使用して Cloud SQL Auth Proxy を動作させ、127.0.0.1:1433 で使用できるようにします。

cloud_sql_proxy_x64.exe -credential_file credential.json  -instances=project:name=tcp:1433

Cloud SQL Auth Proxy をローカル以外で動作させる

Cloud SQL Auth Proxy をローカル以外で動作させる場合は、Cloud SQL Auth Proxy をローカルで動作させるの手順を行いますが、hosts ファイルの別のエントリを使用します。

具体的には、ローカル以外のホスト(MyOtherHost など)の場合は、以下をホストファイルに追加できます。

127.0.0.1 MyOtherHost proxy.[instance].[location].[project].cloudsql.[domain]

クライアントでの NTLM フォールバックのトラブルシューティング

Windows 認証とインスタンス IP アドレスを使用してインスタンスにログインする場合は、IP ホスト名をサポートするように Kerberos クライアントが構成されている必要があります。

NTLM 認証はサポートされていませんが、一部の Kerberos クライアントはこれにフォールバックしようとする場合があります。このセクションで説明したように、SQL Server Management Studio(SSMS)に接続しようとしたときに次のエラー メッセージが表示される場合、NTLM フォールバックが原因である可能性があります。

Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication. (Microsoft SQL Server, Error: 18452)

NTLM は、認証用の Microsoft セキュリティ プロトコルのセットです。NTLM フォールバックの理由もご覧ください。

Windows クライアントの NTLM フォールバックの確認

Windows で、NTLM へのフォールバックが上述のエラーの原因となっていることを確認します。

  1. 任意のオンプレミス認証情報でログインします(「Run as...」は使用しないでください)。
  2. コマンド プロンプトを開きます。
  3. klist purge を実行します。
  4. SSMS から、Windows 認証を使用して SQL Server に接続してみます。
  5. klist を実行して、"MSSQLSvc/<address>:1433 @ domain" に対して発行されたチケットがあるかどうかを確認します。
  6. 該当するチケットがない場合、エラーは NTLM フォールバックが原因であると考えられます。
  7. 該当するチケットがある場合は、SQL Server ドライバが NTLM 認証を適用していないことを確認します。また、グループ ポリシーによって NTLM 認証が適用されているかどうかも確認します。

Linux クライアントの NTLM フォールバックの確認

Ubuntu 16.04 で、上述のエラーが NTLM のフォールバックによって発生していることを確認するには、このセクションの手順を使用します。この手順は、他の Linux ディストリビューションの場合と同様です。

Kerberos 認証の設定

  1. Kerberos クライアントを設定します。

    sudo apt-get install krb5-user
    
  2. デフォルトのレルムを求められたら、オンプレミス ドメイン名を大文字で入力します。

  3. 次のコマンドを実行して SQL Server コマンドライン ツールをインストールします。

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
    curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
    sudo apt-get update
    sudo apt-get install mssql-tools unixodbc-dev
    

Windows 認証との接続

  1. 次のように kinit ツールを実行します: kinit <user_account>
  2. Windows 認証に接続するには、/opt/mssql-tools/bin/sqlcmd -S <address> を実行します。
  3. klist コマンドを実行して、"MSSQLSvc/<address>:1433 @ domain" のチケットが発行されたかどうかを確認します。
  4. チケットが発行されていない場合、上述のエラーは NTLM フォールバックを引き起こす問題があることを示唆します。

NTLM フォールバックの理由

NTLM へのフォールバックはクライアントの構成ミスで、次の条件と関連する場合があります。

  • デフォルトでは、ホスト名が IP アドレスの場合、Windows はホストの Kerberos 認証を試行しません。マネージド ドメインから Kerberos 認証を有効にするには、こちらで説明されている方法をお試しください。FQDN を使用する必要がある場合、この方法はオンプレミス認証情報では機能しません。
  • 外部の信頼を介した Kerberos 認証は機能しません。こちらで説明されているように、代わりにフォレスト間の信頼を使用してください。
  • Kerberos 認証では、別のフォレスト内のサービスを検出するために、名前サフィックス ルーティングが必要になります。こちらに記載されている方法を試してください。
  • サービスに SPN が登録されていない場合は、Kerberos 認証は機能しません。Google Cloud Console から取得した FQDN または IP アドレスのみを使用して、Windows 認証に接続します。

オンプレミス AD ユーザー: Windows ログインの作成

オンプレミス AD ユーザーを使用して、Cloud SQL for SQL Server への Windows ログインを作成できます。

たとえば、Google Cloud プロジェクトの Virtual Private Cloud(VPC)でホストされている Windows VM で動作している SQL Server Management Studio(SMSS)を使用して接続できます。

このコンテキストでの Windows 認証では、Cloud SQL for SQL Server は Kerberos プロトコルのみをサポートします。Kerberos ベースの Windows 認証では、クライアントはオンプレミスの AD と Managed Microsoft AD の DNS 名を解決する必要があります。

一方向または双方向の信頼を構成する

最初に、一方向または双方向の信頼関係を使用するかどうかを決定します。

その後、オンプレミス AD ドメインと Managed Microsoft AD ドメイン間の信頼を確立する手順を行います。

Windows VM を設定して Windows ログインを作成する

オンプレミス AD ドメインと Managed Microsoft AD ドメインの間で信頼を確立したら、次の手順を行います。例として、以下の手順では Google Cloud プロジェクトの VPC でホストされている Windows VM で動作している SQL Server Management Studio(SSMS)を使用します。

  1. Windows VM を作成します。
    • Managed Microsoft AD でサポートされている Windows のバージョンVM を作成します。
    • Managed Microsoft AD ドメインをホストするプロジェクト内に VM を作成します。承認済みネットワークである共有 VPC がある場合は、任意のサービス プロジェクト内に VM を作成することもできます。
    • Managed Microsoft AD ドメインの承認済みネットワークであり、Cloud SQL のプライベート サービス アクセスを構成している VPC ネットワークに VM を作成します。
  2. Windows VM を Managed Microsoft AD ドメインに参加させます。
  3. Windows VM に SSMS をインストールします。
  4. VPC ネットワーク内のオンプレミス ドメインを解決します。
  5. オンプレミス ユーザーの Windows ログインを作成します。

    • オンプレミス ユーザーの Windows ログインを作成する方法については、ログインの作成の手順をご覧ください。たとえば、次のようなコマンドを指定します。
    CREATE LOGIN [DOMAIN_NAME\USER_NAME] FROM WINDOWS
    
  6. オンプレミス ユーザーをログインさせるためのアプリケーション固有の手順に沿って、Cloud SQL for SQL Server インスタンスにログインします。たとえば、SQL Server Management Studio を使用している場合は、こちらの手順をご覧ください。

SQL Server インスタンスへのログイン中に問題が発生した場合は、次の検証を行います。

  • オンプレミス ドメインとの信頼の作成の手順を使用して、オンプレミス ネットワークとプロジェクト承認済み VPC のファイアウォール構成を検証します。
  • オンプレミスの信頼関係の名前サフィックス ルーティングを検証します。
  • SSMS を実行している Windows VM から、次の DNS 解決オペレーションを行えることを確認します。
    • nslookup fqdn-for-managed-ad-domain
    • nslookup fqdn-for-on-premises-ad-domain
    • nslookup fqdn-for-cloud-sql-server-instance

ヒント

  • パブリック IP を持つインスタンスは、プライベート IP も持っている場合に限りサポートされます。インスタンスに対してプライベート IP を有効にする必要があります。そのため、パブリック IP とプライベート IP の両方が使用可能である限り、インスタンスへの接続にどちらを使用するか選択できます。
  • 次のいずれかのエラーが表示された場合は、統合の前提条件がすべて満たされていることを確認してください。
    • 「Per-Product Per-Project Service Account is not found」
    • 「Insufficient permission to integrate with Managed Service for Microsoft Active Directory domain」
  • 「Domain not found」というエラーが表示された場合は、ドメイン名の大文字と小文字が正しいことを確認してください。
  • 信頼関係を介して接続されたドメインからの Windows 認証が失敗する場合は、マネージド ドメインのユーザーに対して Windows 認証が動作することを確認します。その場合は次の手順を行います。
    1. DNS 名を使用したことを確認します。信頼関係を使用して接続されたドメインでは、IP アドレスはサポートされません。
    2. すべてのファイアウォール ポートの開放など、オンプレミス ドメインとの信頼の作成のすべての手順に沿っていることを確認します。
    3. 信頼を確認します。
    4. 信頼の方向により、信頼関係を介して接続されたドメインのユーザーがマネージド ドメインで認証できることを確認します。
    5. 信頼関係を介して接続されているドメインに名前サフィックス ルーティングが設定されていることを確認します。
    6. Cloud SQL for SQL Server を使用しないで信頼が機能することを確認します。
      1. Windows VM を作成します。
      2. Managed Microsoft AD ドメインに Windows VM を参加させます。
      3. たとえば、信頼関係を通じて接続されているドメインのユーザーとして、メモ帳を実行してみます。
    7. クライアント VM を再起動し、Windows 認証を再テストします。
  • SQL Server ログインを作成しようとすると、「Windows NT user or group domain\name not found. Check the name again」というエラーが発生する場合があります。このエラーは、ドメイン ローカル グループがサポートされていないことが原因で発生する可能性があります。該当する場合は、グローバル グループまたはユニバーサル グループを代わりに使用します。
  • 信頼関係を介して接続されたドメインからユーザーが SQL Server クエリを発行すると、「Could not obtain information about Windows NT group/user」というエラーが発生する可能性があります。このエラーは、たとえば、信頼関係を介して接続されたドメインからログインを作成する場合に発生することがあります。このエラーは、信頼関係を介して接続されたドメインからログインに権限を付与した場合にも発生することがあります。このようなケースでは、多くの場合、オペレーションの再試行は成功します。再試行に失敗した場合は、接続を閉じてから新しい接続を開きます。
  • SQL Server のクエリにより「The login is from an untrusted domain」というエラーが発生した場合は、信頼関係を介して接続されているドメインのユーザーには IP アドレスの使用がサポートされていないことに留意してください。また、次の操作によってこの問題を解決できる場合があります。
    • マネージド ドメインからのユーザーの接続に IP アドレスを使用する場合は、こちらの手順を行ってください。
    • Cloud SQL for SQL Server への接続には、プロキシは利用せず、Google Cloud Console で表示される名前と同じ DNS 名を常に使用してください。
    • 既存の Kerberos チケットを削除します。前述のエラーは、クライアントが最近 SQL Server インスタンスに接続しており、そのインスタンスが停止して起動した場合に発生する可能性があります。あるいは、SQL Server インスタンスに対して Windows 認証を無効にしてから再度有効にすると、このエラーが発生する場合があります。クライアントが Windows 認証情報キャッシュを使用する場合は、クライアントのワークステーションのロックとロック解除を行うか、klist purge を実行します。
  • Windows 認証を有効にしようとすると、「This instance would need a more recent creation date to support Managed Service for Microsoft Active Directory」というエラーが発生する場合があります。次の点にご注意ください。
    • Cloud SQL では、SQL Server インスタンスが 2021 年 3 月 12 日以前に作成された場合、このインスタンスは、Managed Microsoft AD と統合できません。
  • SQL Server インスタンスを作成しようとすると、「This instance does not support Managed Service for Microsoft Active Directory」というエラーが発生する可能性があります。このエラーが発生する場合は、プロジェクトがサポート対象外である可能性があります。別のプロジェクトをお試しください。
  • インスタンスが最近更新されたかどうかにかかわらず、Windows 認証で継続的に問題が発生している場合は、Managed Active Directory ドメインの参加を解除して、再度参加させてください。この操作を行うには、更新手順を使用して、ドメインの参加を解除して、再度ドメインに参加させてください。この操作を行っても、データベースにある既存の Windows 認証ユーザーまたはログインは削除されません。ただし、Windows 認証を削除すると、インスタンスが再起動されます。

トラブルシューティング

表内のリンクをクリックすると、詳細が表示されます。

エラー: 次のような問題が考えられます... 次のことを試します...
Per-product, per-project service account not found. サービス アカウント名が正しくありません。 [サービス アカウント] ページで、正しいユーザー プロジェクトのサービス アカウントが作成されていることを確認します。
Insufficient permission to integrate with Managed Service for Microsoft Active Directory domain. サービス アカウントに managedidentities.sqlintegrator ロールがありません。 [IAM と管理] ページで、サービス アカウントに managedidentities.sqlintegrator ロールを追加します。
Domain not found ドメインが存在しないか、入力ミスがありました。 ドメイン名が正しいことと、同じユーザー プロジェクトに存在していることを確認します。大文字と小文字は区別されます。
The domain is busy with another operation. Please retry. 別の Cloud SQL インスタンスが、同じ Managed Active Directory ドメインでオペレーションを実行しています。 オペレーションを再試行してください。同じドメインに接続されている Cloud SQL インスタンスに更新のバッチを行う場合は、並列実行の数を制限してください。
The operation completed but an update to Active Directory failed. You may experience issues with Windows Authentication on this instance, please see https://cloud.google.com/sql/docs/sqlserver/configure-ad for tips Managed Active Directory ドメインで必要な更新を実施できません。 Windows 認証で問題が発生した場合は、Managed Active Directory ドメインの参加を解除して、再度ドメインに参加させてみてください。この操作を行うには、更新手順を使用して、ドメインの参加を解除して、再度ドメインに参加させてください。この操作を行っても、データベースにある既存の Windows 認証ユーザーまたはログインは削除されません。ただし、Windows 認証を削除すると、インスタンスは再起動されます。
This instance would need a more recent creation date to support Managed Service for Microsoft Active Directory. Cloud SQL では、SQL Server インスタンスが 2021 年 3 月 12 日以前に作成された場合は、このインスタンスは Managed Microsoft AD と統合できません。 2021 年 3 月 12 日以降に作成されたインスタンスで操作をお試しください。

次のステップ

  • 制限事項とサポートされていない機能を含む概要ページを十分に確認する。このページには、その他のドキュメントへのリンクも含まれています。