共用方式為


Azure Cosmos DB for NoSQL 的安全性詞彙

適用於:NoSQL

部署指南順序中目前位置 (『Concepts』) 的圖表。

部署指南順序的圖表,包括這些位置,順序如下:概觀、概念、準備、角色型訪問控制、網路和參考。 「概念」位置目前已醒目提示。

本文包含本 Azure Cosmos DB for NoSQL 安全性指南中使用的常見詞彙。

角色型存取控制

角色型存取控制是指管理 Azure 中的資源存取權的方法。 此方法是以被指派角色的特定身分識別為基礎,這些角色會管理他們對一或多個資源的存取層級。 角色型存取控制提供精細存取管理的彈性系統,可確保身分識別只具有執行其工作所需的最低權限存取層級。

如需詳細資訊,請參閱角色型存取控制概觀

身分識別主體

身分識別是指 Microsoft Entra 內的物件,代表可能需要系統存取層級的實體。 在 Azure 和 Microsoft Entra 的內容中,身分識別可指下列其中一種類型的實體:

描述
工作負載身分識別 工作負載身分識別代表需要存取其他服務或資源的軟體工作負載
人類身分識別 人類身分識別代表可以是原生租用戶或新增為來賓的使用者
受控識別 受控識別是 Azure 中代表 Azure 服務身分識別的不同資源
服務主體 服務主體是一種服務帳戶,可用於多種靈活的驗證案例
裝置身分識別 裝置身分識別是 Microsoft Entra 中對應至裝置的物件
群組 群組是用來作為單一作業管理一或多個身分識別存取的物件

如需詳細資訊,請參閱身分識別基本概念

角色

角色是強制執行存取和權限的主要單位。 您可以將角色指派給身分識別,而角色的定義會決定該身分識別可以擁有的存取層級。 指派的範圍會指定身分識別可存取的確切內容。

Azure 有一組大量的內建角色,可用來授與各種資源的存取權。 請考慮此範例:

Role CosmosBackupOperator
[定義] Microsoft.DocumentDB/databaseAccounts/backup/action & Microsoft.DocumentDB/databaseAccounts/restore/action
Scope 資源群組

在此範例中,您已獲指派特定資源群組的 CosmosBackupOperator 角色。 此指派可讓您能夠在該資源群組內的任何 Azure Cosmos DB 帳戶上執行 backuprestore 動作。

重要

某些 Azure 服務 (例如 Azure Cosmos DB) 具有其自己的原生角色型存取控制實作,其中該實作會使用不同的 Azure Resource Manager 屬性、Azure CLI 命令和 Azure PowerShell CmdLet。 您通常用來管理角色型存取控制的命令將無法與 Azure Cosmos DB 資料平面存取搭配使用。 Azure 角色型存取控制的一些命令可能會與 Azure Cosmos DB 控制平面存取搭配使用。

如需詳細資訊,請參閱內建 Azure 角色

角色定義

角色定義是 JSON 物件,其中包含允許及不允許的控制平面資料平面動作的清單。 請考慮這個來自 CosmosRestoreOperator 內建角色的截斷範例:

{
  "roleName": "CosmosRestoreOperator",
  "type": "Microsoft.Authorization/roleDefinitions",
  ...
  "permissions": [
    {
      "actions": [
        "Microsoft.DocumentDB/locations/restorableDatabaseAccounts/restore/action",
        "Microsoft.DocumentDB/locations/restorableDatabaseAccounts/*/read",
        "Microsoft.DocumentDB/locations/restorableDatabaseAccounts/read"
      ],
      "notActions": [],
      "dataActions": [],
      "notDataActions": []
    }
  ],
  ...
}

在此定義中,指派此角色的身分識別可以執行 restore 動作。 還原作業完成後,身分識別就可以讀取各種資源,以驗證還原是否成功。 由於 *read (萬用字元) 運算子,我們可以判定,其可讀取這些資源。

如需詳細資訊,請參閱角色定義概念

角色指派

角色指派會授與對特定 Azure 資源的身分識別存取權。 角色指派包含下列元件:

描述
主體 指派此角色的身分識別
Role 指派至身分識別的角色
Scope 指派的目標 Azure 資源或群組
名稱/描述 可讓您更輕鬆地大規模管理指派的中繼資料

提示

在角色型存取控制中,您可能會看到術語身分識別主體會交換使用。

如需相關資訊,請參閱角色指派概念

動作

動作會定義角色對目標資源擁有哪些特定權限。 動作是通常包含資源類型和描述性名稱的字串,其中詳細說明動作授與的權限。 以下是一些常見範例:

描述 平面
Microsoft.DocumentDB/databaseAccounts/listKeys/action 僅限讀取帳戶金鑰 控制平面
Microsoft.DocumentDB/databaseAccounts/backup/action 執行備份 控制平面
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/replace 完全取代現有項目 資料平面
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery 執行 NoSQL 查詢 資料平面

動作也可以包含 * (萬用字元) 字元,因此您不需要手動詳細說明每個特定子權限。 以下是使用萬用字元的一些動作範例:

描述
Microsoft.DocumentDb/databaseAccounts/* 建立及管理 Azure Cosmos DB 帳戶
Microsoft.DocumentDB/*/read 讀取任何容器或資料庫

動作會分成控制平面資料平面。 您必須分別定義控制平面資源的動作以及會影響資料的動作。 在角色定義中,控制平面動作會使用 actions 屬性和位於 dataActions 屬性內的資料平面動作。 您也可以使用個別 notActionsnotDataActions 屬性定義身份識別無法執行的動作。

注意

將動作分隔為控制和資料平面是一項安全性措施,可防止來自舊版角色定義的萬用字元動作,而不受限制及意外地存取資料。

如需詳細資訊,請參閱控制和資料動作

最低權限

「最低權限」的概念是指操作最佳做法,以確保所有使用者僅擁有執行任務或工作所需的最低存取層級。 例如,從資料庫讀取資料的應用程式只需要資料存放區的讀取存取權。 如果該應用程式擁有資料存放區的讀取和寫入權限,則可能會發生一些情況,包括但不限於:

  • 應用程式可能會錯誤地破壞資料
  • 未經授權的使用者可存取應用程式的認證並修改資料

遵循最低權限的做法可確保任何潛在的資料外洩範圍有限。 這種做法可最大化作業安全性,同時允許使用者保持有效。

如需詳細資訊,請參閱依工作建議的最低特殊權限角色

控制平面

控制平面存取是指在不管理資料的情況下管理 Azure 服務資源的能力。 例如,Azure Cosmos DB 控制平面存取可能包括以下能力:

  • 讀取所有帳戶和資源中繼資料
  • 讀取和重新產生帳戶金鑰和連接字串
  • 執行帳戶備份與還原
  • 啟動和追蹤資料傳輸工作
  • 管理資料庫和容器
  • 修改帳戶屬性

重要

在 Azure Cosmos DB 中,您需要控制平面存取,才能管理原生資料平面角色型存取控制定義和指派。 由於 Azure Cosmos DB 的資料平面角色型存取控制機制是原生的,因此您需要控制平面存取,才能建立定義和指派,並將其儲存為 Azure Cosmos DB 帳戶中的資源。

資料平面

資料平面存取是指能夠讀取和寫入 Azure 服務內的資料,而無法管理帳戶中的資源。 例如,Azure Cosmos DB 資料平面存取可能包括以下能力:

  • 讀取部分帳戶和資源中繼資料
  • 建立、讀取、更新、修補和刪除項目
  • 執行 NoSQL 查詢
  • 從容器的變更摘要讀取
  • 執行預存程序
  • 管理衝突摘要中的衝突

可攜驗證

在開發中,通常會為本機開發和生產執行個體撰寫兩組不同的驗證邏輯。 透過 Azure SDK,您可以使用單一技術撰寫邏輯,並預期驗證碼可在開發和生產中順暢運作。

Azure 身分識別用戶端程式庫可作為 Azure SDK 的一部分提供多種程式設計語言。 使用此程式庫,您可以建立 DefaultAzureCredential 物件,以智慧方式逐步執行多個選項,以便根據您的環境尋找正確的認證。 這些驗證選項包括 (依序):

  1. 儲存為環境變數的用戶端密碼或認證
  2. Microsoft Entra 工作負載 ID
  3. 使用者指派和系統指派的受控識別
  4. 衍生自 Visual Studio 設定的 Azure 認證
  5. 在 Visual Studio Code 的 Azure 帳戶延伸模組中使用的認證
  6. 來自 Azure CLI 的目前認證
  7. 來自 Azure PowerShell 的目前認證
  8. 來自 Azure Developer CLI 的目前認證
  9. 啟動系統瀏覽器進行登入的互動式工作階段

每個新式 Azure SDK 程式庫都支援其各自接受 DefaultAzureCredential 執行個體或其基底類型的用戶端物件或類別的建構函式。

提示

若要讓您的生產程式碼更易偵錯且更可預測,您可以選擇在開發中使用 DefaultAzureCredential,並在部署應用程式之後,交換為更特定的認證 (例如 WorkloadIdentityCredentialManagedIdentityCredential)。 所有這些類別都是以許多 Azure SDK 預期作為其用戶端初始化邏輯一部分的 TokenCredential 類別為基礎,以便能直接來回交換。

唯一識別碼

Microsoft Entra 中的每個身分識別都有唯一識別碼。 您有時會看到這個稱為 idobjectIdprincipalId 的唯一識別碼。 建立角色指派時,您需要用來搭配指派使用的身分識別的唯一識別碼。

範圍

當您指派角色時,必須決定要授與存取權的 Azure 資源或群組。 角色指派的範圍會定義進行指派的層級。

例如:

  • 單一資源範圍僅會將權限套用至該單一資源
  • 在資源群組層級設定的範圍會將權限套用至群組內的所有相關資源
  • 管理群組或訂用帳戶層級的範圍會套用至所有子群組和資源

當您在 Azure 角色型存取控制中指派角色時,最好設定該指派的範圍,以盡可能少地包含工作負載所需的資源。 例如,您可以將指派的範圍設定為資源群組。 該資源群組範圍包含資源群組內的所有 Azure Cosmos DB 資源:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>

或者,您可以將範圍設定為單一 Azure 資源,並讓您的許可權指派更細微且更窄。 在此範例中,Azure Cosmos DB 資源的提供者和名稱可用來縮小範圍:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>

如需詳細資訊,請參閱 Azure 角色型訪問控制範圍

範圍 (Azure Cosmos DB 原生)

在 Azure Cosmos DB 的原生角色型訪問控制實作中,範圍是指您想要套用許可權的帳戶內資源粒度。

在最高層級,您可以使用最大的範圍,將數據平面角色型訪問控制指派範圍限定到整個帳戶。 此範圍包含帳戶內的所有資料庫和容器:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/

或者,您可以將數據平面角色指派的範圍設定為特定資料庫:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>

最後,您可以將指派範圍限定為單一容器,最細微的範圍:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>

後續步驟