mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az
This commit is contained in:
+53
-4
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Logic Apps 数据库后渗透
|
||||
## Logic Apps 数据库后期利用
|
||||
有关逻辑应用的更多信息,请查看:
|
||||
|
||||
{{#ref}}
|
||||
@@ -10,7 +10,7 @@
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
通过这些权限,您可以修改逻辑应用工作流并管理其身份。具体而言,您可以将系统分配和用户分配的托管身份分配或移除到工作流,这使得逻辑应用能够在没有明确凭据的情况下进行身份验证并访问其他 Azure 资源。
|
||||
拥有这些权限后,您可以修改逻辑应用工作流并管理其身份。具体来说,您可以将系统分配和用户分配的托管身份分配或移除到工作流,这使得逻辑应用能够在没有显式凭据的情况下进行身份验证并访问其他 Azure 资源。
|
||||
```bash
|
||||
az logic workflow identity remove/assign \
|
||||
--name <workflow_name> \
|
||||
@@ -18,6 +18,45 @@ az logic workflow identity remove/assign \
|
||||
--system-assigned true \
|
||||
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
|
||||
```
|
||||
此外,仅使用 `Microsoft.Logic/workflows/write`,您可以更改一些配置,例如允许的入站 IP 地址或运行历史保留天数:
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Logic/workflows/<workflow_name>?api-version=2019-05-01" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"location": "<location>",
|
||||
"properties": {
|
||||
"state": "Enabled",
|
||||
"definition": {
|
||||
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {},
|
||||
"triggers": {
|
||||
"<trigger_name>": {
|
||||
"type": "Request",
|
||||
"kind": "Http"
|
||||
}
|
||||
},
|
||||
"actions": {},
|
||||
"outputs": {}
|
||||
},
|
||||
"runtimeConfiguration": {
|
||||
"lifetime": {
|
||||
"unit": "day",
|
||||
"count": <count>
|
||||
}
|
||||
},
|
||||
"accessControl": {
|
||||
"triggers": {
|
||||
"allowedCallerIpAddresses": []
|
||||
},
|
||||
"actions": {
|
||||
"allowedCallerIpAddresses": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
### `Microsoft.Web/sites/read`, `Microsoft.Web/sites/write`
|
||||
拥有这些权限,您可以创建或更新托管在应用服务计划上的逻辑应用。这包括修改设置,例如启用或禁用 HTTPS 强制执行。
|
||||
```bash
|
||||
@@ -27,7 +66,7 @@ az logicapp update \
|
||||
--set httpsOnly=false
|
||||
```
|
||||
### `Microsoft.Web/sites/stop/action`, `Microsoft.Web/sites/start/action` || `Microsoft.Web/sites/restart/action`
|
||||
通过此权限,您可以启动/停止/重启一个 web 应用,包括托管在 App Service Plan 上的 Logic Apps。此操作确保之前停止的应用程序重新上线并恢复其功能。这可能会干扰工作流程,触发意外操作,或通过意外启动、停止或重启 Logic Apps 导致停机。
|
||||
拥有此权限,您可以启动/停止/重启一个 web 应用,包括托管在 App Service Plan 上的 Logic Apps。此操作确保之前停止的应用程序重新上线并恢复其功能。这可能会干扰工作流程,触发意外操作,或通过意外启动、停止或重启 Logic Apps 导致停机。
|
||||
```bash
|
||||
az webapp start/stop/restart \
|
||||
--name <logic_app_name> \
|
||||
@@ -77,7 +116,7 @@ az logic integration-account map create \
|
||||
--map-content map-content.xslt
|
||||
```
|
||||
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/partners/write`
|
||||
拥有此权限,您可以在 Azure Logic Apps 集成帐户中创建或修改合作伙伴。合作伙伴代表参与企业对企业 (B2B) 工作流的实体或系统。
|
||||
拥有此权限,您可以在 Azure Logic Apps 集成帐户中创建或修改合作伙伴。合作伙伴代表参与企业对企业(B2B)工作流的实体或系统。
|
||||
```bash
|
||||
az logic integration-account partner create \
|
||||
--resource-group <resource_group_name> \
|
||||
@@ -111,6 +150,16 @@ az logic integration-account session create \
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
### `Microsoft.Logic/workflows/regenerateAccessKey/action`
|
||||
|
||||
具有此权限的用户能够重新生成 Logic App 访问密钥,如果被滥用,可能会导致服务中断。
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Logic/workflows/<workflow-name>/regenerateAccessKey?api-version=<api-version>" \
|
||||
--body '{"keyType": "<key-type>"}' \
|
||||
--headers "Content-Type=application/json"
|
||||
|
||||
```
|
||||
### "*/delete"
|
||||
凭借这些权限,您可以删除与 Azure Logic Apps 相关的资源
|
||||
|
||||
@@ -32,6 +32,65 @@ az rest \
|
||||
--body '{}' \
|
||||
--headers "Content-Type=application/json"
|
||||
```
|
||||
此外,仅使用 `Microsoft.Logic/workflows/write`,您可以更改授权策略,例如,允许另一个租户触发工作流:
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Logic/workflows/<workflow-name>?api-version=2016-10-01" \
|
||||
--body '{
|
||||
"location": "<region>",
|
||||
"properties": {
|
||||
"definition": {
|
||||
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"$connections": {
|
||||
"defaultValue": {},
|
||||
"type": "Object"
|
||||
}
|
||||
},
|
||||
"triggers": {
|
||||
"<trigger-name>": {
|
||||
"type": "Request",
|
||||
"kind": "Http"
|
||||
}
|
||||
},
|
||||
"actions": {},
|
||||
"outputs": {}
|
||||
},
|
||||
"accessControl": {
|
||||
"triggers": {
|
||||
"openAuthenticationPolicies": {
|
||||
"policies": {
|
||||
"<policy-name>": {
|
||||
"type": "AAD",
|
||||
"claims": [
|
||||
{
|
||||
"name": "iss",
|
||||
"value": "<issuer-url>"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}'
|
||||
|
||||
```
|
||||
### `Microsoft.Logic/workflows/triggers/listCallbackUrl/action`
|
||||
您可以获取触发器的回调 URL 并运行它。
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Logic/workflows/<workflow_name>/triggers/<trigger_name>/listCallbackUrl?api-version=2019-05-01"
|
||||
```
|
||||
这将返回一个回调 URL,如 `https://prod-28.centralus.logic.azure.com:443/workflows/....`。现在我们可以用以下命令运行它:
|
||||
```bash
|
||||
curl --request POST \
|
||||
--url "https://prod-28.centralus.logic.azure.com:443/workflows/<workflow_id>/triggers/<trigger_name>/paths/invoke?api-version=2019-05-01&sp=%2Ftriggers%2F<trigger_name>%2Frun&sv=1.0&sig=<signature>" \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{"exampleKey": "exampleValue"}'
|
||||
```
|
||||
### (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/basicPublishingCredentialsPolicies/read`, `Microsoft.Web/sites/write`, `Microsoft.Web/sites/config/list/action`) && (`Microsoft.Web/sites/start/action`)
|
||||
拥有这些权限,您可以使用 ZIP 文件部署来部署 Logic App 工作流。这些权限允许执行诸如读取应用程序详细信息、访问发布凭据、写入更改和列出应用程序配置等操作。结合启动权限,您可以更新并部署具有所需内容的新 Logic App。
|
||||
```bash
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
|
||||
Azure Cosmos DB 提供多种数据库 API,以使用文档、关系、键值、图形和列族数据模型来建模现实世界的数据,这些 API 包括 NoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin 和 Table。
|
||||
|
||||
CosmosDB 的一个关键方面是 Azure Cosmos 账户。**Azure Cosmos 账户** 作为数据库的入口点。该账户决定关键设置,如全球分布、一致性级别和要使用的特定 API,例如 NoSQL。通过该账户,您可以配置全球复制,以确保数据在多个区域可用,以实现低延迟访问。此外,您可以选择在性能和数据准确性之间取得平衡的一致性级别,选项范围从强一致性到最终一致性。
|
||||
CosmosDB 的一个关键方面是 Azure Cosmos Account。**Azure Cosmos Account** 作为数据库的入口点。该帐户确定关键设置,例如全球分布、一致性级别和要使用的特定 API,例如 NoSQL。通过该帐户,您可以配置全球复制,以确保数据在多个区域可用,以实现低延迟访问。此外,您可以选择在性能和数据准确性之间取得平衡的一致性级别,选项范围从强一致性到最终一致性。
|
||||
|
||||
Azure Cosmos DB 支持 **用户分配的身份** 和 **系统分配的托管身份**,这些身份会自动创建并与资源的生命周期绑定,允许在连接到其他服务时进行安全的基于令牌的身份验证——前提是这些服务具有适当的角色分配。然而,Cosmos DB 没有内置机制直接查询外部数据源,如 Azure Blob Storage。与 SQL Server 的外部表功能不同,Cosmos DB 需要使用 Azure Data Factory、数据迁移工具或自定义脚本等外部工具将数据导入其容器,然后才能使用其本地查询功能进行查询。
|
||||
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 对象,使其适合处理结构化和半结构化数据。该服务的端点是:
|
||||
@@ -18,16 +18,16 @@ Azure Cosmos DB NoSQL API 是一个基于文档的 API,使用 JSON 作为其
|
||||
https://<Account-Name>.documents.azure.com:443/
|
||||
```
|
||||
#### 数据库
|
||||
在一个帐户内,您可以创建一个或多个数据库,这些数据库作为容器的逻辑分组。数据库充当资源管理和用户权限的边界。数据库可以在其容器之间共享预配置的吞吐量,或为单个容器分配专用吞吐量。
|
||||
在一个帐户内,您可以创建一个或多个数据库,这些数据库作为容器的逻辑分组。数据库充当资源管理和用户权限的边界。数据库可以让多个容器使用共享的性能容量池,或者为每个容器提供其自己的专用能力。
|
||||
|
||||
#### 容器
|
||||
数据存储的核心单元是容器,它保存 JSON 文档并自动进行索引以实现高效查询。容器具有弹性可扩展性,并分布在由用户定义的分区键确定的分区中。分区键对于确保最佳性能和均匀数据分布至关重要。例如,一个容器可能存储客户数据,"customerId" 作为分区键。
|
||||
|
||||
#### 关键特性
|
||||
**全球分布**:启用或禁用地理冗余以进行跨区域复制和多区域写入以提高可用性。
|
||||
**网络与安全**:在公共(所有/选择网络)或私有端点之间进行连接。使用 TLS 1.2 加密进行安全连接。支持 CORS(跨源资源共享)以控制对资源的访问。
|
||||
**备份与恢复**:来自定期、连续(7 天)或连续(30 天)备份策略,具有可配置的间隔和保留。
|
||||
**数据加密**:默认服务管理密钥或客户管理密钥(CMK)用于加密(CMK 选择是不可逆的)。
|
||||
- **全球分布**:启用或禁用地理冗余以进行跨区域复制和多区域写入以提高可用性。
|
||||
- **网络与安全**:在公共(所有/选择的网络)或私有端点之间进行连接。使用 TLS 1.2 加密进行安全连接。支持 CORS(跨源资源共享)以控制对资源的访问。可以启用 Microsoft Defender for Cloud。要建立连接,您可以使用密钥。
|
||||
- **备份与恢复**:来自定期、连续(7 天)或连续(30 天)备份策略,具有可配置的间隔和保留。
|
||||
- **数据加密**:默认服务管理密钥或客户管理密钥(CMK)用于加密(CMK 选择是不可逆的)。
|
||||
|
||||
#### 枚举
|
||||
|
||||
@@ -67,6 +67,19 @@ az cosmosdb sql trigger list --account-name <AccountName> --container-name <Cont
|
||||
## 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>
|
||||
|
||||
|
||||
## MongoDB (vCore)
|
||||
# Install az cli extension
|
||||
az extension add --name cosmosdb-preview
|
||||
# List all MongoDB databases in a specified Azure Cosmos DB account
|
||||
az cosmosdb mongocluster list
|
||||
az cosmosdb mongocluster show --cluster-name <name> --resource-group <ResourceGroupName>
|
||||
# Get firewall rules
|
||||
az cosmosdb mongocluster firewall rule list --cluster-name <name> --resource-group <ResourceGroupName>
|
||||
# Connect to in
|
||||
brew install mongosh
|
||||
mongosh "mongodb://<username>:<password>@<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false" --username <username> --password <password>
|
||||
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -118,7 +131,8 @@ Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "<ResourceGroupName>" -A
|
||||
|
||||
#### 连接
|
||||
|
||||
要连接azure-cosmosDB(pip install azure-cosmos)库是必需的。此外,端点和密钥是建立连接的关键组件。
|
||||
它有两种关键类型,读写(完全)和只读。它们提供对 Cosmos DB 账户内所有数据库、集合和数据的访问。
|
||||
要连接 azure-cosmosDB(pip install azure-cosmos),需要该库。此外,端点和密钥是建立连接的关键组件。
|
||||
```python
|
||||
from azure.cosmos import CosmosClient, PartitionKey
|
||||
|
||||
@@ -191,12 +205,12 @@ mongodb://<hostname>:<port>/<database>
|
||||
在 MongoDB 中,您可以在一个实例中创建一个或多个数据库。每个数据库作为集合的逻辑分组,并提供资源组织和管理的边界。数据库有助于逻辑上分离和管理数据,例如用于不同的应用程序或项目。
|
||||
|
||||
#### 集合
|
||||
MongoDB 中的数据存储核心单元是集合,它保存文档,并设计用于高效查询和灵活的架构设计。集合具有弹性可扩展性,并可以在分布式设置中支持高吞吐量操作。
|
||||
MongoDB 中的数据存储核心单元是集合,它保存文档,并设计用于高效查询和灵活的模式设计。集合具有弹性可扩展性,并可以支持在分布式设置中跨多个节点的高吞吐量操作。
|
||||
|
||||
#### 请求单位 (RU) 类型的关键特性
|
||||
**全球分布**:启用或禁用地理冗余以进行跨区域复制和多区域写入以提高可用性。
|
||||
**网络与安全**:在公共(所有/选择网络)或私有端点之间进行连接。使用 TLS 1.2 加密进行安全连接。支持 CORS(跨源资源共享)以控制对资源的访问。
|
||||
**备份与恢复**:来自定期、连续(7 天,免费)或连续(30 天,付费)备份策略,具有可配置的间隔和保留。
|
||||
**网络与安全**:在公共(所有/选择网络)或私有端点之间进行连接。使用 TLS 1.2 加密进行安全连接。支持 CORS(跨源资源共享)以控制对资源的访问。要建立连接,您可以使用密钥。
|
||||
**备份与恢复**:从定期、连续(7 天,免费)或连续(30 天,付费)备份策略中进行选择,具有可配置的间隔和保留。
|
||||
**数据加密**:默认服务管理密钥或客户管理密钥(CMK)用于加密(CMK 选择是不可逆的)。
|
||||
|
||||
#### vCore 集群类型的关键特性
|
||||
@@ -229,10 +243,23 @@ az cosmosdb mongodb database list --account-name <AccountName> --resource-group
|
||||
# List all collections in a specific MongoDB database within an Azure Cosmos DB account
|
||||
az cosmosdb mongodb collection list --account-name <AccountName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
|
||||
|
||||
#RBAC FUNCTIONALITIES MUST BE ENABLED TO USE THIS
|
||||
# List all role definitions for MongoDB within an Azure Cosmos DB account
|
||||
az cosmosdb mongodb role definition list --account-name <AccountName> --resource-group <ResourceGroupName>
|
||||
# List all user definitions for MongoDB within an Azure Cosmos DB account
|
||||
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
|
||||
|
||||
## MongoDB (vCore)
|
||||
# Install az cli extension
|
||||
az extension add --name cosmosdb-preview
|
||||
# List all MongoDB databases in a specified Azure Cosmos DB account
|
||||
az cosmosdb mongocluster list
|
||||
az cosmosdb mongocluster show --cluster-name <name> --resource-group <ResourceGroupName>
|
||||
# Get firewall rules
|
||||
az cosmosdb mongocluster firewall rule list --cluster-name <name> --resource-group <ResourceGroupName>
|
||||
# Connect to in
|
||||
brew install mongosh
|
||||
mongosh "mongodb://<username>:<password>@<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false" --username <username> --password <password>
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -273,14 +300,16 @@ Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupNa
|
||||
|
||||
#### 连接
|
||||
|
||||
在这里,您可以通过密钥或在特权提升部分描述的方法找到密码。
|
||||
RU MongoDB 类型在 CosmoDB 中有 2 种关键类型,读写(完全)和只读。它们提供对 Cosmos DB 账户内所有数据库、集合和数据的指示访问。
|
||||
对于密码,您可以使用密钥或使用特权提升部分中描述的方法。
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
|
||||
# Updated connection string with retryWrites=false
|
||||
connection_string = "mongodb://<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false"
|
||||
|
||||
# Create the client
|
||||
# Create the client. The password and username is a custom one if the type is "vCore cluster".
|
||||
# In case that is a Request unit (RU) the username is the account name and the password is the key of the cosomosDB account.
|
||||
client = MongoClient(connection_string, username="<username>", password="<password>")
|
||||
|
||||
# Access the database
|
||||
@@ -306,6 +335,10 @@ document = {
|
||||
result = collection.insert_one(document)
|
||||
print(f"Inserted document with ID: {result.inserted_id}")
|
||||
```
|
||||
或使用 mongo 中的用户:
|
||||
```bash
|
||||
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"
|
||||
```
|
||||
## 参考文献
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
|
||||
|
||||
@@ -4,19 +4,16 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
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
|
||||
|
||||
@@ -30,7 +27,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
|
||||
@@ -40,15 +37,66 @@ curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e9741
|
||||
有几种托管选项:
|
||||
|
||||
* **Consumption**
|
||||
- **Multi-tenant**: 提供共享计算资源,运行在公共云中,并遵循按操作计费的定价模型。这非常适合轻量级和具有成本效益的工作负载。
|
||||
- **Multi-tenant**: 提供共享计算资源,运行在公共云中,并遵循按操作计费的定价模型。这非常适合轻量级和具有成本效益的工作负载。这会部署一个“单一工作流”。
|
||||
* **Standard**
|
||||
- **Workflow Service Plan**: 专用计算资源,具有 VNET 集成用于网络,并按工作流服务计划实例收费。适合需要更大控制的更高要求的工作负载。
|
||||
- **App Service Environment V3** 专用计算资源,具有完全隔离和可扩展性。它还与 VNET 集成用于网络,并使用基于环境中 App Service 实例的定价模型。这非常适合需要高隔离的企业级应用程序。
|
||||
- **Hybrid** 设计用于本地处理和多云支持。它允许客户管理的计算资源,具有本地网络访问,并利用 Kubernetes 事件驱动的自动扩展(KEDA)。
|
||||
- **App Service Environment V3** 专用计算资源,具有完全隔离和可扩展性。它还与 VNET 集成用于网络,并使用基于环境中 App Service 实例的定价模型。
|
||||
- **Hybrid** 设计用于本地处理和多云支持。它允许客户管理的计算资源具有本地网络访问,并利用 Kubernetes 事件驱动的自动扩展(KEDA)。它依赖于容器应用连接环境。
|
||||
|
||||
### Workflows
|
||||
### Key Features
|
||||
- **Storage**: Logic Apps 需要一个外部 Azure 存储帐户来存储工作流状态、运行历史记录……并且必须与 Logic App 在同一资源组中。
|
||||
- **Networking & Security**: Logic Apps 可以配置为公共或私有访问。默认情况下,应用程序对互联网开放,但可以与 Azure 虚拟网络集成以实现隔离连接。
|
||||
- **Application Insights**: 通过 Azure Monitor Application Insights 启用应用程序性能管理(APM),以跟踪性能、检测异常并提供分析。
|
||||
- **Access Control**: Logic apps 支持系统托管身份和用户托管身份。
|
||||
|
||||
Azure Logic Apps 中的工作流是协调各种服务之间操作的核心自动化过程。工作流以触发器开始——一个事件或计划——然后执行一系列操作,例如调用 API、处理数据或与其他 Azure 服务交互。工作流可以使用设计器以可视化方式定义,也可以通过代码(JSON 定义)进行定义,并通过命令如 az logic workflow create、az logic workflow show 和 az logic workflow update 进行管理。它们还支持身份管理(通过身份子组)以安全管理权限和与外部资源的集成。
|
||||
### "Single" Workflows
|
||||
|
||||
一个 **workflow** 是一系列结构化的自动化步骤或任务,执行特定的过程或目标。它定义了不同的操作、条件和决策如何相互作用以实现期望的结果,从而简化操作并减少手动工作。工作流可以集成多个系统、触发事件和规则,确保过程的一致性和效率。
|
||||
|
||||
Azure Logic apps 提供了 **创建单一工作流而无需 Logic App** 本身的功能。
|
||||
|
||||
每个工作流都有不同的 **triggers**。这些触发器是工作流遵循的步骤。每个触发器都有其参数,这些参数可能会根据触发器的类型而有所不同:
|
||||
- 连接名称
|
||||
- **Authentication Type** 可以是访问密钥、Microsoft Entra ID、集成服务主体身份验证和 Logic Apps 托管身份。
|
||||
|
||||
触发器还有各种设置:
|
||||
- Schema Validation: 确保传入数据遵循预定义结构。
|
||||
- Concurrency Control: 限制并行运行的数量。
|
||||
- Trigger Conditions: 触发器触发前必须满足的条件。
|
||||
- Networking: 配置数据传输的块大小,并允许在响应中抑制工作流头。
|
||||
- **Security**: 启用 **Secure Inputs/Outputs to hide** 日志和输出中的敏感数据。
|
||||
|
||||
**Settings & API Connections:**
|
||||
|
||||
一个工作流有不同的设置,例如:
|
||||
- 允许的入站 IP 地址:此设置允许您限制谁可以触发或启动您的 Logic App。选项包括任何 IP、仅其他 Logic Apps 和特定 IP 范围。
|
||||
- 集成帐户:在这里,您可以将 Logic App 链接到集成帐户。
|
||||
- 高吞吐量:此设置使您的 Logic App 能够更快地处理更多请求。
|
||||
- 运行历史保留:保留您的 Logic App 执行历史的时间长度。
|
||||
|
||||
您可以查看工作流具有的不同 API 连接。在每个连接内部,它们具有不同的属性,并可以编辑 API 连接,其中身份验证类型可以更改。
|
||||
|
||||
**History & Versions:**
|
||||
它有访问不同执行的 **history** 的选项,显示设置、输出、参数和代码。
|
||||
|
||||
还可以访问工作流的不同 **versions**,您可以检查代码并用其旧版本更改当前工作流。
|
||||
|
||||
**Authorization:**
|
||||
Azure Logic Apps 支持使用 Entra ID 的 **authorization policies** 来保护基于请求的触发器,要求有效的访问令牌。此令牌必须包含特定声明:
|
||||
- Issuer (iss) 用于验证身份提供者
|
||||
- Audience (aud) 确保令牌是针对 Logic App 的
|
||||
- Subject (sub) 用于识别调用者
|
||||
- JWT ID (JSON Web Token identifier)
|
||||
- Custom Claim
|
||||
|
||||
当收到请求时,Logic Apps 会根据这些声明验证令牌,并仅在匹配配置的策略时允许执行。这可以用于允许另一个租户触发工作流或拒绝来自其他来源的触发,例如仅允许来自 https://login.microsoftonline.com/ 的触发。
|
||||
|
||||
**Access Keys:**
|
||||
当您第一次保存基于请求的触发器时,Logic Apps 会自动创建一个带有 SAS 签名的唯一端点(由访问密钥创建),该签名授予调用工作流的权限。此 SAS 签名嵌入在触发器的 URL 中。此密钥可以重新生成,并将提供新的 SAS 签名,但密钥不能列出。
|
||||
|
||||
使用访问密钥调用的 URL:
|
||||
|
||||
https://<region>.logic.azure.com:443/workflows/<workflow-id>/triggers/<trigger-name>/paths/invoke?api-version=<api-version>&sp=%2Ftriggers%2F<trigger-name>%2Frun&sv=<version>&sig=<signature>
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -102,11 +150,6 @@ az rest \
|
||||
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions/{versionName}?api-version=2016-06-01" \
|
||||
--headers "Content-Type=application/json"
|
||||
|
||||
az rest \
|
||||
--method GET \
|
||||
--uri "https://examplelogicapp1994.scm.azurewebsites.net/api/functions/admin/download?includeCsproj=true&includeAppSettings=true" \
|
||||
--headers "Content-Type=application/json"
|
||||
|
||||
# List all Logic Apps in the specified resource group
|
||||
az logicapp list --resource-group <ResourceGroupName>
|
||||
|
||||
@@ -115,6 +158,20 @@ az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# List all application settings for a specific Logic App
|
||||
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# Get a Parameters from an Azure App Service using Azure REST API
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{app-service-name}/hostruntime/admin/vfs/parameters.json?api-version=2018-11-01&relativepath=1"
|
||||
|
||||
# Get webhook-triggered workflows from an Azure Logic App using Azure REST API
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/hostruntime/runtime/webhooks/workflow/api/management/workflows?api-version=2018-11-01"
|
||||
|
||||
# Get workflows from an Azure Logic App using Azure REST API
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows?api-version=2018-11-01"
|
||||
|
||||
# Get details of a specific workflow including its connections and parameters in Azure Logic Apps using Azure REST API
|
||||
az rest --method GET --uri "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows/{workflow-name}?api-version=2018-11-01&\$expand=connections.json,parameters.json"
|
||||
|
||||
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -153,10 +210,10 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
|
||||
* 映射:配置基于 XSLT 的转换,以在集成工作流中转换数据格式。
|
||||
* 程序集:管理集成帐户程序集,以简化逻辑和数据处理。
|
||||
* 证书:处理用于加密和签名消息的证书,确保安全通信。
|
||||
* 伙伴:管理 B2B 交易的交易伙伴信息,实现无缝集成。
|
||||
* 合作伙伴:管理 B2B 交易的交易伙伴信息,实现无缝集成。
|
||||
* 协议:配置与交易伙伴交换数据的规则和设置(例如,EDI、AS2)。
|
||||
* 批处理配置:管理批处理配置,以高效地分组和处理消息。
|
||||
* RosettaNet PIP:配置 RosettaNet 伙伴接口流程(PIPs),以标准化 B2B 通信。
|
||||
* RosettaNet PIP:配置 RosettaNet 合作伙伴接口流程(PIPs),以标准化 B2B 通信。
|
||||
|
||||
#### 枚举
|
||||
|
||||
|
||||
Reference in New Issue
Block a user