次の方法で共有


チュートリアル - システムマネージド keytab モードで Active Directory コネクタをデプロイする

この記事では、システムマネージド keytab モードで Active Directory コネクタをデプロイする方法について説明します。 これは、Azure Arc 対応 SQL Managed Instance 上で Active Directory 認証を有効にする上で重要なコンポーネントです。

システムマネージド keytab モードの Active Directory コネクタ

システムマネージド keytab モードの場合、Active Directory コネクタは、マネージド インスタンスからの DNS 要求を 2 つのアップストリーム DNS サービスのいずれかに中継する DNS プロキシ サービスをデプロイします。

  • Active Directory DNS サーバー
  • Kubernetes DNS サーバー

AD Connector は、DNS プロキシ サービスに加えて、AD アカウント、サービス プリンシパル名 (SPN)、keytab の自動作成と管理のために AD ドメインへの通信を容易にするセキュリティ サポート サービスもデプロイします。

次の図は、システムマネージド keytab モードでの AD Connector と DNS プロキシ サービスの機能を示しています。

Active Directory connector

前提条件

作業を進めるには、次が必要です。

  • サポートされているバージョンの Kubernetes に配置されているデータ コントローラーのインスタンス
  • Active Directory ドメイン
  • Active Directory ドメインで事前に作成された組織単位 (OU)
  • Active Directory ドメイン サービス アカウント

AD ドメイン サービス アカウントには、Active Directory 内の指定された組織単位 (OU) 内のユーザー アカウントを自動的に作成および削除できる十分なアクセス許可が必要です。

組織単位 (OU) にスコープを設定した次のアクセス許可をドメイン サービス アカウントに付与します。

  • すべてのプロパティの読み取り
  • すべてのプロパティの書き込み
  • ユーザー オブジェクトの作成
  • ユーザー オブジェクトの削除
  • 子孫ユーザー オブジェクトのパスワードのリセット

OU と AD アカウントを設定する方法の詳細については、「Active Directory 認証で Azure Arc 対応データ サービスをデプロイする - 前提条件」を参照してください。

システムマネージド keytab モードで Active Directory コネクタをデプロイするための入力

Active Directory コネクタのインスタンスをデプロイするには、Active Directory ドメイン環境から複数の入力が必要です。

これらの入力は、AD コネクタ インスタンスの yaml 仕様で提供されます。

AD ドメインに関する次のメタデータは、AD コネクタのインスタンスを展開する前に使用可能である必要があります。

  • Active Directory ドメインの名前
  • ドメイン コントローラーの一覧 (完全修飾ドメイン名)
  • DNS サーバーの IP アドレスの一覧

次の入力フィールドは、Active Directory コネクタ仕様のユーザーに公開されます。

  • 必須

    • spec.activeDirectory.realm 大文字表記の Active Directory ドメイン名。 これは、AD コネクタのこのインスタンスが関連付けられる AD ドメインです。

    • spec.activeDirectory.domainControllers.primaryDomainController.hostname AD ドメイン内のプライマリ ドメイン コントローラー (PDC) の完全修飾ドメイン名。

      ドメイン内のどのドメイン コントローラーがプライマリかわからない場合は、AD ドメインに参加している任意の Windows マシンで、netdom query fsmo コマンドを実行して確認できます。

    • spec.activeDirectory.dns.nameserverIpAddresses Active Directory DNS サーバーの IP アドレスの一覧。 DNS プロキシ サービスは、指定されたドメイン名の DNS クエリをこれらのサーバーに転送します。

  • オプション

    • spec.activeDirectory.serviceAccountProvisioning これは、AD コネクタのデプロイ モードを定義する省略可能なフィールドです。カスタマーマネージド keytab の場合は manual、システムマネージド keytab の場合は automatic という値を指定できます。 このフィールドを設定しない場合、値の既定値は manual です。 automatic (システムマネージド keytab) に設定すると、この AD コネクタに関連付けられた SQL マネージド インスタンスの AD アカウントとサービス プリンシパル名 (SPN) がシステムによって自動的に生成され、それらのために keytab ファイルが作成されます。 manual (カスタマーマネージド keytab) に設定すると、システムによる AD アカウントの自動生成と keytab の生成は行われません。 ユーザーが keytab ファイルを用意する必要があります。

    • spec.activeDirectory.ouDistinguishedName このフィールドは省略可能です。 serviceAccountProvisioning の値を automatic に設定すると、条件付きで必須になります。 このフィールドは、AD コネクタをデプロイする前に、ユーザーが Active Directory ドメインで作成する必要がある組織単位 (OU) の識別名 (DN) を受け入れます。 これは、Active Directory ドメインで SQL Managed Instance 用のシステム生成 AD アカウントを格納するために使われます。 この値の例は OU=arcou,DC=contoso,DC=local のようになります。

    • spec.activeDirectory.domainServiceAccountSecret このフィールドは省略可能です。 serviceAccountProvisioning の値を automatic に設定すると、条件付きで必須になります。 このフィールドは、AD Connector のデプロイ前に作成されたドメイン サービス アカウントのユーザー名とパスワードを含む Kubernetes シークレットの名前を受け入れます。 システムはこのアカウントを使って、OU 内の他の AD アカウントを生成し、それらの AD アカウントに対してアクションを実行します。

    • spec.activeDirectory.netbiosDomainName Active Directory ドメインの NetBIOS 名。 これは、Active Directory ドメインの短いドメイン名 (Windows 2000 以前の名前) です。 これは、AD ドメイン内のアカウントを限定するためによく使用されます。 たとえば、ドメイン内のアカウントが CONTOSO\admin として参照されている場合、CONTOSO が NETBIOS ドメイン名です。

      このフィールドは省略可能です。 指定しない場合は、この値の既定値は spec.activeDirectory.realm フィールドの最初のラベルになります。

      ほとんどのドメイン環境では、これは既定値に設定されていますが、一部のドメイン環境で既定値以外の値が指定されている可能性があります。 このフィールドは、ドメインの NetBIOS 名が完全修飾名の最初のラベルと一致しない場合にのみ使う必要があります。

    • spec.activeDirectory.domainControllers.secondaryDomainControllers[*].hostname AD ドメイン内のセカンダリ ドメイン コントローラーの完全修飾ドメイン名の一覧。

      ドメインが複数のドメイン コントローラーによって提供されている場合は、この一覧に完全修飾ドメイン名の一部を指定することをお勧めします。 これにより、Kerberos 操作の高可用性が実現します。

      このフィールドは省略可能であり、必須ではありません。 値を指定しない場合、システムによってセカンダリ ドメイン コントローラーが自動的に検出されます。

    • spec.activeDirectory.dns.domainName DNS 検索を Active Directory の DNS サーバーに転送する必要のある DNS ドメイン名。

      このドメインまたはその子孫ドメインに属する任意の名前の DNS 参照は、Active Directory に転送されます。

      このフィールドは省略可能です。 指定しない場合、既定値として小文字に変換した spec.activeDirectory.realm の値が使用されます。

    • spec.activeDirectory.dns.replicas DNS プロキシ サービスのレプリカ数。 このフィールドは省略可能であり、指定されていない場合は既定で「1」に設定されます。

    • spec.activeDirectory.dns.preferK8sDnsForPtrLookups IP アドレスの検索の際に AD DNS サーバーの応答よりも Kubernetes DNS サーバーの応答を優先すべきかどうかを示すフラグ。

      DNS プロキシ サービスは、このフィールドに基づいて、IP アドレスの参照の際に優先すべき DNS サーバーの上流グループを決定します。

      このフィールドは省略可能です。 指定しない場合、既定値は true になります。つまり、IP アドレスの DNS 参照は、Kubernetes DNS サーバーに最初に転送されます。 Kubernetes DNS サーバーが参照に応答しない場合、クエリは AD DNS サーバーに転送されます。 false に設定すると、これらの DNS 参照は最初に AD DNS サーバーに転送され、失敗すると Kubernetes にフォールバックされます。

システムマネージド keytab モードの Active Directory コネクタをデプロイする

AD コネクタをデプロイするには、active-directory-connector.yaml という名前の YAML 仕様ファイルを作成します。

名前が CONTOSO.LOCAL の AD ドメインを使うシステムマネージド keytab AD コネクタの例を次に示します。 値を AD ドメインの値に置き換えてください。 adarc-dsa-secret には、AD のデプロイの前に作成された AD ドメイン サービス アカウントが含まれます。

Note

ここで指定したドメイン サービス AD アカウントのパスワードに、特殊文字の ! が含まれていないことを確認してください。

apiVersion: v1 
kind: Secret 
type: Opaque 
metadata: 
  name: adarc-dsa-secret
  namespace: <namespace>
data: 
  password: <your base64 encoded password>
  username: <your base64 encoded username>
---
apiVersion: arcdata.microsoft.com/v1beta2
kind: ActiveDirectoryConnector
metadata:
  name: adarc
  namespace: <namespace>
spec:
  activeDirectory:
    realm: CONTOSO.LOCAL
    serviceAccountProvisioning: automatic
    ouDistinguishedName: "OU=arcou,DC=contoso,DC=local"
    domainServiceAccountSecret: adarc-dsa-secret
    domainControllers:
      primaryDomainController:
        hostname: dc1.contoso.local
      secondaryDomainControllers:
      - hostname: dc2.contoso.local
      - hostname: dc3.contoso.local
  dns:
    preferK8sDnsForPtrLookups: false
    nameserverIPAddresses:
      - <DNS Server 1 IP address>
      - <DNS Server 2 IP address>

次のコマンドは、AD コネクタ インスタンスをデプロイします。 現時点では、デプロイには kube ネイティブのアプローチのみがサポートされています。

kubectl apply –f active-directory-connector.yaml

AD コネクタ インスタンスのデプロイを送信した後、次のコマンドを使用してデプロイの状態を確認できます。

kubectl get adc -n <namespace>