注意
Atlas は、 Azure Key Vault(AKV )と保管時の暗号化(EAR)を使用するためのシークレット認証をサポートしています。このモデルでは、Atlas に長期の静的認証情報( テナントID、 クライアントID 、 クライアント シークレット)を提供する必要はありません。代わりに、 Azureテナントで Atlas が管理するAzureサービス プリンシパルを承認し、Atlas は有効期間の短い OAuth.2 0アクセス トークンを使用して AKV に認証します。
このアプローチでは:
Atlas でクライアントシークレットを作成、保存、ローテーションする必要がなくなります。
Azure RBAC または Key Vault アクセス ポリシーを使用して、 Azure内でアクセス制御全体を一元化します。
クラスターとアプリケーションの既存の EAR 動作を保持します。認証メカニズムのみが変更
シークレット EAR は、セキュリティ境界としてAzure AD とAzure Key Vault に依存します。 Atlas は再利用可能なカスタマー マネージド シークレットを保存せず、代わりにAzureが発行したトークンを実行時に使用します。アクセスは最小特権を使用して強制されます。Azureのアクセス許可を削除してすぐに取り消すことができます。
Atlas は、よりシンプルで安全な認証モデルのために、Atlas が管理するサービスプリンシパルへの直接ロール割り当てを使用します。
前提条件
MongoDBプロジェクトで AKV を使用してカスタマー マネージド キーを有効にするには、以下が必要です。
M10 以上のクラスター。
Azureアカウントと、AKV 内の暗号化のキー。
これらのAzureコンポーネントの構成方法については、 Azureドキュメント を参照してください。
Atlas は、Atlas プロジェクト内のクラスターの保管時の暗号化を有効にするときにこれらのリソースを使用します。
Azureでの権限:
テナントにエンタープライズ サービス プリンシパルを登録します。この前提条件では、アプリケーション管理者、クラウドアプリケーション管理者、グローバル管理者など、エンタープライズ アプリケーションを追加または管理するためのMicrosoft Entra ID の権限が必要です。
次のいずれかのオプションを使用して、Key Vault キーにアクセスします。
Azure RBAC (Key Vault またはキーの範囲)
保管時の暗号化を有効にするプロジェクトの、Atlas のプロジェクト所有者アクセス。
Considerations
AKV に保存されているカスタマー マネージド キーを 使用するには、Atlas が管理するサービス プリンシパルに、特定のキーヴォールト キーに対して暗号化操作を実行する権限が必要です。
必要なキー権限には、次のものが含まれます。
getencryptdecrypt
権限の範囲をできるだけ狭くして、次のいずれかのオプションを使用して付与する必要があります。
Azure RBAC (Key Vault またはキーの範囲)
EAR AKV シークレット認証を設定する
シークレット認証を使用して保管時の暗号化(EAR)を構成するには、以下を実行する必要があります。
Atlas が管理するAzureサービス プリンシパルを作成します。
サービス プリンシパルにキーヴォールト キーへのアクセス権を付与します。
サービス プリンシパルを使用するように EAR を構成します。
Atlas が管理するAzureサービス プリンシパルを作成する
Atlas が所有するAzureアプリケーション用にテナントにAzure Service Principal を作成し、 Cloud Provider Access APIを使用して Atlas に登録します。 AtlasroleId では、EAR を有効にするときに使用する が返されます。
Atlas は、次のAzureアプリケーションID を使用します。
atlasAzureAppId: 9efedfcc-2eca-4b27-a613-0cad1e114cb7
Atlas にサービス プリンシパルを登録します。
エンドポイント:
POST /api/atlas/v2/groups/{groupId}/cloudProviderAccess
リクエスト本文の例:
{ "providerName": "AZURE", "tenantId": "<azure-tenant-id>", "servicePrincipalId": "<service-principal-object-id>", "atlasAzureAppId": "9efedfcc-2eca-4b27-a613-0cad1e114cb7" }
Atlas はサービスプリンシパルをプロビジョニングおよび管理し、id roleId値を返します。これは、EAR を設定するときに必要な です。
AKV 権限の付与
Atlas が管理するサービスプリンシパルに、EAR に使用されるキーヴォールトキーに対して暗号化操作を実行する権限を付与します。
Azure RBAC または Key Vault アクセス ポリシーのいずれかを使用してアクセス権を付与できます。
Azure RBAC を使用したアクセスの許可
Azure RBAC を使用してアクセス権を付与するには、次の手順に従います。
読み取りロールを割り当てて、Atlas は キーヴォールトメタデータを読み取ることができます。
次のコマンドを実行します:
az role assignment create \ --assignee-object-id "$SERVICE_PRINCIPAL_OBJECT_ID" \ --assignee-principal-type ServicePrincipal \ --role "Reader" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME"
Key Vault 暗号ユーザーなどの暗号化ロールを割り当てます。
次のコマンドを実行します:
az role assignment create \ --assignee-object-id "$SERVICE_PRINCIPAL_OBJECT_ID" \ --assignee-principal-type ServicePrincipal \ --role "Key Vault Crypto User" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME"
注意
同等のキー権限が付与される限り、カスタムロールを使用することもできます。
キーヴォールト アクセス ポリシーを使用したアクセスの付与
Key Vault がアクセス ポリシーを使用する場合は、次のコマンドを実行して、キーの権限を直接付与します。
az keyvault set-policy \ --subscription "$SUBSCRIPTION_ID" \ --resource-group "$RESOURCE_GROUP" \ --name "$KEY_VAULT_NAME" \ --object-id "$SERVICE_PRINCIPAL_OBJECT_ID" \ --key-permissions get encrypt decrypt wrapKey unwrapKey
秘密レス認証を使用するための保管時の暗号化の設定
Azureでサービス roleIdプリンシパルを登録して承認した後、Cloud Provider Access APIによって返された を使用して EAR 構成を更新します。
AtlasAdvanced で、プロジェクトの ページに移動します。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Security見出しの下のDatabase & Network Accessをクリックします。
サイドバーで、Advanced をクリックします。
詳細ページが表示されます。
認証方法を設定します。
Atlas は AKV の 2 つの認証方法をサポートしています。
サービス プリンシパル(推奨):プロジェクトに固有の Atlas が管理するサービス プリンシパルを使用して、AKV(シークレット認証についてはここで説明されています)に認証します。
静的認証情報: カスタマーが管理する認証情報を提供します。詳細については、「 パブリック ネットワーク経由でAzure Key Vault を使用してカスタマー キーを管理する 」または「 プライベート エンドポイントを超えるAzure Key Vault を使用してカスタマー キーを管理する 」を参照してください。
Key Vault Configurationを入力します。
サブスクリプション ID | キーヴォールトのSubscription IDを入力します。 |
リソース グループ名 | キーヴォールトを含むAzure Resource GroupのResource Group名を入力します。 |
キーヴォールト名 | キーヴォールトの名前を入力します。キーヴォールトに必要なアクセス ポリシーがあることを確認します。詳細については、 「必要なアクセス権」 を参照してください。 |
注意
AKV へのプライベートエンドポイント接続を有効にして設定した後は、ここで AKV 構成を変更することはできません。
Encryption Keyを入力します。
キー識別子 | Key Vault で作成されたキーの完全なURLを入力します。 重要: キー識別子は、完全なAzure一般形式で指定する必要があります。 |
(任意)AKV へのプライベートエンドポイント接続を構成します。
詳細については、 「 プロジェクトでのプライベートエンドポイント接続の有効化と設定」を参照してください
ネットワーク設定を確認します。
Azure Private Link を使用してAtlas Administration API を使用して Atlas を構成し、Atlas と Key Vault 間のすべてのトラフィックがAzureのプライベート ネットワーク インターフェースで行われるようにした場合、Atlas はRequire Private NetworkingステータスをActiveに設定します。 ステータスがInactive の場合、Atlas で AKV へのプライベートエンドポイント接続を使用する場合 は、プロジェクトのプライベートエンドポイント接続の有効化と設定 の手順を完了できます。
エンドポイント:
PATCH /api/atlas/v2/groups/{groupId}/encryptionAtRest
リクエスト本文の例:
{ "azureKeyVault": { "enabled": true, "roleId": "<atlas-managed-roleId>", "subscriptionID": "<subscription-id>", "resourceGroupName": "<resource-group>", "keyVaultName": "<key-vault-name>", "keyIdentifier": "https://<vault>.vault.azure.net/keys/<key>/<version>", "azureEnvironment": "AZURE" } }
この更新後、Atlas は静的認証情報ではなく、有効期間の短いAzure AD トークンを使用して AKV に認証します。
静的認証情報からの移行
プロジェクトですでに静的認証情報(tenantId、clientId、secret)を使用している場合は、クラスターのダウンタイムなしで移行できます。
Atlas が管理するサービス Principal を作成します。
キーヴォールトの権限を付与します。
新しい
roleIdで EAR 構成をパッチします。
検証に失敗した場合、Atlas は静的認証情報を使用し続けます。
検証に成功すると、Atlas は保存された静的認証情報を削除し、roleId が認証の真実のソースになります。
クラスターがプライベートネットワークを使用する場合、Atlas はデータ ノードから非同期に Key Vault アクセスを検証します。
PATCHリクエストが受け入れられた後、検証はすぐに完了しません。データ ノードは、構成が適用された後に Key Vault アクセスを検証します。
roleId で EAR にパッチを適用する前に、すべてのキーヴォールト権限が正しく構成されていることを確認してください。アクセスの設定に誤りがあると、データ ノードの検証が失敗し、最終的に EAR 操作が中断され、クラスターがシャットダウンする可能性があります。
EAR パッチを適用する前に、サービス プリンシパルに必要なキーヴォールト権限があることを確認してください。
Azure RBAC ロールの割り当ての確認
次のコマンドを実行します:
az role assignment list \ --assignee "$SERVICE_PRINCIPAL_OBJECT_ID" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME"
割り当てられたロールが get、encrypt、decrypt などのキー権限を付与することを確認します。
キーヴォールト アクセス ポリシーを確認する
次のコマンドを実行します:
az keyvault show \ --name "$KEY_VAULT_NAME" \ --resource-group "$RESOURCE_GROUP" \ --query "properties.accessPolicies"
サービス プリンシパルがリストされ、必要なキー権限が含まれていることを確認します。