Automatic Policy Generation for Inter-Service Access ...

19
Automatic Policy Generation for Inter-Service Access Control of Microservices Xing Li 1,2 , Yan Chen 2 , Zhiqiang Lin 3 , Xiao Wang 2 , and Jim Hao Chen 2 1 Zhejiang University, 2 Northwestern University, 3 The Ohio State University 1

Transcript of Automatic Policy Generation for Inter-Service Access ...

Page 1: Automatic Policy Generation for Inter-Service Access ...

Automatic Policy Generation for Inter-Service Access Control of Microservices

Xing Li1,2, Yan Chen2, Zhiqiang Lin3, Xiao Wang2, and Jim Hao Chen2

1Zhejiang University, 2Northwestern University, 3The Ohio State University

1

Page 2: Automatic Policy Generation for Inter-Service Access ...

HTTP

User

A Cloud Application

Machine

Frontend

Logging

Backend Database

2

Page 3: Automatic Policy Generation for Inter-Service Access ...

Machine

HTTP

User

A Cloud Application

Machine

Database

Machine

Logging

Machine

Backend

Machine

Backend

Machine

BackendFrontend

3

Page 4: Automatic Policy Generation for Inter-Service Access ...

HTTP

User

A Cloud Application

BackendFrontend

Proxy Proxy

Database

Proxy

Logging Proxy

mTLS mTLS

4

Page 5: Automatic Policy Generation for Inter-Service Access ...

HTTP

User

A Cloud Application

BackendFrontend

Proxy Proxy

Database

Proxy

Logging Proxy

mTLS mTLS

mTLS

5

Page 6: Automatic Policy Generation for Inter-Service Access ...

HTTP

User

A Cloud Application

BackendFrontend

Proxy Proxy

Database

Proxy

Logging Proxy

mTLS mTLS

mTLS

6

Page 7: Automatic Policy Generation for Inter-Service Access ...

7

• Manual Policy Configuration?

• Automatic Security Policy GenerationApproaches for Distributed Systems ?

1. Document-based approaches ?

2. History-based approaches ?

3. Model-based approaches ?

Requiring complete historical data

Poor agility and scalability

Low accuracy, poor availability

Time-consuming, error-prone, inflexible

Page 8: Automatic Policy Generation for Inter-Service Access ...

8

Code of MicroservicesCode of

MicroservicesInter-Service

Invocation Logic

Inter-Service Access Control

Policies

Static Analysis-Based Request Extraction Graph-Based Policy Management

Code of Microservices

Request Extraction Phase Policy Management Phase

What’s new in microservices?

• Microservices are small: a single service has low internal complexity.

• The inter-service invocation manner in the same application is relatively uniform.

• The amounts of involved protocols and libraries are limited.

Extract the normal system behavior with static analysis

Page 9: Automatic Policy Generation for Inter-Service Access ...

9

Microservice Infrastructure

Master Node

DB

C

A

Code Submit

Source code of Service E

Worker Node-1

Worker Node-2E

Service Deploy

CI Server

Service E

Service Build Master Node

Master Node

Control plane of Istio/Kubernetes

Deployment file of E

Manifest file of E

❷ ❸

Static Analysis Engine

Policy Generator

Permission Engine

The deployment of microservice E

AUTOARMOR

• Static Analysis Engine

• Permission Engine

• Policy Generator

Page 10: Automatic Policy Generation for Inter-Service Access ...

10

1 import requests2 from flask import request, session…

3 reviews = {4 "name" : "http://reviews:9080",5 "endpoint" : "reviews"6 } …

7 @app.route('/api/v1/products/<product_id>/reviews')8 def reviewsRoute(product_id):9 headers = getForwardHeaders(request)10 user = session.get('user', ")11 status, reviews = getProductReviews(product_id, headers) …

12 def getProductReviews(product_id, headers):13 try:14 url = reviews['name'] + "/" + reviews['endpoint'] + "/" + str(product_id)15 res = requests.get(url, headers=headers, timeout=3.0)…

Source Code

Library: requestsMethod: get(url, params=None, **kwargs)

Semantics: HTTP-GETKey parameters: url (Semantics: HTTP-URL)

Semantic Model

Phase 1: Request Extraction

Step-I: Identifying the statements that initiate inter-service invocations

Page 11: Automatic Policy Generation for Inter-Service Access ...

11

1 import requests2 from flask import request, session…

3 reviews = {4 "name" : "http://reviews:9080",5 "endpoint" : "reviews"6 } …

7 @app.route('/api/v1/products/<product_id>/reviews')8 def reviewsRoute(product_id):9 headers = getForwardHeaders(request)10 user = session.get('user', ")11 status, reviews = getProductReviews(product_id, headers) …

12 def getProductReviews(product_id, headers):13 try:14 url = reviews['name'] + "/" + reviews['endpoint'] + "/" + str(product_id)15 res = requests.get(url, headers=headers, timeout=3.0)…

Source Code

Library: requestsMethod: get(url, params=None, **kwargs)

Semantics: HTTP-GETKey parameters: url (Semantics: HTTP-URL)

Semantic Model

Phase 1: Request Extraction

Step-II: Performing backward taint propagation to get the program slices associated with each invocation

Page 12: Automatic Policy Generation for Inter-Service Access ...

12

Phase 1: Request Extraction

1 reviews = {2 "name" : "http://reviews:9080",3 "endpoint" : "reviews"4 }

5 @app.route('/api/v1/products/<product_id>/reviews')6 url = reviews['name'] + "/" + reviews['endpoint'] + "/" + str(product_id)7 res = requests.get(url, headers=headers, timeout=3.0)

Program Slice

{"type": "HTTP","url": "http://reviews:9080/reviews/*","path": "/reviews/*","method": "GET"

}

Extracted Request

Step-III: Extracting the detailed attributes of invocations

Page 13: Automatic Policy Generation for Inter-Service Access ...

13

Service B

Service B – V1

Service C – V1

Service C – V2

Service A – V1

Service A – V2

Service A – V3

Service A

Service C Service D – V1

Service D

r1

r3

r5

r6

r4

System Behavior

r2

a a3

a2

a1

b

d

c

b1 c1

d1

c2

r1r3

r4

r5r6

Permission Graph

r2

Phase 2: Policy ManagementService node:Including permissions shared by all versions

Version node:Including unique permissions for each version

Integrate the permissions shared by all versions of the same service• Eliminate redundant policies• Eliminate unnecessary policy updates

Page 14: Automatic Policy Generation for Inter-Service Access ...

14

Evaluation

• Hardware: a 3-node Kubernetes cluster (v.1.18.6) with Istio (v1.6.8); Each node is equipped with eight 2.30-GHz Intel(R) Core(TM) CPUs (i5-8259U) and 32 GB of RAM

• Materials: 5 popular open-source microservice applications

Page 15: Automatic Policy Generation for Inter-Service Access ...

15

Q1:

Can AUTOARMOR extract the inter-service invocation logic?

• Request identification rate: 100%

• Request attribute extraction rate: 99.5%

• Average static analysis time: 57 s/svc

Page 16: Automatic Policy Generation for Inter-Service Access ...

16

• The policy generation time for each evaluation application is less than 2 s.

• It takes less than 12 s to generate 900 policies for a large application with 1,000 services.

Q2:

Can AUTOARMOR efficiently generate, manage, and update access control policies?

Page 17: Automatic Policy Generation for Inter-Service Access ...

17

• By eliminating redundant policies, it enables microservice applications to achieve better end-to-end performance.

Q3:

Can AUTOARMOR improve the application’s performance via the optimized policy set?

Page 18: Automatic Policy Generation for Inter-Service Access ...

18

AUTOARMOR

• A static analysis-based request extraction

mechanism

• A graph-based policy management

mechanism

• effectively bridge the policy generation

gap with only a minor overhead

The first automatic policy generation tool for inter-service access control of microservices

Page 19: Automatic Policy Generation for Inter-Service Access ...

19

Thanks!

[email protected]