在微服务领域,各个服务跨网络进行通信,安全性至关重要。随着分布式系统和微服务架构的兴起,保护服务之间的通信不仅是一项建议,而且是一项必要措施。Dapr (分布式应用程序运行时) 简化了微服务开发,但它也提供了强大的内置安全功能,包括双向 TLS (mTLS)、服务身份验证和 Azure Active Directory (AAD) 集成。在本文中,我们将探讨如何使用 Dapr 在 Azure 中的微服务之间实现端到端安全性。
1. 安全性在微服务中的重要性
微服务在设计上通过网络进行通信,使其容易受到各种安全威胁的影响,例如:
-
中间人攻击。 -
未经授权访问服务。 -
服务通信受损。
Dapr 通过以下方式解决了这些问题:
-
用于微服务之间安全通信的双向 TLS (mTLS)。 - 服务到服务身份验证
,以防止未经授权的通信。 - 与 Azure Active Directory (AAD) 集成
,用于身份管理和身份验证。
2. 设置 Azure 和 Dapr 以实现安全的微服务
在深入研究代码之前,让我们设置使用 Dapr 部署和保护微服务所需的 Azure 基础设施。
第 1 步:安装 Dapr 并初始化环境
确保您已在本地安装 Dapr。
# Install Dapr CLIwget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash# Initialize Dapr with self-hosted components for developmentdapr init
步骤 2:创建资源组和 Azure 容器环境
我们将微服务部署到 Azure,并使用 Dapr 的功能保护通信。
# Create a resource groupaz groupcreate--name MyMicroservicesRG --location eastus# Create a container environment for Azure Container Appsaz containerapp env create--name secure-env --resource-group MyMicroservicesRG --location eastus
3. 在微服务之间启用双向 TLS (mTLS)
双向 TLS 可确保客户端和服务器相互进行身份验证,从而保护微服务之间的通信。
Dapr 会自动在同一环境中运行的微服务之间启用 mTLS。启用 mTLS 后,双方(客户端和服务器)都必须提供有效的证书,然后才能允许通信。这有助于防止未经授权的服务在您的架构中进行调用。
第 1 步:为 mTLS 配置 Dapr
默认情况下,Dapr 使用 mTLS 进行服务间通信。但是,要确认和管理它:
- 在 Dapr 中启用 mTLS:
默认情况下,这是启用的,但您可以通过配置 daprsystem 组件来验证和调整 mTLS 设置。
mtls.yaml 中:
apiVersion:dapr.io/v1alpha1kind:Configurationmetadata:name:daprsystemnamespace:defaultspec:mtls:enabled:true
2. 应用此配置:
dapr run --app-id daprsystem --config ./mtls.yaml
此时,同一环境中由 Dapr 管理的服务之间的所有通信都受到双向 TLS 的保护。
4. 实施服务到服务身份验证
除了 mTLS 之外,您还需要在服务之间强制执行身份验证和授权,以确保只有允许的服务才能相互通信。
Dapr 通过 JWT(JSON Web 令牌)提供服务到服务的身份验证,确保服务可以在处理请求之前验证调用者的身份。
第 1 步:使用 JWT 保护 API 通信
让我们为微服务配置 JWT 身份验证。
OrderService/Program.cs 中:
using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Authorization;var builder = WebApplication.CreateBuilder(args);builder.Services.AddAuthentication("Bearer") .AddJwtBearer("Bearer", options => { options.Authority = "https://login.microsoftonline.com/<Tenant-ID>/v2.0"; options.Audience = "api://<API-ID>"; });builder.Services.AddAuthorization();var app = builder.Build();app.UseAuthentication();app.UseAuthorization();app.MapPost("/orders", [Authorize] ([FromBody] Order order) =>{// Order processing logicreturn Results.Ok("Order placed successfully.");});app.Run();publicrecordOrder(int OrderId, string ProductName, decimal Amount);
在上面的代码中:
-
我们将 Order Service 配置为仅使用 JWT 令牌进行授权调用。 - AddJwtBearer
方法用于验证 Azure Active Directory 颁发的 JWT 令牌。
第 2 步:配置 Dapr Sidecar 进行服务身份验证
通过传递不记名令牌,确保您的 Dapr sidecar 处理 JWT 令牌以进行服务到服务的通信。
这可以通过自定义中间件完成,也可以直接作为 Dapr 调用 API 的一部分来完成。
使用 JWT 的 Dapr 服务调用:
var client = DaprClient.CreateInvokeHttpClient("paymentservice");client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<JWT-TOKEN>");var response = await client.PostAsync("/payment", new StringContent(orderJson));
在此示例中,Order Service 调用 Payment Service,并传递 JWT 令牌进行身份验证。
5. 与 Azure Active Directory (AAD) 集成
Azure Active Directory (AAD) 提供身份管理和身份验证,无需管理复杂的凭据系统即可更轻松地保护微服务。
步骤 1:在 Azure AD 中注册微服务
-
转到 Azure 门户中的 Azure Active Directory。 -
将每个微服务(例如,Order Service 和 Payment Service)注册为单独的 App Registration。 -
在 API 权限下,为每个服务授予必要的 API 权限以相互通信。
第 2 步:在服务中实施 AAD 身份验证
注册后,将服务配置为通过 Azure AD 进行身份验证。以下是保护支付服务的方法:
PaymentService/Program.cs 中:
using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Authorization;var builder = WebApplication.CreateBuilder(args);builder.Services.AddAuthentication("Bearer") .AddJwtBearer("Bearer", options => { options.Authority = "https://login.microsoftonline.com/<Tenant-ID>/v2.0"; options.Audience = "api://<API-ID>"; });builder.Services.AddAuthorization();var app = builder.Build();app.UseAuthentication();app.UseAuthorization();app.MapPost("/payment", [Authorize] ([FromBody] Payment payment) =>{// Payment processing logicreturn Results.Ok("Payment processed.");});app.Run();publicrecordPayment(int PaymentId, int OrderId, decimal Amount);
支付服务现在需要有效的 Azure AD JWT 令牌来处理请求。
6. 监控和审计安全事件
最后,监控和审计是安全性的关键方面。使用 Azure Monitor 和 Dapr,可以跟踪与安全相关的事件,例如未经授权的访问尝试或服务故障。
步骤 1:启用用于 Dapr 日志的 Azure Monitor
Azure Monitor 可以从启用了 Dapr 的微服务中捕获日志和指标。
az monitor log-analytics workspace create--resource-group MyMicroservicesRG --workspace-name MyWorkspaceaz containerapp update --name orderservice --resource-group MyMicroservicesRG --log-analytics-enabled true --workspace-id <workspace-id>
这将启用日志记录,并允许您跟踪安全事件,例如无效的令牌尝试、过期的证书和失败的 mTLS 握手。
结论
Dapr 与 Azure 相结合,为构建安全的微服务提供了一个强大的框架。通过利用 Dapr 对 mTLS、JWT 身份验证和 Azure Active Directory 集成的内置支持,您可以轻松地为微服务实施端到端安全性,而不会影响性能或可扩展性。
这种方法可确保微服务之间的通信经过身份验证、加密和授权,从而使您的系统能够抵御安全威胁。
本文中提供的步骤以及代码示例将帮助您开始保护 Azure 上的微服务体系结构。无论您是处理内部微服务通信还是在外部公开 API,Dapr 的安全功能都可以简化构建安全、可扩展系统的过程。
其它相关课程
详细目录
mac/ios安全视频
QT开发底层原理与安全逆向视频教程
linux文件系统存储与文件过滤安全开发视频教程(2024最新)
linux高级usb安全开发与源码分析视频教程
linux程序设计与安全开发
rust语言全栈开发视频教程
-
更多详细内容添加作者微信
-
-
-
-
windows网络安全防火墙与虚拟网卡(更新完成)
-
-
windows文件过滤(更新完成)
-
-
USB过滤(更新完成)
-
-
游戏安全(更新中)
-
-
ios逆向
-
-
windbg
-
-
还有很多免费教程(限学员)
-
-
-
windows恶意软件开发与对抗视频教程
-
原文始发于微信公众号(安全狗的自我修养):使用 Azure 上的 Dapr 保护微服务:实现端到端安全性
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论