この記事では、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 つの世代に関連付けられます。 あるマネージド インスタンスに対応するすべてのサービスマネージド資格情報をローテーションするには、世代を 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'} } }'
ロールバックのトリガーは、サービスマネージド資格情報のローテーションのトリガーによく似ていますが、ターゲットになる世代は直前の世代であり、新しい世代または資格情報が生成されるわけではない点が異なります。