如何缩小安全漏洞爆炸半径,实现服务间零信任安全?
零信任的基础 - 工作负载身份;如何为云原生工作负载提供统一的身份;ASM 产品为服务网格下的每一个工作负载提供了简单易用的身份定义,并根据特定场景提供定制机制用于扩展身份构建体系, 同时兼容社区 SPIFFE 标准;
零信任的载体 - 安全证书,ASM 产品提供了如何签发证书以及管理证书的生命周期、轮转等机制,通过 X509 TLS 证书建立身份,每个代理都使用该证书。并提供证书和私钥轮换;
零信任的引擎 - 策略执行,基于策略的信任引擎是构建零信任的关键核心,ASM 产品除了支持 Istio RBAC 授权策略之外,还提供了基于 OPA 提供更加细粒度的授权策略;
零信任的洞察 - 可视化与分析,ASM 产品提供了可观测机制用于监视策略执行的日志和指标,来判断每一个策略的执行情况等;
为什么要使用服务网格
实现零信任?
Cloud Native
Sidecar 代理的生命周期与应用程序保持独立,因此可以更轻松地管理这些 Sidecar 代理。
允许动态配置,更新策略变得更加容易,更新立即生效,而无需重新部署应用程序。
服务网格的集中控制架构使企业的安全团队可以构建、管理和部署适用于整个企业的安全策略,从而默认情况下就能确保应用开发人员构建的业务应用的安全。他们无需额外的工作即可立即使用这些安全策略。
服务网格提供了对附加到请求的终端用户凭据进行身份验证的能力如 JWT。
此外, 使用服务网格体系结构,可以将身份验证和授权系统作为服务部署在网格中。这样一来,如同网格中的其他服务一样,这些安全系统从网格中本身也可以得到安全保证,包括传输中的加密、身份识别、策略执行点、终端用户凭据的身份验证和授权等。
阿里云服务网格 ASM中的
零信任体系
Cloud Native
在服务之间实施双向 TLS 认证或者面向 server 侧的 TLS 认证,支持证书的自动轮转等生命周期管理。网格内的通信都经过身份验证和加密处理。
启用基于身份的细粒度授权,以及基于其他维度参数的授权。基于角色访问控制 (RBAC) 的基础,支持 “最低权限” 的立场,也就是只有经过授权的服务才能根据 ALLOW/DENY 规则相互通信。
对等身份验证 - 当两个微服务相互交互时,启用还是禁用双向TLS进行对等身份验证。
请求身份验证 - 允许最终用户和系统使用请求身份认证与微服务进行交互。通常使用JSON Web令牌(JWT)执行该操作。
kubectl exec $(kubectl get pod -l app=productpage -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl http://details:9080/details/1 -o /dev/null -s -w '%{http_code}\n'
kubectl exec $(kubectl get pod -l app=productpage -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl http://details:9080/details/1 -o /dev/null -s -w '%{http_code}\n'
000
command terminated with exit code 56
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: details-strict
namespace: default
spec:
mtls:
mode: PERMISSIVE
selector:
matchLabels:
app: details
其中,issuer 值设置为"testing@secure.istio.io",jwks 的值取自 Istio 安装文件中的 security/tools/jwt/samples/jwks.json,对应如下
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}
export TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
kubectl exec $(kubectl get pod -l app=productpage -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl http://details:9080/details/1 -o /dev/null --header "Authorization: Bearer $TOKEN" -s -w '%{http_code}\n'
200
kubectl exec $(kubectl get pod -l app=productpage -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl http://details:9080/details/1 -o /dev/null --header "Authorization: Bearer badtoken" -s -w '%{http_code}\n'
401
kubectl exec $(kubectl get pod -l app=productpage -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl http://details:9080/details/1 -o /dev/null -s -w '%{http_code}\n'
200
工作负载标签选择 selector 字段指定策略目标;
action 字段指定是 ALLOW 还是 DENY 请求。如果您未指定操作,则操作默认设置为 ALLOW。为清晰起见,我们建议您始终指定操作。(授权政策还支持 AUDIT 和 CUSTOM 操作);
rules 指定何时触发操作:
rules 中的 from 字段指定请求的来源; rules 中的 to 字段指定请求的操作; when 字段指定为了应用规则所需满足的其他条件;
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: require-jwt
namespace: default
spec:
action: ALLOW
rules:
- from:
- source:
requestPrincipals:
- testing@secure.istio.io/testing@secure.istio.io
selector:
matchLabels:
app: details
kubectl exec $(kubectl get pod -l app=productpage -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl http://details:9080/details/1 -o /dev/null -s -w '%{http_code}\n'
403
具体可以参考《在ASM中实现动态更新OPA策略》(具体请见文末相关链接 6)
总结及参考案例
Cloud Native
提供具有完整证书生命周期管理的托管证书基础设施,解决了证书颁发和 CA 轮换的复杂性;
托管的控制面 API,用于向 Envoy 代理分发身份验证策略,授权策略和安全命名信息;
Sidecar 代理通过提供策略执行点 PEP 来帮助确保网格的安全;
Envoy 代理扩展允许遥测数据收集和审计;
使用授权策略在入口网关上实施基于 IP 的访问控制(具体请见文末相关链接 8)、或者基于自定义外部授权的访问控制等,如下图所示云产品云原生应用交付平台 ADP(具体请见文末相关链接 9)基于阿里云服务网格ASM的网关授权策略实现。
某互联金融客户在解决跨集群多语言应用的访问权限控制方面,使用阿里云服务网格 ASM 提供的授权策略隔离外联区域和应用区域。同时可以结合出口网关来审计出网格的流量,配合上授权策略,还可以控制应用对第三方服务的访问权限。
相关链接
Cloud Native
1)《Kubernetes Hardening Guidance》:
https://media.defense.gov/2021/Aug/03/2002820425/-1/-1/1/CTR_KUBERNETES%20HARDENING%20GUIDANCE.PDF
往期推荐
阿里巴巴服务网格技术三位一体战略背后的思考与实践
阿里云 10 月产品技术动态 | 容器服务+服务网格
云栖发布|企业级互联网架构全新升级 ,助力数字创新
了解更多相关信息,请扫描下方二维码或搜索微信号(AlibabaCloud888)添加云原生小助手!获取更多相关资讯!