認可
AuthorizationPolicy を使用すると、サービスへのアクセス権限をきめ細かく制御できます。
目次
認可の概要
Istio AuthorizationPolicy は、サービスに対するきめ細かなアクセス制御を提供します。上の図は、Authorization Policy の動作を示しています。
- リクエストの受信: Envoy が受信リクエストを受け取ります
- ポリシーの評価: AuthorizationPolicy ルールが順番に評価されます
- アクセス判定: ALLOW、DENY、または CUSTOM アクションが適用されます
- 監査ログ: すべての判定が記録されます
サポートされる条件:
- 送信元: リクエストの発信元(ServiceAccount、Namespace、IP)
- 操作: HTTP メソッド、パス、ポート
- 条件: カスタム条件(ヘッダー、JWT クレームなど)
基本ポリシー
デフォルト拒否(すべて拒否)
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: deny-all
namespace: default
spec:
action: DENY
rules:
- {} # Deny all requestsデフォルト許可(すべて許可)
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-all
namespace: default
spec:
action: ALLOW
rules:
- {} # Allow all requestsHTTP メソッドベース
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: httpbin-get-only
namespace: default
spec:
selector:
matchLabels:
app: httpbin
action: ALLOW
rules:
- to:
- operation:
methods: ["GET"] # Allow only GET高度なポリシー
Service Account ベース
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: ratings-sa-policy
namespace: default
spec:
selector:
matchLabels:
app: ratings
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/reviews"] # Allow only reviews SANamespace ベース
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: db-namespace-policy
namespace: database
spec:
selector:
matchLabels:
app: postgresql
action: ALLOW
rules:
- from:
- source:
namespaces: ["production", "staging"] # Specific namespaces onlyパスベース
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: path-based-policy
namespace: default
spec:
selector:
matchLabels:
app: api
action: ALLOW
rules:
- to:
- operation:
paths: ["/api/public/*"] # Allow only public API
- from:
- source:
principals: ["cluster.local/ns/default/sa/admin"]
to:
- operation:
paths: ["/api/admin/*"] # admin SA can access admin APIJWT クレームベース
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: jwt-claims-policy
namespace: default
spec:
selector:
matchLabels:
app: myapp
action: ALLOW
rules:
- when:
- key: request.auth.claims[role]
values: ["admin", "superuser"] # role claim is admin or superuser