チュートリアル: コンテナーと Kubernetes 上の SQL Server に対して Microsoft Entra ID 認証を手動で構成する

適用対象:Linux 上の SQL Server

このチュートリアルでは、コンテナーで実行されている SQL Server に対して Microsoft Entra ID 認証を手動で有効にする手順について説明します。 Azure Arc は現在、このシナリオの コンテナー ワークロード をサポートしていないため、スタンドアロン コンテナーと Kubernetes デプロイ用に Microsoft Entra ID 認証を直接構成できます。

他のすべてのデプロイ シナリオでは、Azure Arc を使用して Microsoft Entra ID 認証を構成する必要があります。

前提条件

  • Microsoft Entra ID はテナント用に構成されています。

  • SQL Server は Microsoft Entra ID エンドポイントに到達できます。

  • Microsoft Entra アプリケーションが登録されています。

    チュートリアルの指示に従ってください:SQL ServerのMicrosoft Entra認証を設定し、アプリ登録でアプリケーションを登録してください。

  • サポートされている SQL Server Linux コンテナー イメージ。

  • kubectlを使用した Docker または Kubernetes クラスターへのアクセス。

構成の概要

デプロイ モデルには次のものが必要です。

  1. Microsoft Entra アプリケーションに関連付けられている証明書

  2. 次の構成で構成された SQL Server:

    • 証明書のパス
    • Microsoft Entra アプリケーション (クライアント) ID
    • Microsoft Entra テナント ID
  3. SQL Server で作成された Microsoft Entra ログインが少なくとも 1 つ。

環境の違いは、証明書と構成の提供方法です。

  • コンテナー: 環境変数またはマウントされたファイル
  • Kubernetes: コンフィグマップ とシークレット

証明書を作成する

Microsoft Entra ID に対して認証を行うには、SQL Server の証明書が必要です。 運用環境では、信頼された証明機関 (CA) によって発行された証明書を使用します。

この例では、OpenSSL を使用して自己署名証明書を作成できます。

  1. 次のコマンドを使用して自己署名証明書を作成し、画面の指示に従います。

    openssl req -x509 -newkey rsa:4096 \
      -keyout mssql-entra-id-key.pem \
      -out mssql-entra-id-cert.pem \
      -days 365 -nodes
    
  2. ファイルを確認します。

    ls -lrt | grep mssql-entra-id
    

    結果セットは次のとおりです。

    -rw------- 1 user user 3272 Sep 11 19:13 mssql-entra-id-key.pem
    -rw-rw-r-- 1 user user 2139 Sep 11 19:13 mssql-entra-id-cert.pem
    
  3. 証明書を .pfxに変換します。 エクスポート パスワードは空のままにします。

    openssl pkcs12 \
      -inkey mssql-entra-id-key.pem \
      -in mssql-entra-id-cert.pem \
      -nodes -export \
      -out mssql-entra-id.pfx
    

    Important

    エクスポート パスワードを使用すると、SQL Server の起動に失敗します。

  4. ファイルを確認します。

    ls -lrt | grep mssql-entra-id
    

    結果セットは次のとおりです。

    -rw------- 1 user user 3272 Sep 11 19:13 mssql-entra-id-key.pem
    -rw-rw-r-- 1 user user 2139 Sep 11 19:13 mssql-entra-id-cert.pem
    -rw-rw-r-- 1 user user 2139 Sep 11 19:14 mssql-entra-id.pfx
    
  5. 登録されている Microsoft Entra アプリケーションに パブリック証明書 をアップロードします。 CA から信頼された証明書を取得する場合は、代わりにその証明書をアップロードします。

    Azure portal でアップロードされた証明書のスクリーンショット。

SQL Server コンテナーの構成 (スタンドアロン)

  1. Microsoft Entra 認証が有効になっているコンテナーで SQL Server を実行します。

    docker run --name sql2025-entra \
      -e ACCEPT_EULA=Y \
      -e MSSQL_SA_PASSWORD='<password>' \
      -e MSSQL_AAD_CLIENT_ID='<client-id>' \
      -e MSSQL_AAD_PRIMARY_TENANT='<tenant-id>' \
      -e MSSQL_AAD_CERTIFICATE_FILE_PATH='/var/opt/mssql/mssql-entra-id.pfx' \
      -p 1433:1433 \
     -v "$PWD/mssql-entra-id.pfx:/var/opt/mssql/mssql-entra-id.pfx:ro" \
      -d mcr.microsoft.com/mssql/server:2025-latest
    
  2. コンテナー内を確認します。

    docker exec -it <container-id> bash
    cat /var/opt/mssql/log/errorlog | grep Entra
    

    結果セットは次のとおりです。

    Microsoft Entra ID authentication is enabled. This is an informational message only; no user action is required.
    

Microsoft Entraのログイン作成を続けてください。

Kubernetes で SQL Server コンテナーを構成する

次の図では、このデプロイの手順について説明します。

Kubernetes デプロイでの Microsoft Entra ID 認証のフロー図を示す図。

手順 1: 証明書のシークレットを作成する

  1. .pfx ファイルをエンコードします。

    base64 -w0 mssql-entra-id.pfx
    
  2. mssql-entra-cert.yamlを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: mssql-entra-cert
    type: Opaque
    data:
      mssql-entra-id: <BASE64_ENCODED_CERT>
    
  3. シークレットを適用します。

    kubectl apply -f mssql-entra-cert.yaml
    

ステップ2: sa パスワードの秘密を作成する

以下のコマンドは、SQL Serverデプロイメントにサインインするために使うsaアカウントパスワードを保存するSecretを作成します。 <password>を強力なパスワードに置き換えます。

Note

パスワードは SQL Server の既定のパスワード ポリシーに従う必要があります。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 パスワードには最大 128 文字まで使用できます。 可能な限り長く複雑なパスワードを使用してください。

kubectl create secret generic mssql \
  --from-literal=MSSQL_SA_PASSWORD=<password>

手順 3: mssql.conf の ConfigMap を作成する

この手順では、 <client-id> をクライアント ID に置き換え、 <tenant-id> を Microsoft Entra ID の登録済みアプリケーションのテナント ID に置き換えます。 これらの詳細は、Azure portal から取得できます。

Azure portal のキーを示すスクリーンショット。

  1. mssql-conf.yamlという名前の ConfigMap ファイルを作成します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-conf
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = false
    
        [licensing]
        azurebilling = false
    
        [network]
        aadcertificatefilepath = /var/opt/mssql/mssql-entra-id.pfx
        aadclientid = <client-id>
        aadprimarytenant = <tenant-id>
    
  2. ConfigMap を適用します。

    kubectl apply -f mssql-conf.yaml
    

手順 4: SQL Server をデプロイする

この手順では、SQL Server 2025 (17.x) を展開し、Microsoft Entra ID 認証を有効にします。 ConfigMapとSecretsはSQL Serverコンテナにマウントし、対応SQL Server Linuxイメージ(例:mcr.microsoft.com/mssql/server:2025-latest)を使う必要があります。

mssql.confの証明書ファイル パスがマウントされたパスと一致し、コンテナーが必要なファイル システムのアクセス許可で実行されていることを確認します。

  1. 次の内容を含む mssql-deployment.yaml というファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mssql-2025
      labels:
        app: mssql-2025
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mssql-2025
      template:
        metadata:
          labels:
            app: mssql-2025
        spec:
          securityContext:
            fsGroup: 10001
          containers:
          - name: mssql
            image: mcr.microsoft.com/mssql/server:2025-latest
            imagePullPolicy: IfNotPresent
            ports:
            - name: tds
              containerPort: 1433
            env:
            - name: ACCEPT_EULA
              value: "Y"
            - name: MSSQL_SA_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mssql
                  key: MSSQL_SA_PASSWORD
            - name: MSSQL_PID
              value: "Developer"
            volumeMounts:
            - name: mssql-conf
              mountPath: /var/opt/mssql/mssql.conf
              subPath: mssql.conf
              readOnly: true
            - name: mssql-entra-cert
              mountPath: /var/opt/mssql/mssql-entra-id.pfx
              subPath: mssql-entra-id
              readOnly: true
          volumes:
          - name: mssql-conf
            configMap:
              name: mssql-conf
              items:
              - key: mssql.conf
                path: mssql.conf
          - name: mssql-entra-cert
            secret:
              secretName: mssql-entra-cert
              items:
              - key: mssql-entra-id
                path: mssql-entra-id.pfx
    
  2. デプロイメントを展開します。

    kubectl apply -f mssql-deployment.yaml
    

手順 5: サービスを作成する

この手順では、SQL Server に接続するロード バランサー サービスを作成します。

  1. mssql-service.yamlという名前のサービス ファイルを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: mssql
      labels:
        app: mssql-2025
    spec:
      type: LoadBalancer
      selector:
        app: mssql-2025
      ports:
        - name: tds
          port: 1433
          targetPort: 1433
    
  2. サービスを適用します。

    kubectl apply -f mssql-service.yaml
    

Microsoft Entraのログイン作成を続けてください。

Microsoft Entra ログインを作成する

Important

サーバーまたはコンテナーで IPv6 が有効になっている場合は、IPv6 エンドポイントが到達可能でルーティング可能であることを確認してください。または、Microsoft Entra IDへの認証が失敗する可能性があります。 詳細については、「Microsoft Entra認証を使用した IPv6 接続」を参照してください。

  1. 前に構成した sa アカウントとパスワードを使用して、SQL Server Management Studio (SSMS) を使用して SQL Server コンテナーに接続します。

  2. Microsoft Entra ベースのログインを作成します。

    CREATE LOGIN [user@contoso.com]
        FROM EXTERNAL PROVIDER;
    
  3. 必要に応じて、microsoft Entra アカウントを sysadmin 固定サーバー ロールに追加して、 sa アカウントを無効にすることができます。 詳細については、 ベストプラクティスとして「 sa アカウントを無効にする」をご覧ください。

    EXECUTE sp_addsrvrolemember
        @loginame = 'user@contoso.com',
        @rolename = 'sysadmin';
    

パスワード、統合認証、または多要素認証 (MFA) を使用して Microsoft Entra ID を使用して認証できるようになりました。

ベストプラクティスとして sa アカウントを無効にしましょう

インストール後に初めてシステム管理者 (sa) アカウントを使用して SQL Server インスタンスに接続するときは、次の手順に従い、その後すぐにセキュリティのベスト プラクティスとして sa アカウントを無効にすることが重要です。

  1. 新しいログインを作成し、sysadmin サーバー ロールのメンバーにします。

  2. 作成した新しいログインを使用してSQL Serverインスタンスに接続します。

  3. セキュリティのベスト プラクティスで推奨されているように、sa アカウントを無効にします。