天天看點

ASM安全加強與通路控制

在雲原生領域,安全是繞不開的話題。我們在希望産品快速疊代,業務告訴發展的同時,也希望應用運作在一個相對安全的環境,所謂的應用環境安全,是指應用的通路受限,可控,可審計。

ASM安全加強與通路控制
在過去,我們想要實作一個應用的通路受限,需要對業務代碼做大量改造。 接入servicemesh後,我們不需要任何改造,可以實作業務對接。

前置條件

  1. 一個ASM執行個體
  2. 建立好的ACK Kubernetes叢集,添加到ASM執行個體中

環境搭建

Demo應用使用的是一個10個微服務組成的商城應用,架構如圖所示。

ASM安全加強與通路控制
ASM安全加強與通路控制

我們建立兩個外部Pod,分别在default namespace和一個新的namespace。 新的namespace不開啟服務網格注入。

# 在default命名空間中建立應用, 開啟ISTIO注入
kubectl apply -f client.yaml -n default
# 建立命名空間 不開啟服務網格注入
kubectl create ns ns-1
# 建立應用
kubectl apply -f client.yaml -n ns-1           

在Demo中,我們以

productcatalog

這個服務作為目标服務,給他加上安全加強和通路限制。

開啟安全認證

ASM中支援通過配置設定服務的安全認證,開啟目标服務隻允許TLS加密連接配接,防止中間人攻擊。

ASM安全加強與通路控制
apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
  name: "mtls"
  namespace: "default"
spec:
  targets:
  - name: productcatalogservice
  peers:
  - mtls:
      mode: STRICT           

給Istio中通路 productcatalog 的連接配接做TLS更新

apiVersion: "networking.istio.io/v1alpha3"
kind: "DestinationRule"
metadata:
  name: "productcatalogservice"
spec:
  host: "productcatalogservice"
  trafficPolicy:
    tls:
      mode: "ISTIO_MUTUAL"
  subsets:
  - name: v3
    labels:
      version: v3           

此時我們從 ns-1 中的client 容器通路 productcatalogservice , 會出現連接配接失敗

# kubectl -n ns-1 exec -it client-79dd6fbd87-ghl2d sh
/ # curl productcatalogservice.default:3550
curl: (56) Recv failure: Connection reset by peer           

開啟通路限制

在ASM中可以通過下發授權規則,顯示某個服務的通路,并且支援靈活的授權政策

ASM安全加強與通路控制

給productcatalogservice 配置通路限制, 不允許其他服務通路

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: "productcatalogservice"
 namespace: default
spec:
 selector:
   matchLabels:
     app: productcatalogservice
 rules:
 - from:
   - source:           

此時通路電商平台可以看到通路拒絕,因為電商平台中相關服務沒有通路權限。

ASM安全加強與通路控制

增加通路授權

ASM安全加強與通路控制

給 productcatalogservice 增加授權, 允許部分服務通路

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: "productcatalogservice"
  namespace: default
spec:
  selector:
    matchLabels:
      app: productcatalogservice
  rules:
  - from:
    - source:
        principals:
        - cluster.local/ns/default/sa/frontend
        - cluster.local/ns/default/sa/recommendationservice
        - cluster.local/ns/default/sa/checkoutservice
    to:
    - operation:
        methods:
        - "*"           

此時電商平台恢複正常。

我們通過default namespace中的client 通路, 因為不在授權中國呢,會提示權限不足。 符合預期

kubectl exec -it client-79dd6fbd87-4nj7t sh
/ # curl productcatalogservice.default:3550
RBAC: access denied           

總結

通過服務網格,我們無需一行代碼修改,通過配置的方式即可實作應用的通路鍊路加密和通路授權。

ASM安全加強與通路控制
上一篇: OSS Python SDK
下一篇: OSS 回源功能