使用 DAPR 的安全访问政策
安全是 Dapr 的基础,本文我们将来说明在分布式应用中使用 Dapr 时的安全特性和能力,主要可以分为以下几个方面。 Dapr 应用程序可以被限定在特定的命名空间,以实现部署和安全,当然我们仍然可以在部署到不同命名空间的服务之间进行调用。 localhost:3500/v1.0/invoke/nodeapp/method/neworder 服务调用还支持跨命名空间的调用,在所有受支持的托管平台上,Dapr 应用程序 ID 符合包含目标命名空间的有效 FQDN 格式,可以同时指定: 应用 ID (如nodeapp)。 应用程序运行的命名空间(production)。 比如在 production 命名空间中的 nodeapp 应用上调用 neworder 方法,则可以使用下面的方式: localhost:3500/v1.0/invoke/nodeapp.production/method/neworder 当使用服务调用在命名空间中调用应用程序时,我们可以使用命名空间对其进行限定,特别在 Kubernetes 集群中的跨命名空间调用是非常有用的。 App Identity - Dapr 请求 sentry 服务为所有应用程序生成一个 SPIFFE id,这个 id 附加在 TLS 证书中。SPIFFE id 的格式为:spiffe://<trustdomain>/ns/<namespace>/<appid>,对于匹配策略,调用应用的信任域、命名空间和应用 ID 值从调用应用的 TLS 证书中的 SPIFFE id 中提取,这些值与策略规范中指定的信任域、命名空间和应用 ID 值相匹配。如果这三个都匹配,则更具体的策略将进一步匹配。 访问控制策略会遵循如下所示的一些规则: 如果未指定访问策略,则默认行为是允许所有应用访问被调用应用上的所有方法 如果未指定全局默认操作且未定义应用程序特定策略,则将空访问策略视为未指定访问策略,并且默认行为是允许所有应用程序访问被调用应用程序上的所有方法 如果未指定全局默认操作,但已定义了一些特定于应用程序的策略,则会采用更安全的选项,即假设全局默认操作拒绝访问被调用应用程序上的所有方法 如果定义了访问策略并且无法验证传入的应用程序凭据,则全局默认操作将生效 如果传入应用的信任域或命名空间与应用策略中指定的值不匹配,则应用策略将被忽略并且全局默认操作生效 下面是一些使用访问控制列表进行服务调用的示例场景。 场景 1:拒绝所有应用程序的访问,除非 trustDomain = public、namespace = default、appId = app1,使用如下所示的配置,允许所有 appId = app1 的调用方法,并拒绝来自其他应用程序的所有其他调用请求。 apiVersion: dapr.io/v1alpha1 kind: Configuration metadata: name: appconfig spec: accessControl: defaultAction: deny trustDomain: "public" policies: - appId: app1 defaultAction: allow trustDomain: "public" namespace: "default" 场景 2:拒绝访问除 trustDomain = public、namespace = default、appId = app1、operation = op1 之外的所有应用程序,使用此配置仅允许来自 appId = app1 的方法 op1,并且拒绝来自所有其他应用程序的所有其他方法请求,包括 app1 上的其他方法。 apiVersion: dapr.io/v1alpha1 kind: Configuration metadata: name: appconfig spec: accessControl: defaultAction: deny trustDomain: "public" policies: - appId: app1 defaultAction: deny trustDomain: "public" namespace: "default" operations: - name: /op1 httpVerb: ["*"] action: allow 场景 3:拒绝对所有应用程序的访问,除非 HTTP 的特定 verb 和 GRPC 的操作匹配,使用如下所示的配置,仅允许以下场景访问,并且来自所有其他应用程序的所有其他方法请求(包括 app1 或 app2 上的其他方法)都会被拒绝。 trustDomain = public、namespace = default、appID = app1、operation = op1、http verb = POST/PUT。 trustDomain = “myDomain”、namespace = “ns1”、appID = app2、operation = op2 并且应用程序协议是 GRPC,仅允许来自appId = app1 的方法 op1 上的 POST/PUT 请求以及来自所有其他应用程序的所有其他方法请求,包括 app1 上的其他方法,被拒绝。 (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |