注意
Atlas supports secretless authentication for using Azure Key Vault (AKV) with Encryption at Rest (EAR). With this model, you don't need to provide Atlas with long-lived static credentials (Tenant ID, Client ID, and Client Secret). Instead, you authorize an Atlas-managed Azure Service Principal in your Azure tenant, and Atlas authenticates to AKV using short-lived OAuth 2.0 access tokens that Azure Active Directory (Azure AD) issues.
注意
MongoDB Atlas共有責任モデルは、安全で回復力のあるデータ環境を維持するためのMongoDBとそのカスタマーの補完的な役割を定義します。このフレームワークの下、 MongoDB は基礎のプラットフォームのセキュリティと運用上の整合性を管理しますが、カスタマーは特定の配置の構成、管理、データ ポリシーに責任を負います。所有者のセキュリティと運用の優れ性の詳細な内訳については、 共有責任モデル を参照してください。
このアプローチでは:
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 ロールが必要です。次の組み込みロールによってこの許可が付与されます。
アプリケーション開発者 (最小特権)
アプリケーション管理者
クラウド アプリケーション 管理者
ハイブリッド ID 管理者
グローバル管理者
詳細については、クイック スタート: エンタープライズアプリケーションの追加 を参照してください。
次のいずれかのオプションを使用して、Key Vault キーにアクセスします。
Azure RBAC (Key Vault またはキーの範囲)
保管時の暗号化を有効にするプロジェクトの、Atlas のプロジェクト所有者アクセス。
Considerations
EAR に 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 に登録します。 Atlas では、EAR を有効にするときに使用する roleId が返されます。
Atlas は、次のAzureアプリケーションID を使用します。
atlasAzureAppId: 9efedfcc-2eca-4b27-a613-0cad1e114cb7
Atlas サービス プリンシパルを作成または見つけます。
Atlasアプリケーションのサービスプリンシパルがすでに存在する場合は、次のコマンドを実行して見つけます。
az ad sp list --filter "appId eq '9efedfcc-2eca-4b27-a613-0cad1e114cb7'"
存在しない場合は、次のコマンドを実行して作成します。
az ad sp create --id 9efedfcc-2eca-4b27-a613-0cad1e114cb7
このコマンドがアクセス許可を拒否するエラーを返す場合は、 Microsoft Entra IDアカウントが 前提条件 にリストされているロールのいずれかを実行していることを確認してください。
出力から、Atlas に必要なサービスプリンシパル オブジェクトIDである idフィールドをコピーします。
Atlas にサービス プリンシパルを登録します。
クラウドプロバイダー アクセスAPI を使用します。
エンドポイントとなる接続されたデバイス:
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 値を返します。これは、EAR を設定 するときに必要な roleId です。
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でサービス プリンシパルを登録して承認した後、Cloud Provider Access APIが返した roleId を使用して EAR 構成を更新します。
Atlas で、プロジェクトの Advanced ページに移動します。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの 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 へのプライベートエンドポイント接続を構成します。
詳細については、 「 プロジェクトでのプライベートエンドポイント接続の有効化と設定」を参照してください
ネットワーク設定を確認します。
If you configured Atlas using the Atlas Administration API to communicate with AKV using Azure Private Link to ensure that all traffic between Atlas and Key Vault takes place over Azure's private network interfaces, Atlas sets the Require Private Networking status to Active. If the status is Inactive, you can, optionally, complete the steps to Enable and Set up Private Endpoint Connections for a Project if you want Atlas to use private endpoint connections for your 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"
サービス プリンシパルがリストされ、必要なキー権限が含まれていることを確認します。