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