Azure Arc 対応 SQL Managed Instance サービスマネージド資格情報のローテーション (プレビュー)

この記事では、Azure Arc によって有効にされる SQL Managed Instance のサービスで管理される資格情報をローテーションする方法について説明します。Arc データ サービスは、監視、バックアップまたは復元、高可用性などに使用される証明書や SQL ログインなど、さまざまなサービスマネージド資格情報を生成します。これらの資格情報は、Azure Arc データ サービスによって管理されるカスタム リソース資格情報と見なされます。

サービスマネージド資格情報のローテーションは、セキュリティ問題の間、またはコンプライアンスのために定期的なローテーションが必要な場合に開始する、ユーザーによってトリガーされる操作です。

制限事項

マネージド インスタンスのサービスマネージド資格情報をローテーションする場合は、次の制限事項を考慮してください。

  • SQL Server フェールオーバー グループはサポートされません。
  • 自動的に事前スケジュールされた回転はサポートされません。
  • サービスマネージド DPAPI 対称キー、keytab、Active Directory アカウント、サービスマネージド TDE 資格情報は、この資格情報のローテーションには含まれません。

汎用レベル

General Purpose SQL Managed Instance サービスマネージド資格情報のローテーション中に、マネージド インスタンスの Kubernetes ポッドが終了し、ローテーションされた資格情報で再プロビジョニングされます。 このプロセスにより、新しいマネージド インスタンス ポッドが作成されると、短時間のダウンタイムが発生します。 中断に対処するには、接続の再試行ロジックなどの回復性をアプリケーションに組み込み、最小限の中断を確保します。 回復性の設計方法の詳細については、「信頼性の重要な要素の概要」と「Azure サービスの再試行ガイダンス」を参照してください。

Business Critical レベル

複数のレプリカを使用した Business Critical SQL Managed Instance サービスマネージド資格情報のローテーション中は次のことが行われます:

  • セカンダリ レプリカ ポッドは終了され、ローテーションされたサービスマネージド資格情報で再プロビジョニングされます
  • レプリカが再プロビジョニングされると、プライマリは再プロビジョニングされたレプリカにフェールオーバーされます
  • 前のプライマリ ポッドは、ローテーションされたサービスマネージド資格情報で終了および再プロビジョニングされ、セカンダリになります

フェールオーバーが発生するとき、短時間のダウンタイムが発生します。

前提条件:

この記事を進める前に、Azure Arc によって有効にされる SQL Managed Instance リソースを作成しておく必要があります。

マネージド インスタンスでサービスマネージド資格情報をローテーションする方法

サービスマネージド資格情報は、マネージド インスタンス内の世代に関連付けられます。 マネージド インスタンスのすべてのサービスマネージド資格情報をローテーションするには、世代を 1 ずつ増やす必要があります。

仕様から現在のサービスマネージド資格情報の世代を取得し、サービスマネージド資格情報の新しい世代を生成するには、次のコマンドを実行してください。 このアクションにより、サービスマネージド資格情報のローテーションがトリガーされます。

rotateCredentialGeneration=$(($(kubectl get sqlmi <sqlmi-name> -o jsonpath='{.spec.update.managedCredentialsGeneration}' -n <namespace>) + 1))
kubectl patch sqlmi <sqlmi-name> --namespace <namespace> --type merge --patch '{ "spec": { "update": { "managedCredentialsGeneration": '$rotateCredentialGeneration'} } }'

managedCredentialsGeneration は、サービスマネージド資格情報のターゲットの世代を識別します。 構成や kubernetes トポロジなどの残りの機能は変わりません。

マネージド インスタンスでサービスマネージド資格情報をロールバックする方法

Note

資格情報のローテーションが失敗した場合は、ロールバックが必要です。 以前の資格情報の世代へのロールバックは、n が現在の世代の場合、n-1 への 1 回だけがサポートされます。

資格情報のローテーションの進行中にロールバックがトリガーされ、すべてのレプリカが再プロビジョニングされていない場合、マネージド インスタンスが準備完了状態になるまでに約 30 分かかる場合があります

次の 2 つのコマンドを実行して、現在のサービスマネージド資格情報の世代を仕様から取得し、サービスマネージド資格情報の前の世代にロールバックしてください。

rotateCredentialGeneration=$(($(kubectl get sqlmi <sqlmi-name> -o jsonpath='{.spec.update.managedCredentialsGeneration}' -n <namespace>) - 1))
kubectl patch sqlmi <sqlmi-name> --namespace <namespace> --type merge --patch '{ "spec": { "update": { "managedCredentialsGeneration": '$rotateCredentialGeneration'} } }'

ロールバックのトリガーは、サービスマネージド資格情報のローテーションのトリガーと同じですが、ターゲットの世代は前の世代であり、新しい世代または資格情報が生成されない点が異なります。