Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2025-02-20 00:39:14 +00:00
parent ed6ca35589
commit 96fe12165f
9 changed files with 233 additions and 132 deletions

File diff suppressed because one or more lines are too long

View File

@@ -35,6 +35,16 @@ az mysql flexible-server update \
```bash
az mysql flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.DBforMySQL/flexibleServers/backups/read`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
通过这些权限,您可以从备份中恢复 MySQL 服务器:
```bash
az mysql flexible-server restore \
--resource-group <resource_group_name> \
--name <restore_server_name> \
--source-server <server_name> \
--yes
```
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforMySQL/flexibleServers/administrators/write` && `Microsoft.DBforMySQL/flexibleServers/administrators/read`
通过此权限,您可以为 MySQL Flexible Server 配置 Azure Active Directory (AD) 管理员。可以通过将自己或其他帐户设置为 AD 管理员来利用此权限,从而获得对 MySQL 服务器的完全管理控制。重要的是flexible-server 必须具有用户分配的托管身份以供使用。

View File

@@ -30,10 +30,56 @@ az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
此外,凭借这些权限,您可以启用分配的身份,并使用附加到服务器的托管身份进行操作。您可以在此找到 Azure PostgreSQL 灵活服务器支持的所有扩展 [https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions](https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions)。要能够使用这些扩展需要更改一些服务器参数azure.extensions。例如这里有一个可以访问 Azure Storage 的托管身份:
首先,我们更改参数,并确保已启用分配的身份:
```bash
az postgres flexible-server parameter set \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--name azure.extensions \
--value "AZURE_STORAGE"
az postgres flexible-server identity update \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--system-assigned Enabled
```
```sql
CREATE EXTENSION IF NOT EXISTS azure_storage;
CREATE EXTERNAL DATA SOURCE ManagedIdentity
SELECT azure_storage.account_add('<storage-account>', '<storage-key>');
SELECT *
FROM azure_storage.blob_get(
'<storage-account>',
'<container>',
'message.txt',
decoder := 'text'
) AS t(content text)
LIMIT 1;
```
此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法:
```bash
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.DBforPostgreSQL/flexibleServers/backups/read`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
通过这些权限,您可以从备份中恢复服务器:
```bash
az postgres flexible-server restore \
--resource-group <RESOURCE_GROUP> \
--name <NEW_SERVER_NAME> \
--source-server <SOURCE_SERVER_NAME> \
--restore-time "<ISO8601_TIMESTAMP>" \
--yes
```
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforPostgreSQL/flexibleServers/administrators/write` && `Microsoft.DBforPostgreSQL/flexibleServers/administrators/read`

View File

@@ -44,6 +44,11 @@ az sql server update \
```
```sql
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
WITH IDENTITY = 'Managed Identity';
GO
CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
@@ -121,4 +126,20 @@ az sql server azure-ad-only-auth disable \
--server <server_name> \
--resource-group <resource_group_name>
```
### Microsoft.Sql/servers/databases/dataMaskingPolicies/write
修改(或禁用)您 SQL 数据库上的数据掩码策略。
```bash
az rest --method put \
--uri "https://management.azure.com/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Sql/servers/<your-server>/databases/<your-database>/dataMaskingPolicies/Default?api-version=2021-11-01" \
--body '{
"properties": {
"dataMaskingState": "Disable"
}
}'
```
### 移除行级安全性
如果您以管理员身份登录,您可以移除管理员自身和其他用户的策略。
```sql
DROP SECURITY POLICY [Name_of_policy];
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,22 +4,30 @@
## Azure CosmosDB
**Azure Cosmos DB** 是一个完全 **托管的 NoSQL、关系和向量数据库**,提供单毫秒级响应时间、自动扩展和具有企业级安全性的 SLA 支持的可用性。它通过即即用的多区域数据分发、流行语言的开源 API、SDK 和集成向量支持及无缝 Azure AI 集成等 AI 数据库功能,加速应用程序开发。
**Azure Cosmos DB** 是一个完全 **托管的 NoSQL、关系和向量数据库**,提供单毫秒级响应时间、自动扩展和具有企业级安全性的 SLA 支持的可用性。它通过即即用的多区域数据分发、流行语言的开源 API、SDK 和集成向量支持及无缝 Azure AI 集成等 AI 数据库功能,加速应用程序开发。
Azure Cosmos DB 提供多种数据库 API以使用文档、关系、键值、图形和列族数据模型来建模现实世界的数据这些 API 包括 NoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin 和 Table。
CosmosDB 的一个关键方面是 Azure Cosmos 账户。**Azure Cosmos 账户** 作为数据库的入口点。该账户决定关键设置,如全球分布、一致性级别和要使用的特定 API例如 NoSQL。通过该账户您可以配置全球复制以确保数据在多个区域可用以实现低延迟访问。此外您可以选择在性能和数据准确性之间取得平衡的一致性级别选项范围从强一致性到最终一致性。
### NoSQL (sql)
Azure Cosmos DB 支持 **用户分配的身份****系统分配的托管身份**这些身份会自动创建并与资源的生命周期绑定允许在连接到其他服务时进行安全的基于令牌的身份验证——前提是这些服务具有适当的角色分配。然而Cosmos DB 没有内置机制直接查询外部数据源,如 Azure Blob Storage。与 SQL Server 的外部表功能不同Cosmos DB 需要使用 Azure Data Factory、数据迁移工具或自定义脚本等外部工具将数据导入其容器然后才能使用其本地查询功能进行查询。
### NoSQL
Azure Cosmos DB NoSQL API 是一个基于文档的 API使用 JSON 作为其数据格式。它提供类似 SQL 的查询语法来查询 JSON 对象,使其适合处理结构化和半结构化数据。该服务的端点是:
```bash
https://<Account-Name>.documents.azure.com:443/
```
#### 数据库
在一个户内,您可以创建一个或多个数据库,这些数据库作为容器的逻辑分组。数据库作为资源管理和用户权限的边界。数据库可以在其容器之间共享预配置的吞吐量,或为单个容器分配专用吞吐量。
在一个户内,您可以创建一个或多个数据库,这些数据库作为容器的逻辑分组。数据库充当资源管理和用户权限的边界。数据库可以在其容器之间共享预配置的吞吐量,或为单个容器分配专用吞吐量。
#### 容器
数据存储的核心单元是容器,它保存 JSON 文档并自动建立索引以实现高效查询。容器具有弹性可扩展性,并分布在由用户定义的分区键确定的分区中。分区键对于确保最佳性能和均匀数据分布至关重要。例如,一个容器可能存储客户数据,"customerId" 作为分区键。
数据存储的核心单元是容器,它保存 JSON 文档并自动进行索引以实现高效查询。容器具有弹性可扩展性,并分布在由用户定义的分区键确定的分区中。分区键对于确保最佳性能和均匀数据分布至关重要。例如,一个容器可能存储客户数据,"customerId" 作为分区键。
#### 关键特性
**全球分布**:启用或禁用地理冗余以进行跨区域复制和多区域写入以提高可用性。
**网络与安全**:在公共(所有/选择网络)或私有端点之间进行连接。使用 TLS 1.2 加密进行安全连接。支持 CORS跨源资源共享以控制对资源的访问。
**备份与恢复**来自定期、连续7 天或连续30 天)备份策略,具有可配置的间隔和保留。
**数据加密**默认服务管理密钥或客户管理密钥CMK用于加密CMK 选择是不可逆的)。
#### 枚举
@@ -42,21 +50,21 @@ az cosmosdb identity show --resource-group <ResourceGroupName> --name <AccountNa
# CosmoDB (NoSQL)
## List the SQL databases under an Azure Cosmos DB account.
## List the NoSQL databases under an Azure Cosmos DB account.
az cosmosdb sql database list --resource-group <ResourceGroupName> --account-name <AccountName>
## List the SQL containers under an Azure Cosmos DB SQL database.
## List the NoSQL containers under an Azure Cosmos DB NoSQL database.
az cosmosdb sql container list --account-name <AccountName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List all SQL role assignments under an Azure Cosmos DB
## List all NoSQL role assignments under an Azure Cosmos DB
az cosmosdb sql role assignment list --resource-group <ResourceGroupName> --account-name <AccountName>
## List all SQL role definitions under an Azure Cosmos DB
## List all NoSQL role definitions under an Azure Cosmos DB
az cosmosdb sql role definition list --resource-group <ResourceGroupName> --account-name <AccountName>
## List the SQL stored procedures under an Azure Cosmos DB
## List the NoSQL stored procedures under an Azure Cosmos DB
az cosmosdb sql stored-procedure list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List the SQL triggers under an Azure Cosmos DB SQL container.
## List the NoSQL triggers under an Azure Cosmos DB NoSQL container.
az cosmosdb sql trigger list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List the SQL user defined functions under an Azure Cosmos DB SQL container
## List the NoSQL user defined functions under an Azure Cosmos DB NoSQL container
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
```
@@ -149,7 +157,7 @@ print("All items in the container:")
for item in all_items:
print(item)
```
另一种建立连接的方法是使用 **DefaultAzureCredential()**。只需使用具有权限的帐户登录 (az login) 并执行它。对于这种情况,必须进行角色分配,以授予必要的权限 (见更多)。
另一种建立连接的方法是使用 **DefaultAzureCredential()**。只需使用具有权限的帐户登录 (az login) 并执行它。对于这种情况,必须进行角色分配,以授予必要的权限 (see for mor)
```python
from azure.identity import DefaultAzureCredential
from azure.cosmos import CosmosClient
@@ -175,7 +183,7 @@ container.create_item(item)
print("Document inserted.")
```
### MongoDB
MongoDB NoSQL API 是一个基于文档的 API使用类似 JSON 的 BSONBinary JSON作为其数据格式。它提供了具有聚合能力的查询语言使其适合处理结构化、半结构化和非结构化数据。服务的端点通常遵循以下格式:
MongoDB NoSQL API 是一个基于文档的 API使用类似 JSON 的 BSONBinary JSON作为其数据格式。它提供了具有聚合能力的查询语言适合处理结构化、半结构化和非结构化数据。服务的端点通常遵循以下格式
```bash
mongodb://<hostname>:<port>/<database>
```
@@ -183,7 +191,18 @@ mongodb://<hostname>:<port>/<database>
在 MongoDB 中,您可以在一个实例中创建一个或多个数据库。每个数据库作为集合的逻辑分组,并提供资源组织和管理的边界。数据库有助于逻辑上分离和管理数据,例如用于不同的应用程序或项目。
#### 集合
MongoDB 中的数据存储核心单元是集合,它保存文档,并设计用于高效查询和灵活的模式设计。集合具有弹性可扩展性,并可以支持在分布式设置中跨多个节点的高吞吐量操作。
MongoDB 中的数据存储核心单元是集合,它保存文档,并设计用于高效查询和灵活的架构设计。集合具有弹性可扩展性,并可以在分布式设置中支持高吞吐量操作。
#### 请求单位 (RU) 类型的关键特性
**全球分布**:启用或禁用地理冗余以进行跨区域复制和多区域写入以提高可用性。
**网络与安全**:在公共(所有/选择网络)或私有端点之间进行连接。使用 TLS 1.2 加密进行安全连接。支持 CORS跨源资源共享以控制对资源的访问。
**备份与恢复**来自定期、连续7 天免费或连续30 天,付费)备份策略,具有可配置的间隔和保留。
**数据加密**默认服务管理密钥或客户管理密钥CMK用于加密CMK 选择是不可逆的)。
#### vCore 集群类型的关键特性
**全球分布**:在另一个 Azure 区域启用只读副本以实现高可用性和故障转移支持。配置副本名称、区域和每个分片的存储。
**网络与安全**:支持公共访问,分配公共 IP 和私有访问。使用防火墙规则限制连接——默认情况下,不允许公共 IP。
**加密连接**:强制使用 TLS 加密以确保数据传输安全。
#### 枚举

View File

@@ -4,14 +4,19 @@
## 基本信息
Azure Logic Apps 是微软 Azure 提供的基于云的服务,使开发人员能够 **创建和运行集成各种服务、数据源和应用程序的工作流**。这些工作流旨在 **自动化业务流程**、协调任务,并在不同平台之间执行数据集成。
Azure Logic Apps 是微软 Azure 提供的基于云的服务,使开发人员能够 **创建和运行集成各种服务**、数据源和应用程序的工作流。这些工作流旨在 **自动化业务流程**、协调任务,并在不同平台之间执行数据集成。
Logic Apps 提供了一个可视化设计器,可以使用 **广泛的预构建连接器** 创建工作流,这使得连接和与各种服务(如 Office 365、Dynamics CRM、Salesforce 等)进行交互变得简单。您还可以根据特定需求创建自定义连接器。
在创建 Logic App 时,您必须创建或链接一个外部存储帐户,以存储工作流状态、运行历史记录和工件。此存储可以配置诊断设置以进行监控,并可以通过网络访问限制进行安全保护,或集成到虚拟网络中以控制入站和出站流量。
### 托管身份
Logic Apps 具有与其生命周期相关的 **系统分配的托管身份**。启用时它会接收一个唯一的对象主体ID可与 Azure RBAC 一起使用,以安全地授予访问其他 Azure 服务所需的权限。这消除了在代码中存储凭据的需要,因为身份是通过 Microsoft Entra ID 进行身份验证的。此外,您还可以使用 **用户分配的托管身份**,这些身份可以在多个资源之间共享。这些身份允许工作流和 Logic Apps 安全地与外部系统进行交互,确保必要的访问控制和权限通过 Azure 的安全框架集中管理。
### 示例
- **自动化数据管道**Logic Apps 可以与 Azure Data Factory 结合自动化 **数据传输和转换过程**。这对于创建可扩展和可靠的数据管道非常有用,这些管道在各种数据存储之间移动和转换数据,如 Azure SQL 数据库和 Azure Blob 存储,帮助进行分析和商业智能操作。
- **与 Azure Functions 集成**Logic Apps 可以与 Azure Functions 一起工作,开发 **复杂的事件驱动应用程序,按需扩展**,并与其他 Azure 服务无缝集成。一个示例用例是使用 Logic App 在响应某些事件(如 Azure 存储帐户中的更改)时触发 Azure Function从而实现动态数据处理。
- **与 Azure Functions 集成**Logic Apps 可以与 Azure Functions 一起工作,开发 **复杂的事件驱动应用程序,按需扩展**,并与其他 Azure 服务无缝集成。一个示例用例是使用 Logic App 在响应某些事件(如 Azure 存储帐户中的更改)时触发 Azure Function从而实现动态数据处理。
### 可视化 LogicAPP
@@ -25,7 +30,7 @@ Logic Apps 提供了一个可视化设计器,可以使用 **广泛的预构建
即使您发现 **Logic App 易受 SSRF 攻击**,也无法从元数据中访问凭据,因为 Logic Apps 不允许这样做。
例如,类似这样的请求不会返回令牌:
例如,类似这样的请求不会返回令牌:
```bash
# The URL belongs to a Logic App vulenrable to SSRF
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
@@ -39,7 +44,11 @@ curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e9741
* **Standard**
- **Workflow Service Plan**: 专用计算资源,具有 VNET 集成用于网络,并按工作流服务计划实例收费。适合需要更大控制的更高要求的工作负载。
- **App Service Environment V3** 专用计算资源,具有完全隔离和可扩展性。它还与 VNET 集成用于网络,并使用基于环境中 App Service 实例的定价模型。这非常适合需要高隔离的企业级应用程序。
- **Hybrid** 设计用于本地处理和多云支持。它允许客户管理的计算资源具有本地网络访问,并利用 Kubernetes 事件驱动的自动扩展KEDA
- **Hybrid** 设计用于本地处理和多云支持。它允许客户管理的计算资源具有本地网络访问,并利用 Kubernetes 事件驱动的自动扩展KEDA
### Workflows
Azure Logic Apps 中的工作流是协调各种服务之间操作的核心自动化过程。工作流以触发器开始——一个事件或计划——然后执行一系列操作,例如调用 API、处理数据或与其他 Azure 服务交互。工作流可以使用设计器以可视化方式定义也可以通过代码JSON 定义)进行定义,并通过命令如 az logic workflow create、az logic workflow show 和 az logic workflow update 进行管理。它们还支持身份管理(通过身份子组)以安全管理权限和与外部资源的集成。
### Enumeration
@@ -137,8 +146,6 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
{{#endtab }}
{{#endtabs }}
### 集成帐户
**集成帐户**是 Azure Logic Apps 的一个功能。集成帐户用于通过启用高级 B2B 功能(如 EDI、AS2 和 XML 架构管理)来促进企业级集成。集成帐户是 Azure 中的一个容器,用于存储 Logic Apps 使用的以下工件:

View File

@@ -16,9 +16,9 @@ Azure Database for MySQL 是一个完全托管的关系数据库服务,基于
- 提供停止/启动功能以节省成本。
### 关键特性
* **服务器管理****ad-admin** 功能允许管理 Azure Active Directory (AAD) 管理员的 MySQL 服务器,通过 AAD 凭据提供对管理访问的控制,而 **identity** 功能则支持 Azure 管理身份的分配和管理,提供安全的无凭据身份验证以访问 Azure 资源
* **生命周期管理**:选项包括启动或停止服务器、删除灵活服务器实例、重启服务器以快速应用配置更改,以及等待以确保服务器满足特定条件后再继续执行自动化脚本。
* **安全性和网络**可以管理服务器防火墙规则以确保数据库访问安全,并根据需要分离虚拟网络配置
* **服务器管理****ad-admin** 功能允许管理 Azure Entra ID 管理员的 MySQL 服务器,通过 Entra ID 凭据控制管理访问。Mysql 支持用户管理身份,用于在不需要凭据的情况下进行身份验证,并可被其他服务使用
* **生命周期管理**:选项包括启动或停止服务器、删除灵活服务器实例、重启服务器以快速应用配置更改,以及等待以确保服务器满足特定条件后再继续自动化脚本。
* **安全性和网络**通过防火墙规则限制连接,仅允许特定公共 IP 地址,或使用将服务器集成到虚拟网络中的私有端点来保护服务器。所有连接都使用 TLS 1.2 加密进行保护。数据库、备份和日志默认使用服务管理密钥或自定义密钥进行静态加密
* **数据保护和备份**:包括管理灵活服务器备份以进行数据恢复的选项,执行地理恢复以在不同区域恢复服务器,导出服务器备份以供外部使用(预览中),以及从备份恢复服务器到特定时间点。
### 枚举

View File

@@ -23,6 +23,7 @@
* **自动备份**:内置每日备份,保留期可配置最长达 35 天。
* **基于角色的访问**:通过 Azure Active Directory 控制用户权限和管理访问。
* **安全性和网络**:可以管理服务器防火墙规则以确保安全的数据库访问,并根据需要分离虚拟网络配置。
* **托管身份**:允许您的服务器安全地与其他 Azure 服务进行身份验证,而无需存储凭据。它允许访问其他服务,这将是系统分配的托管身份,并可以通过其他身份访问的用户分配的托管身份。
### 枚举
@@ -110,7 +111,7 @@ az postgres flexible-server execute \
```bash
psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser <database-name>
```
## References
## 参考
- [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
@@ -130,7 +131,7 @@ psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser
## 待办事项
* 寻找一种方法以 ad-admin 访问以验证这是否是一个权限提升方法
* 寻找一种方法以 ad-admin 访问以验证这是一种权限提升方法
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -8,144 +8,93 @@ Azure SQL 是一系列托管、安全和智能的产品,使用 **Azure 云中
Azure SQL 由四个主要产品组成:
1. **Azure SQL Server**Azure SQL Server 是一种托管关系数据库服务,简化了 SQL Server 数据库的部署和管理,具有内置的安全性和性能特性
2. **Azure SQL Database**:这是一个 **完全托管的数据库服务**,允许您在 Azure 云中托管单个数据库。它提供内置智能,学习您独特的数据库模式,并提供定制的建议和自动调优。
3. **Azure SQL Managed Instance**这是针对更大规模整个 SQL Server 实例范围的部署。它提供与最新的 SQL Server 本地(企业版)数据库引擎近 100% 的兼容性提供本地虚拟网络VNet实现解决常见的安全问题并为本地 SQL Server 客户提供有利的商业模式。
4. **Azure SQL Server on Azure VMs**这是基础设施即服务IaaS最适合您希望 **控制操作系统和 SQL Server 实例** 的迁移,就像它是一个在本地运行的服务器
1. **Azure SQL Server**需要一个服务器来进行 **SQL Server 数据库的部署和管理**
2. **Azure SQL Database**:这是一个 **完全托管的数据库服务**,允许您在 Azure 云中托管单个数据库。
3. **Azure SQL Managed Instance**适用于更大规模整个 SQL Server 实例范围的部署。
4. **Azure SQL Server on Azure VMs**:最适合您希望 **控制操作系统** 和 SQL Server 实例的架构
### Azure SQL Server
### SQL Server 安全特性
Azure SQL Server 是一种关系数据库管理系统RDBMS使用 Transact-SQL 进行数据操作,旨在处理企业级系统。它提供强大的性能、安全性、可扩展性和与各种 Microsoft 应用程序集成的功能。Azure SQL 数据库依赖于此服务器,因为这些数据库是建立在此服务器上的,它是用户访问数据库的入口点。
**网络访问:**
#### 网络
- 公共端点(可以限制访问特定网络)。
- 私有端点。
- 也可以根据域名限制连接。
- 也可以允许 Azure 服务访问(例如使用门户中的查询编辑器或允许 Azure VM 连接)。
**网络连接**:选择是否通过公共端点或私有端点启用访问。如果您选择无访问,则不会创建任何端点,直到手动配置:
- 无访问:未配置任何端点,阻止传入连接,直到手动设置。
- 公共端点:允许通过公共互联网直接连接,受防火墙规则和其他安全配置的限制。
- 私有端点:限制连接到私有网络。
**身份验证方法:**
**连接策略**:定义客户端如何与 SQL 数据库服务器通信:
- 默认:对来自 Azure 内部的所有客户端连接(除了使用私有端点的连接)使用重定向策略,对来自 Azure 外部的连接使用代理策略
- 代理:通过 Azure SQL 数据库网关路由所有客户端连接
- 重定向:客户端直接连接到托管数据库的节点。
- Microsoft **Entra-only** 身份验证:您需要指明将访问该服务的 Entra 主体。
- **SQL 和 Microsoft Entra** 身份验证:传统的 SQL 身份验证与用户名和密码以及 Microsoft Entra 一起使用
- **仅 SQL** 身份验证:仅允许通过数据库用户访问
#### 认证方法
Azure SQL 支持多种认证方法以保护数据库访问:
请注意,如果允许任何 SQL 身份验证,则需要指明一个管理员用户(用户名 + 密码),如果选择 Entra ID 身份验证,则还需要指明至少一个具有管理员访问权限的主体。
- **仅 Microsoft Entra 认证**:使用 Microsoft Entra以前称为 Azure AD进行集中身份管理和单点登录。
- **SQL 和 Microsoft Entra 认证**:允许您将传统 SQL 认证与 Microsoft Entra 一起使用。
- **SQL 认证**:仅依赖于 SQL Server 用户名和密码。
**加密:**
#### 安全特性
- 这被称为“透明数据加密”,它对数据库、备份和静态日志进行加密。
- 和往常一样,默认使用 Azure 管理的密钥但也可以使用客户管理的加密密钥CMEK
SQL 服务器具有 **托管身份**。托管身份允许您的服务器安全地与其他 Azure 服务进行身份验证而无需存储凭据。它允许访问其他服务这将是系统分配的托管身份并可以通过其他身份访问的用户分配的托管身份。SQL 可以访问的一些服务包括 Azure 存储帐户V2、Azure Data Lake Storage Gen2、SQL Server、Oracle、Teradata、MongoDB 或 Cosmos DB API for MongoDB、通用 ODBC、大规模操作和 S3 兼容的对象存储。
**托管身份**
SQL 服务器的其他安全特性包括:
- 可以分配系统和用户管理的 MI。
- 用于访问加密密钥(如果使用 CMEK和数据库中的其他服务。
- 如果分配了多个 UMI可以指明要使用的默认 UMI。
- 可以为跨租户访问配置联合客户端身份。
- **防火墙规则**:防火墙规则通过限制或允许流量来控制对服务器的访问。这也是数据库本身的一个特性。
- **透明数据加密 (TDE)**TDE 在静态状态下加密您的数据库、备份和日志,以保护您的数据,即使存储被破坏。可以使用服务管理密钥或客户管理密钥进行。
- **Microsoft Defender for SQL**:可以启用 Microsoft Defender for SQL提供漏洞评估和高级威胁保护。
**Microsoft Defender**
#### 部署模型
- 有助于“减轻潜在的数据库漏洞,并检测异常活动”。
- 我们将在自己的课程中讨论 Defender可以在其他多个 Azure 服务中启用)。
Azure SQL 数据库支持灵活的部署选项,以满足各种需求:
**备份:**
- 备份频率在保留策略中管理。
- **单一数据库**
- 一个完全隔离的数据库,具有自己的专用资源
- 非常适合微服务或需要单一数据源的应用程序。
- **弹性池**
- 允许多个数据库在池内共享资源。
- 对于在多个数据库中使用模式波动的应用程序,具有成本效益。
**已删除的数据库:**
- 可以从现有备份中恢复已删除的数据库
### Azure SQL Database
## Azure SQL Database
**Azure SQL Database** 是一个 **完全托管的数据库平台即服务 (PaaS)**,提供可扩展和安全的关系数据库解决方案。它基于最新的 SQL Server 技术,消除了基础设施管理的需要,使其成为基于云的应用程序的热门选择。
#### 关键特性
要创建 SQL 数据库,需要指明将要托管的 SQL 服务器。
### SQL 数据库安全特性
- **始终保持最新**:运行在最新的稳定版本的 SQL Server 上,并自动接收新功能和补丁。
- **PaaS 功能**:内置高可用性、备份和更新。
- **数据灵活性**支持关系和非关系数据例如图形、JSON、空间和 XML
- **继承的 SQL Server 安全特性:**
- 身份验证SQL 和/或 Entra ID
- 分配的托管身份
- 网络限制
- 加密
- 备份
-
- **数据冗余:** 选项包括本地、区域、地理或地理区域冗余。
- **账本:** 它通过加密验证数据的完整性,确保任何篡改都能被检测到。对金融、医疗和任何管理敏感数据的组织非常有用。
#### 网络
SQL 数据库可以是 **弹性池** 的一部分。弹性池是通过在多个数据库之间共享可配置的计算eDTUs和存储资源来管理多个数据库的成本效益解决方案定价仅基于分配的资源而不是数据库的数量。
**网络连接**:选择是否通过公共端点或私有端点启用访问。如果您选择无访问,则不会创建任何端点,直到手动配置:
- 无访问:未配置任何端点,阻止传入连接,直到手动设置。
- 公共端点:允许通过公共互联网直接连接,受防火墙规则和其他安全配置的限制。
- 私有端点:限制连接到私有网络。
#### Azure SQL 列级安全(掩码)和行级安全
**连接策略**:定义客户端如何与 SQL 数据库服务器通信:
- 默认:对来自 Azure 内部的所有客户端连接(除了使用私有端点的连接)使用重定向策略,对来自 Azure 外部的连接使用代理策略。
- 代理:通过 Azure SQL 数据库网关路由所有客户端连接。
- 重定向:客户端直接连接到托管数据库的节点。
**Azure SQL 的动态** 数据掩码是一项功能,帮助 **通过隐藏敏感信息** 来保护敏感信息。它不会更改实际数据,而是动态掩盖显示的数据,确保像信用卡号码这样的敏感细节被遮蔽。
#### 安全特性
**动态数据掩码** 影响所有用户,除了未掩盖的用户(这些用户需要被指明)和管理员。它具有配置选项,指定哪些 SQL 用户可以免于动态数据掩码,**管理员始终被排除在外**。
- **Microsoft Defender for SQL**:可以启用,提供漏洞评估和高级威胁保护
- **分类账**:通过加密验证数据的完整性,确保任何篡改都能被检测到。
- **服务器身份**:使用系统分配和用户分配的托管身份以启用集中访问。
- **透明数据加密密钥管理**:在不需要对应用程序进行任何更改的情况下加密数据库、备份和日志。可以在每个数据库上启用加密,如果在数据库级别配置,这些设置将覆盖服务器级别的配置。
- **始终加密**:是一套先进的数据保护功能,将数据所有权与数据管理分离。这确保具有高权限的管理员或操作员无法访问敏感数据。
#### 购买模型 / 服务层级
- **基于 vCore**:独立选择计算、内存和存储。适用于通用用途、业务关键(具有高弹性和 OLTP 应用程序的性能)并可扩展到 128 TB 存储。
- **基于 DTU**:将计算、内存和 I/O 打包成固定层级。为常见任务提供平衡资源。
- 标准:为常见任务提供平衡资源。
- 高级:为要求苛刻的工作负载提供高性能。
#### 可扩展性能和池
- **单一数据库**每个数据库都是隔离的具有自己的专用计算、内存和存储资源。资源可以动态扩展向上或向下而无需停机1128 vCores32 GB4 TB 存储,最多 128 TB
- **弹性池**:在池中跨多个数据库共享资源,以最大化效率并节省成本。资源也可以为整个池动态扩展。
- **服务层级灵活性**:从通用用途层中的单一数据库开始。随着需求的增长,升级到业务关键或超大规模层。
- **扩展选项**:动态扩展或自动扩展替代方案。
#### 内置监控与优化
- **查询存储**:跟踪性能问题,识别资源消耗最多的用户,并提供可操作的建议。
- **自动调优**:通过自动索引和查询计划修正等功能主动优化性能。
- **遥测集成**:通过 Azure Monitor、事件中心或 Azure 存储支持监控,以获取定制的见解。
#### 灾难恢复与可用性
- **自动备份**SQL 数据库自动执行数据库的完整、差异和事务日志备份。
- **时间点恢复**:在备份保留期内将数据库恢复到任何过去的状态。
- **地理冗余**
- **故障转移组**:通过将数据库分组以实现跨区域的自动故障转移,简化灾难恢复。
**Azure SQL 行级安全 (RLS)** 是一项功能,**控制用户可以查看或修改哪些行**,确保每个用户仅查看与其相关的数据。通过创建带有过滤或阻止谓词的安全策略,组织可以在数据库级别实施细粒度访问控制
### Azure SQL Managed Instance
**Azure SQL Managed Instance** 是一种平台即服务 (PaaS) 数据库引擎,提供与 SQL Server 近 100% 的兼容性,并自动处理大多数管理任务(例如,升级、修补、备份、监控)。它为迁移本地 SQL Server 数据库提供了最小更改的云解决方案
**Azure SQL Managed Instances** 适用于更大规模的整个 SQL Server 实例范围的部署。它提供与最新的 SQL Server 本地(企业版)数据库引擎近乎 100% 的兼容性,提供本地虚拟网络 (VNet) 实现,解决常见的安全问题,并为本地 SQL Server 客户提供有利的商业模式
#### 服务层级
### Azure SQL 虚拟机
- **通用用途**:适用于具有标准 I/O 和延迟要求的应用程序的成本效益选项
- **业务关键**:为关键工作负载提供低 I/O 延迟的高性能选项。
**Azure SQL 虚拟机** 允许 **控制操作系统** 和 SQL Server 实例,因为将在运行 SQL Server 的 VM 服务中生成一个 VM
#### 高级安全特性
创建 SQL 虚拟机时,可以 **选择 VM 的所有设置**(如 VM 课程中所示),该 VM 将托管 SQL Server。
- 这意味着 VM 将访问某些 VNet可能会有 **附加的托管身份**,可能会挂载文件共享……使得 **从 SQL 到 VM 的跳板** 非常有趣。
- 此外,可以配置应用 ID 和密钥以 **允许 SQL 访问特定的密钥保管库**,该保管库可能包含敏感信息。
* **威胁保护**:高级威胁保护警报可检测可疑活动和 SQL 注入攻击。审计以跟踪和记录数据库事件以确保合规性
* **访问控制**Microsoft Entra 认证用于集中身份管理。行级安全性和动态数据掩码用于细粒度访问控制。
* **备份**:具有时间点恢复能力的自动和手动备份。
### Azure SQL Virtual Machines
**Azure SQL Virtual Machines** 最适合您希望 **控制操作系统和 SQL Server 实例** 的迁移,就像它是一个在本地运行的服务器。它可以具有不同的机器大小,以及广泛的 SQL Server 版本和版本选择。
#### 关键特性
**自动备份**:为 SQL 数据库安排备份。
**自动修补**:在维护窗口期间自动安装 Windows 和 SQL Server 更新。
**Azure Key Vault 集成**:自动为 SQL Server 虚拟机配置 Key Vault。
**云防御者集成**:在门户中查看 SQL 的防御者建议。
**版本/版本灵活性**:在不重新部署虚拟机的情况下更改 SQL Server 版本或版本元数据。
#### 安全特性
**Microsoft Defender for SQL**:安全见解和警报。
**Azure Key Vault 集成**:安全存储凭据和加密密钥。
**Microsoft Entra (Azure AD)**:身份验证和访问控制。
还可以配置自动 SQL 更新、自动备份、Entra ID 身份验证以及其他 SQL 服务的大多数功能
## 枚举
@@ -216,6 +165,30 @@ az sql midb show --resource-group <res-grp> --name <name>
# Lis all sql VM
az sql vm list
az sql vm show --resource-group <res-grp> --name <name>
# List schema by the database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas?api-version=2021-11-01"
# Get tables of a database with the schema
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas/<schemaName>/tables?api-version=2021-11-01"
# Get columns of a database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/columns?api-version=2021-11-01"
# Get columns of a table
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas/<schemaName>/tables/<tableName>/columns?api-version=2021-11-01"
# Get DataMaskingPolicies of a database
az rest --method get \
--uri "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Sql/servers/getstorageserver/databases/masktest/dataMaskingPolicies/Default?api-version=2021-11-01"
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/dataMaskingPolicies/Default/rules?api-version=2021-11-01"
```
{{#endtab}}
@@ -260,6 +233,31 @@ Get-AzSqlVM
{{#endtab}}
{{#endtabs}}
此外,如果您想在数据库中枚举动态数据掩码和行级策略,可以查询:
```sql
--Enumerates the masked columns
SELECT
OBJECT_NAME(mc.object_id) AS TableName,
c.name AS ColumnName,
mc.masking_function AS MaskingFunction
FROM sys.masked_columns AS mc
JOIN sys.columns AS c
ON mc.object_id = c.object_id
AND mc.column_id = c.column_id
--Enumerates Row level policies
SELECT
sp.name AS PolicyName,
sp.is_enabled,
sp.create_date,
sp.modify_date,
OBJECT_NAME(sp.object_id) AS TableName,
sp2.predicate_definition AS PredicateDefinition
FROM sys.security_policies AS sp
JOIN sys.security_predicates AS sp2
ON sp.object_id = sp2.object_id;
```
### 连接并运行 SQL 查询
您可以从示例 [枚举 Az WebApp](az-app-services.md) 中找到连接字符串(包含凭据):