Active Directory と統合され、Azure Arc によって有効化された SQL Managed Instance を展開する

この記事では、Active Directory 認証を使用して Azure Arc 対応 SQL Managed Instance をデプロイする方法について説明します。

前提条件

SQL Managed Instance のデプロイを開始する前に、次の前提条件がそろっていることを確認してください。

コネクタの要件

カスタマー マネージド keytab Active Directory コネクタとシステム マネージド keytab Active Directory コネクタは、要件と手順が異なる別のデプロイ モードです。 それぞれのモードには、デプロイ中に特定の要件があります。 使用するコネクタのタブを選択してください。

Active Directory カスタマー マネージド keytab デプロイの場合、次の情報を指定する必要があります。

  • SQL 用の Active Directory ユーザー アカウント
  • ユーザー アカウントのサービス プリンシパル名 (SPN)
  • SQL のプライマリ (および必要に応じてセカンダリ) エンドポイントの DNS A (転送) レコード

展開を準備する

デプロイ モードに応じて、次の手順を実行して、SQL Managed Instance のデプロイを準備します。

カスタマー マネージド keytab モードでデプロイを準備する方法は次のとおりです。

  1. SQL エンドポイントの DNS 名を特定する: Kubernetes クラスターの外部からクライアントが接続する SQL エンドポイントに一意の DNS 名を選びます。

    • この DNS 名は、Active Directory ドメインまたはその子孫ドメインに存在する必要があります。
    • この記事の例では、プライマリ DNS 名に sqlmi-primary.contoso.local、セカンダリ DNS 名に sqlmi-secondary.contoso.local を使っています。
  2. SQL エンドポイントのポート番号を特定する: 各 SQL エンドポイントのポート番号を入力します。

    • このポート番号は、ご自身の Kubernetes クラスターに対して許容されるポート番号の範囲に含まれる必要があります。
    • この記事の例では、プライマリ ポート番号として 31433、セカンダリ ポート番号として 31434 を使っています。
  3. マネージド インスタンスの Active Directory アカウントを作成する: マネージド インスタンスを表す Active Directory アカウントの名前を選択します。

    • この名前は、Active Directory ドメイン内で一意である必要があります。
    • この記事の例では、Active Directory アカウント名に sqlmi-account を使っています。

    アカウントを作成するには

    1. ドメイン コントローラーで、[Active Directory ユーザーとコンピューター] ツールを開きます。 マネージド インスタンスを表すアカウントを作成します。
    2. Active Directory ドメイン パスワード ポリシーに準拠するアカウント パスワードを入力します。 このパスワードは、次のセクションの一部の手順で使用します。
    3. アカウントが有効になっていることを確認します。 アカウントには特別なアクセス許可は必要ありません。
  4. Active Directory DNS サーバー内の SQL エンドポイントの DNS レコードを作成する: Active Directory DNS サーバーの 1 つで、手順 1 で選んだ DNS 名に対する A レコード (前方参照レコード) を作成します。

    • この DNS レコードは、Kubernetes クラスター外からの接続を SQL エンドポイントがリッスンする IP アドレスを指している必要があります。
    • A レコードと関連する逆引き参照ポインター (PTR) レコードを作成する必要はありません。
  5. SPN を作成する: SQL が SQL エンドポイントに対する Active Directory 認証を受け入れられるようにするには、前の手順で作成したアカウントに 2 つの SPN を登録する必要があります。 2 つの SPN は、プライマリ エンドポイントへ登録される必要があります。 セカンダリ エンドポイントの Active Directory 認証が必要な場合は、セカンダリ エンドポイントにも SPN を登録する必要があります。

    SPN を作成して登録する方法は次のとおりです。

    1. 次の形式を使用して、SPN を作成します。

      MSSQLSvc/<DNS name>
      MSSQLSvc/<DNS name>:<port>
      
    2. ドメイン コントローラーの 1 つで次のコマンドを実行し、SPN を登録します。

      setspn -S MSSQLSvc/<DNS name> <account>
      setspn -S MSSQLSvc/<DNS name>:<port> <account>
      

      コマンドは次の例のようになります。

      setspn -S MSSQLSvc/sqlmi-primary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-primary.contoso.local:31433 sqlmi-account
      
    3. セカンダリ エンドポイントで Active Directory 認証が必要な場合は、同じコマンドを実行して、セカンダリ エンドポイントに SPN を追加します。

      setspn -S MSSQLSvc/<DNS name> <account>
      setspn -S MSSQLSvc/<DNS name>:<port> <account>
      

      コマンドは次の例のようになります。

      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local:31434 sqlmi-account
      
  6. アカウントと SPN のエントリを含む keytab ファイルを生成する: SQL が Active Directory に対して自身を認証し、Active Directory ユーザーからの認証を受け入れられるようにするには、Kubernetes シークレットを使用して keytab ファイルを指定します。

    • keytab ファイルには、マネージド インスタンス用に生成された Active Directory アカウントと SPN の暗号化されたエントリが含まれています。

    • SQL Server では Active Directory に対する資格情報としてこのファイルが使用されます。

    • keytab ファイルを生成する手段は、複数のツールから選択できます。

      • adutil: Linux で使用可能 (「adutil の概要」を参照)
      • ktutil: Linux で使用可能
      • ktpass: Windows で使用可能
      • カスタム スクリプト

    マネージド インスタンス専用の keytab ファイルを生成する方法は次のとおりです。

    1. 次のいずれかのカスタム スクリプトを使用します。

      このスクリプトはいくつかのパラメーターを受け取り、keytab ファイルと、keytab を含む Kubernetes シークレットの YAML 仕様ファイルを生成します。

    2. スクリプトのパラメーター値をマネージド インスタンスのデプロイ用の値に置き換えます。

      入力パラメーターには、次の値を使用します。

      • --realm: 大文字表記の Active Directory ドメイン。 例: CONTOSO.LOCAL
      • --account: SPN が登録されている Active Directory アカウント。 例: sqlmi-account
      • --port: プライマリ SQL エンドポイントのポート番号。 例: 31433
      • --dns-name: プライマリ SQL エンドポイントの DNS 名。
      • --keytab-file: keytab ファイルへのパス。
      • --secret-name: 仕様生成対象の keytab シークレットの名前。
      • --secret-namespace: keytab シークレットを含む Kubernetes 名前空間。
      • --secondary-port: セカンダリ SQL エンドポイントのポート番号 (省略可能)。 例: 31434
      • --secondary-dns-name: セカンダリ SQL エンドポイントの DNS 名 (省略可能)。

      keytab をホストする Kubernetes シークレットの名前を選択します。 マネージド インスタンスがデプロイされている名前空間を使用してください。

    3. keytab を作成するには、次のコマンドを実行します。

      AD_PASSWORD=<password> ./create-sql-keytab.sh --realm <Active Directory domain in uppercase> --account <Active Directory account name> --port <endpoint port> --dns-name <endpoint DNS name> --keytab-file <keytab file name/path> --secret-name <keytab secret name> --secret-namespace <keytab secret namespace>
      

      コマンドは次の例のようになります。

      AD_PASSWORD=<password> ./create-sql-keytab.sh --realm CONTOSO.LOCAL --account sqlmi-account --port 31433 --dns-name sqlmi.contoso.local --keytab-file sqlmi.keytab --secret-name sqlmi-keytab-secret --secret-namespace sqlmi-ns
      
    4. keytab が正しいことを確認するには、次のコマンドを実行します。

      klist -kte <keytab file>
      
  7. keytab の Kubernetes シークレットをデプロイする: 前の手順で作成した Kubernetes シークレット仕様ファイルを使用してシークレットをデプロイします。

    仕様ファイルは、次の例のようになります。

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: <secret name>
      namespace: <secret namespace>
    data:
      keytab: <keytab content in Base64>
    

    Kubernetes シークレットをデプロイするには、次のコマンドを実行します。

    kubectl apply -f <file>
    

    コマンドは次の例のようになります。

    kubectl apply -f sqlmi-keytab-secret.yaml
    

Active Directory 認証のプロパティを設定する

Azure Arc Active Directory 認証のために Azure Arc 対応 SQL Managed Instance をデプロイするには、使用する Active Directory コネクタ インスタンスを参照するためのデプロイ仕様ファイルを更新します。 SQL 仕様ファイルで Active Directory コネクタを参照すると、Active Directory 認証が SQL に自動的に設定されます。

カスタマー マネージド keytab モードの SQL で Active Directory 認証をサポートするには、デプロイ仕様ファイルに次のプロパティを設定します。 必須のプロパティもあれば、省略可能なものもあります。

必須

  • spec.security.activeDirectory.connector.name: Active Directory 認証用に結合する既存の Active Directory コネクタ カスタム リソースの名前。 このプロパティの値を入力すると、Active Directory 認証が実装されます。
  • spec.security.activeDirectory.accountName: マネージド インスタンスの Active Directory アカウントの名前。
  • spec.security.activeDirectory.keytabSecret: ユーザー用に事前に作成された keytab ファイルをホストする Kubernetes シークレットの名前。 このシークレットは、マネージド インスタンスと同じ名前空間に含める必要があります。 このパラメーターは、カスタマー マネージド keytab モードで Active Directory をデプロイする場合にのみ必要です。
  • spec.services.primary.dnsName: プライマリ SQL エンドポイントの DNS 名を入力します。
  • spec.services.primary.port: プライマリ SQL エンドポイントのポート番号を入力します。

オプション

  • spec.security.activeDirectory.connector.namespace: Active Directory 認証用に結合する既存の Active Directory コネクタの Kubernetes 名前空間。 値を入力しない場合は、SQL 名前空間が使用されます。
  • spec.services.readableSecondaries.dnsName: セカンダリ SQL エンドポイントの DNS 名を入力します。
  • spec.services.readableSecondaries.port: セカンダリ SQL エンドポイントのポート番号を入力します。

デプロイ仕様ファイルを準備する

次に、SQL Managed Instance をデプロイするために YAML 仕様ファイルを準備します。 使用するモードについては、仕様ファイルにデプロイ値を入力します。

Note

両方のモードの仕様ファイルでは、YAML の例にある admin-login-secret 値で基本認証が提供されます。 パラメーター値を使用してマネージド インスタンスにログインし、Active Directory ユーザーとグループのログインを作成します。 詳しくは、「Active Directory と統合した Azure Arc 対応 SQL Managed Instance に接続する」を参照してください。

次の例は、カスタマー マネージド keytab モードの仕様ファイルを示しています。

apiVersion: v1
data:
  password: <your Base64-encoded password>
  username: <your Base64-encoded username>
kind: Secret
metadata:
  name: admin-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v3
kind: SqlManagedInstance
metadata:
  name: <name>
  namespace: <namespace>
spec:
  backup:
    retentionPeriodInDays: 7
  dev: false
  tier: GeneralPurpose
  forceHA: "true"
  licenseType: LicenseIncluded
  replicas: 1
  security:
    adminLoginSecret: admin-login-secret
    activeDirectory:
      connector:
        name: <Active Directory connector name>
        namespace: <Active Directory connector namespace>
      accountName: <Active Directory account name>
      keytabSecret: <keytab secret name>
  services:
    primary:
      type: LoadBalancer
      dnsName: <primary endpoint DNS name>
      port: <primary endpoint port number>
    readableSecondaries:
      type: LoadBalancer
      dnsName: <secondary endpoint DNS name>
      port: <secondary endpoint port number>
  storage:
    data:
      volumes:
      - accessMode: ReadWriteOnce
        className: local-storage
        size: 5Gi
    logs:
      volumes:
      - accessMode: ReadWriteOnce
        className: local-storage
        size: 5Gi

マネージド インスタンスをデプロイする

カスタマー マネージド keytab モードとシステム マネージド keytab モードの両方で、準備された仕様 YAML ファイルを使用してマネージド インスタンスをデプロイします。

  1. ファイルを保存します。 次の手順の例では、仕様ファイル名に sqlmi.yaml を使用していますが、任意のファイル名を選択できます。

  2. 次のコマンドを実行して、仕様を使用してインスタンスをデプロイします。

    kubectl apply -f <specification file name>
    

    コマンドは次の例のようになります。

    kubectl apply -f sqlmi.yaml