Docs Menu
Docs Home
/ /

Azure Key Vault(シークレット認証) でカスタマーキーを管理する

注意

この機能は、次の配置では使用できません。

  • M0 無料クラスター

  • Flex クラスター

詳しくは、「 の制限 」を参照してください。

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での権限:

  • 保管時の暗号化を有効にするプロジェクトの、Atlas のプロジェクト所有者アクセス。

AKV に保存されているカスタマー マネージド キーを 使用するには、Atlas が管理するサービス プリンシパルに、特定のキーヴォールト キーに対して暗号化操作を実行する権限が必要です。

必要なキー権限には、次のものが含まれます。

  • get

  • encrypt

  • decrypt

権限の範囲をできるだけ狭くして、次のいずれかのオプションを使用して付与する必要があります。

詳細については、「 クイック スタート: エンタープライズアプリケーションの追加 」を参照してください。

シークレット認証を使用して保管時の暗号化(EAR)を構成するには、以下を実行する必要があります。

  1. Atlas が管理するAzureサービス プリンシパルを作成します。

  2. サービス プリンシパルにキーヴォールト キーへのアクセス権を付与します。

  3. サービス プリンシパルを使用するように EAR を構成します。

Atlas が所有するAzureアプリケーション用にテナントにAzure Service Principal を作成し、 Cloud Provider Access APIを使用して Atlas に登録します。 AtlasroleId では、EAR を有効にするときに使用する が返されます。

Atlas は、次のAzureアプリケーションID を使用します。

atlasAzureAppId: 9efedfcc-2eca-4b27-a613-0cad1e114cb7
1

次のコマンドを実行して、サービス プリンシパルが存在するリソースのテナントIDを取得します。

az account show --query tenantId -o tsv
2

Atlasアプリケーションのサービスプリンシパルがすでに存在する場合は、次のコマンドを実行して見つけます。

az ad sp list --filter "appId eq '9efedfcc-2eca-4b27-a613-0cad1e114cb7'"

存在しない場合は、次のコマンドを実行して作成します。

az ad sp create --id 9efedfcc-2eca-4b27-a613-0cad1e114cb7

出力から、Atlas に必要なサービスプリンシパル オブジェクトIDである idフィールドをコピーします。

3

クラウドプロバイダー アクセス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 roleId値を返します。これは、EAR を設定するときに必要な です。

Atlas が管理するサービスプリンシパルに、EAR に使用されるキーヴォールトキーに対して暗号化操作を実行する権限を付与します。

Azure RBAC または Key Vault アクセス ポリシーのいずれかを使用してアクセス権を付与できます。

Azure RBAC を使用してアクセス権を付与するには、次の手順に従います。

1

次のコマンドを実行します:

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"
2

次のコマンドを実行します:

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 構成を更新します。

1
  1. まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。

  2. まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。

  3. サイドバーで、 Security見出しの下のDatabase & Network Accessをクリックします。

  4. サイドバーで、Advanced をクリックします。

    詳細ページが表示されます。

2
3
4

Atlas は AKV の 2 つの認証方法をサポートしています。

5

サブスクリプション ID

キーヴォールトのSubscription IDを入力します。

リソース グループ名

キーヴォールトを含むAzure Resource GroupResource Group名を入力します。

キーヴォールト名

キーヴォールトの名前を入力します。キーヴォールトに必要なアクセス ポリシーがあることを確認します。詳細については、 「必要なアクセス権」 を参照してください。

6

キー識別子

Key Vault で作成されたキーの完全なURLを入力します。

重要: キー識別子は、完全なAzure一般形式で指定する必要があります。

https://{keyvault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}
7

詳細については、 「 プロジェクトでのプライベートエンドポイント接続の有効化と設定」を参照してください

8

Azure Private Link を使用してAtlas Administration API を使用して Atlas を構成し、Atlas と Key Vault 間のすべてのトラフィックがAzureのプライベート ネットワーク インターフェースで行われるようにした場合、Atlas はRequire Private NetworkingステータスをActiveに設定します。 ステータスがInactive の場合、Atlas で AKV へのプライベートエンドポイント接続を使用する場合 は、プロジェクトのプライベートエンドポイント接続の有効化と設定 の手順を完了できます。

9

Atlas は、暗号化プロセス中に Atlas コンソールにバナーを表示します。

エンドポイント:

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 に認証します。

プロジェクトですでに静的認証情報(tenantIdclientIdsecret)を使用している場合は、クラスターのダウンタイムなしで移行できます。

  1. Atlas が管理するサービス Principal を作成します。

  2. キーヴォールトの権限を付与します。

  3. 新しい roleId で EAR 構成をパッチします。

検証に失敗した場合、Atlas は静的認証情報を使用し続けます。

検証に成功すると、Atlas は保存された静的認証情報を削除し、roleId が認証の真実のソースになります。

クラスターがプライベートネットワークを使用する場合、Atlas はデータ ノードから非同期に Key Vault アクセスを検証します。

  • PATCHリクエストが受け入れられた後、検証はすぐに完了しません。

  • データ ノードは、構成が適用された後に Key Vault アクセスを検証します。

roleId で EAR にパッチを適用する前に、すべてのキーヴォールト権限が正しく構成されていることを確認してください。アクセスの設定に誤りがあると、データ ノードの検証が失敗し、最終的に EAR 操作が中断され、クラスターがシャットダウンする可能性があります。

EAR パッチを適用する前に、サービス プリンシパルに必要なキーヴォールト権限があることを確認してください。

次のコマンドを実行します:

az role assignment list \
--assignee "$SERVICE_PRINCIPAL_OBJECT_ID" \
--scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME"

割り当てられたロールが getencryptdecrypt などのキー権限を付与することを確認します。

次のコマンドを実行します:

az keyvault show \
--name "$KEY_VAULT_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query "properties.accessPolicies"

サービス プリンシパルがリストされ、必要なキー権限が含まれていることを確認します。

戻る

プライベートエンドポイント経由のアクセスの設定

項目一覧