SlideShare a Scribd company logo
1 of 24
Download to read offline
Istio’s Mixer:
Policy Enforcement with Custom Adapters
Limin Wang, Software Engineer, Google
Torin Sandall, Software Engineer, Styra
Outline
● Istio and policy (how to enforce your custom
policy in Istio)
● Integrate Open Policy Agent to Istio
(demo)
What is Istio?
An open platform to connect, manage, secure microservices
•Istio provides:
• Traffic management
• Observation
• Policy Enforcement
• Service Identity and Security
• And more …
istio.io
github.com/istio
Istio Architecture
HTTP/1.1, HTTP/2, gRPC, TCP
with or without TLS
svcA
Envoy
Pod
Service A
svcB
Envoy
Service B
Pilot
Control Plane API
Mixer
Discovery & Config data to
Envoys
Policy checks,
telemetry
Control flow during request
processing Istio-Auth
TLS certs to
Envoy
Policies in Istio
● Route rules
○ Load balancing, traffic splitting, request timeout, retry, fault injection
● Quota policies
● Monitoring policies
○ Metrics, logging, tracing
● Security policies
○ Service-to-service mTLS authentication
○ Simple authorization: denier, white/black list, expression language
(ABAC)
Policies in Istio (cont.)
● Upcoming security policies
○ Authentication policy
■ Enable/disable mTLS per service
■ End user authentication
○ Authorization policy
■ Role Based Access Control (RBAC)
■ Open Policy Agent
■ Expression language with richer semantics
○ Audit policy
Example Policy (RBAC)
kind: ServiceRole
apiVersion: config.istio.io/v1alpha2
metadata:
name: review-product-viewer
namespace: default
spec:
rules:
- services: [“reviews”]
methods: [“GET”, “HEAD”]
- services: [“products”]
paths: [“/books”, “/books/*”]
methods: [“GET”, “HEAD”]
kind: ServiceRoleBinding
apiVersion: config.istio.io/v1alpha2
metadata:
name: example-role-binding
namespace: default
spec:
subjects:
- name: “istio-ingress-service-account”
roleRef:
kind: ServiceRole
name: review-product-viewer
More information on Istio RBAC Design Doc.
Extend Policy System through Mixer
● Mixer is the central point for policy evaluation
and extensibility.
● Mixer provides the following core features:
○ Precondition and quota checking (Check)
○ Telemetry reporting (Report)
● Mixer achieves high extensibility by having a
general purpose plug-in model - the plug-ins
are known as Adapters.
Mixer
List
Memquota
Statsd
Stackdriver
Prometheus
Denier
Mixer’s Adapters
● Mixer is an attribute-processing and routing machine.
○ Attributes => Instances => Adapters => (Backends)
Envoy Mixer
Infra
Backends
Infra
Backends
Infra
Backends
Infra
Backends
Infra
Backends
Attributes
Backend-Specific
Protocols
Policy&
Config
Operator
How to Provide a Custom Adapter
● Determine your adapter type (check/quota/report)
● Determine the runtime input to your adapter
○ Template: adapter input schema
○ You can apply multiple templates
■ Built-in templates, or your custom templates
● Determine how to configure your adapter.
○ Handler: configured adapter
● Determine the business logic for your adapter to handle runtime
input.
More information on https://github.com/istio/istio/blob/master/mixer/doc/adapters.md
Example: A Toy Adapter
Build an adapter to verify a string is present in a list (simplified
built-in ListEntry adapter).
● Adapter type: check
● Adapter input: built-in listEntry template
● Adapter configuration: a list of strings.
● How the adapter handles runtime input: looks up the value in a
list of strings.
...
package listEntry;
option (istio.mixer.v1.template.template_variety) = TEMPLATE_VARIETY_CHECK;
message Template {
// Specifies the entry to verify in the list.
string value = 1;
}
Steps to Build a Custom Adapter
Step 1. Write basic adapter skeleton code (online tutorial or build-in
adapters)
...
func GetInfo() adapter.Info {
return adapter.Info{
Name: "listChecker",
Description: "Checks whether a string is in the list",
SupportedTemplates: []string{
listentry.TemplateName,
},
NewBuilder: func() adapter.HandlerBuilder { return &builder{} },
DefaultConfig: &config.Params{},
}
}
Steps to Build a Custom Adapter
Step 2. Write adapter configuration.
package adapter.listChecker.config;
message Params {
repeated string list = 1;
}
Step 3. Validate adapter configuration.
func (b *builder) SetAdapterConfig(cfg adapter.Config) { b.conf = cfg.(*config.Params) }
func (b *builder) Validate() (ce *adapter.ConfigErrors) {
// Check if the list is empty
if b.conf.List == nil {
ce = ce.Append(“list”, “list cannot be empty”)
}
return
}
Steps to Build a Custom Adapter
func (b *builder) Build(context context.Context, env adapter.Env) (adapter.Handler, error)
{ return &handler{list: b.conf.List}, nil }
func (h *handler) HandleListEntry(ctx context.Context, inst *listentry.Instance) (adapter.CheckResult, error) {
code := rpc.OK
for _, str := range h.list {
if inst.Value == str {
code = rpc.NOT_FOUND
break
}
}
return adapter.CheckResult{
Status: rpc.Status{Code: int32(code)},
}, nil
}
Step 4. Write business logic for your adapter.
Configure Policy Using Custom Adapter
apiVersion: “config.istio.io/v1alpha2”
kind: listentry
metadata:
name: srcVersion
spec:
value: source.labels[“version”]
1. Create an instance of listentry template.
apiVersion: “config.istio.io/v1alpha2”
kind: listChecker
metadata:
name: versionChecker
spec:
list: [“v1”, “v2”]
2. Create a handler of listChecker adapter.
apiVersion: “config.istio.io/v1alpha2”
kind: rule
metadata:
name: checkVersion
spec:
match: destination.labels[“app”] == “ratings”
actions:
- handler: versionChecker.listChecker
instances:
- srcVersion.listentry
3. Create a checkVersion policy
istioctl create -f *.yaml
4. Apply the policy!
+
● Overview: Open Policy Agent
● OPA Adapter
● Demo
•General-purpose policy engine
• Offload authorization decisions
•Declarative Policy Language (Rego)
• Is X allowed to call operation Y on resource Z?
•Library or Daemon
• In-memory policies and data
• Zero runtime dependencies
• Implemented in Go
•Don’t roll your own authorization engine!
Policy
(Rego)
Data
(JSON)
Open Policy Agent (OPA)
•Adapter type: Check
•Attributes: (authz template)
• Subject: map<string, value>
• Action: map<string, value>
• Standalone adapter
• No external dependencies
•Fail closed (deny) in case of error(s)
• To be configurable in future
Envoy
Mixer
check(attributes)
OPA
adapter
OPA
incoming
request
allow/deny
Mixer’s OPA Adapter
apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
name: authz
spec:
actions:
- handler: opa-handler
instances:
- authz-instance
Mixer config (1/3): Rule
Mixer
OPA
adapter
OPA
Istio Config Store
istioctl
apiVersion: config.istio/v1alpha2
kind: authz
metadata:
name: authz-instance
spec:
subject:
user: source.uid | “”
action:
namespace: target.namespace | “default”
service: target.service | “”
path: target.path | “”
method: request.method | “”
Mixer config (2/3): Instance
Mixer
OPA
adapter
OPA
Istio Config Store
istioctl
apiVersion: config.istio.io/v1alpha2
kind: opa
metadata:
name: opa-handler
spec:
checkMethod: authz.allow
policy: |
package authz
default allow = false
allow { is_read }
is_read { input.action.method = “GET” }
Mixer config (3/3): Handler
Mixer
OPA
adapter
OPA
Istio Config Store
istioctl
Demo
Conclusion
•Use Istio to enforce wide range of policy across
your microservices
•Plugin framework makes it easy to add adapters
• Authorization, quota, telemetry, …
•Come join us!
• istio-users@googlegroups.com
• Istio working groups (Security, Integrations, …)
• More information: istio.io, github.com/istio
Questions?

More Related Content

What's hot

카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
 
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중Amazon Web Services Korea
 
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIsAmazon Web Services
 
Writing REST APIs with OpenAPI and Swagger Ada
Writing REST APIs with OpenAPI and Swagger AdaWriting REST APIs with OpenAPI and Swagger Ada
Writing REST APIs with OpenAPI and Swagger AdaStephane Carrez
 
DSO-LG 2021 Reboot: Policy As Code (Anders Eknert)
DSO-LG 2021 Reboot: Policy As Code (Anders Eknert)DSO-LG 2021 Reboot: Policy As Code (Anders Eknert)
DSO-LG 2021 Reboot: Policy As Code (Anders Eknert)Michael Man
 
OPA open policy agent
OPA open policy agentOPA open policy agent
OPA open policy agentKnoldus Inc.
 
Learn REST API with Python
Learn REST API with PythonLearn REST API with Python
Learn REST API with PythonLarry Cai
 
Kong API Gateway
Kong API Gateway Kong API Gateway
Kong API Gateway Chris Mague
 
Securing APIs with Open Policy Agent
Securing APIs with Open Policy AgentSecuring APIs with Open Policy Agent
Securing APIs with Open Policy AgentNordic APIs
 
An Introduction to OAuth2
An Introduction to OAuth2An Introduction to OAuth2
An Introduction to OAuth2Aaron Parecki
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - IntroductionKnoldus Inc.
 
Introduction to OPA
Introduction to OPAIntroduction to OPA
Introduction to OPAKnoldus Inc.
 
An introduction to OAuth 2
An introduction to OAuth 2An introduction to OAuth 2
An introduction to OAuth 2Sanjoy Kumar Roy
 
OAuth - Open API Authentication
OAuth - Open API AuthenticationOAuth - Open API Authentication
OAuth - Open API Authenticationleahculver
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
AWS CDK introduction
AWS CDK introductionAWS CDK introduction
AWS CDK introductionleo lapworth
 
OPA APIs and Use Case Survey
OPA APIs and Use Case SurveyOPA APIs and Use Case Survey
OPA APIs and Use Case SurveyTorin Sandall
 
OpenId Connect Protocol
OpenId Connect ProtocolOpenId Connect Protocol
OpenId Connect ProtocolMichael Furman
 

What's hot (20)

카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
 
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
 
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
 
Writing REST APIs with OpenAPI and Swagger Ada
Writing REST APIs with OpenAPI and Swagger AdaWriting REST APIs with OpenAPI and Swagger Ada
Writing REST APIs with OpenAPI and Swagger Ada
 
DSO-LG 2021 Reboot: Policy As Code (Anders Eknert)
DSO-LG 2021 Reboot: Policy As Code (Anders Eknert)DSO-LG 2021 Reboot: Policy As Code (Anders Eknert)
DSO-LG 2021 Reboot: Policy As Code (Anders Eknert)
 
OPA open policy agent
OPA open policy agentOPA open policy agent
OPA open policy agent
 
Learn REST API with Python
Learn REST API with PythonLearn REST API with Python
Learn REST API with Python
 
Kong API Gateway
Kong API Gateway Kong API Gateway
Kong API Gateway
 
Securing APIs with Open Policy Agent
Securing APIs with Open Policy AgentSecuring APIs with Open Policy Agent
Securing APIs with Open Policy Agent
 
An Introduction to OAuth2
An Introduction to OAuth2An Introduction to OAuth2
An Introduction to OAuth2
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - Introduction
 
Introduction to OPA
Introduction to OPAIntroduction to OPA
Introduction to OPA
 
An introduction to OAuth 2
An introduction to OAuth 2An introduction to OAuth 2
An introduction to OAuth 2
 
OAuth - Open API Authentication
OAuth - Open API AuthenticationOAuth - Open API Authentication
OAuth - Open API Authentication
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
API Docs with OpenAPI 3.0
API Docs with OpenAPI 3.0API Docs with OpenAPI 3.0
API Docs with OpenAPI 3.0
 
AWS CDK introduction
AWS CDK introductionAWS CDK introduction
AWS CDK introduction
 
OPA APIs and Use Case Survey
OPA APIs and Use Case SurveyOPA APIs and Use Case Survey
OPA APIs and Use Case Survey
 
OpenId Connect Protocol
OpenId Connect ProtocolOpenId Connect Protocol
OpenId Connect Protocol
 

Similar to Istio's mixer policy enforcement with custom adapters (cloud nativecon 17)

Tizen Web Application Checker
Tizen Web Application CheckerTizen Web Application Checker
Tizen Web Application CheckerRyo Jin
 
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...Ted Chien
 
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, Ever
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, EverAltitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, Ever
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, EverFastly
 
Putting microservices on a diet with Istio
Putting microservices on a diet with IstioPutting microservices on a diet with Istio
Putting microservices on a diet with IstioQAware GmbH
 
Backend Development - Django
Backend Development - DjangoBackend Development - Django
Backend Development - DjangoAhmad Sakhleh
 
Complex Event Processor 3.0.0 - An overview of upcoming features
Complex Event Processor 3.0.0 - An overview of upcoming features Complex Event Processor 3.0.0 - An overview of upcoming features
Complex Event Processor 3.0.0 - An overview of upcoming features WSO2
 
Operator SDK for K8s using Go
Operator SDK for K8s using GoOperator SDK for K8s using Go
Operator SDK for K8s using GoCloudOps2005
 
Apache StreamPipes – Flexible Industrial IoT Management
Apache StreamPipes – Flexible Industrial IoT ManagementApache StreamPipes – Flexible Industrial IoT Management
Apache StreamPipes – Flexible Industrial IoT ManagementApache StreamPipes
 
Building Push Triggers for Logic Apps
Building Push Triggers for Logic AppsBuilding Push Triggers for Logic Apps
Building Push Triggers for Logic AppsBizTalk360
 
ApacheCon2019 Talk: Improving the Observability of Cassandra, Kafka and Kuber...
ApacheCon2019 Talk: Improving the Observability of Cassandra, Kafka and Kuber...ApacheCon2019 Talk: Improving the Observability of Cassandra, Kafka and Kuber...
ApacheCon2019 Talk: Improving the Observability of Cassandra, Kafka and Kuber...Paul Brebner
 
How to Improve the Observability of Apache Cassandra and Kafka applications...
How to Improve the Observability of Apache Cassandra and Kafka applications...How to Improve the Observability of Apache Cassandra and Kafka applications...
How to Improve the Observability of Apache Cassandra and Kafka applications...Paul Brebner
 
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTechNETFest
 
Observability and its application
Observability and its applicationObservability and its application
Observability and its applicationThao Huynh Quang
 

Similar to Istio's mixer policy enforcement with custom adapters (cloud nativecon 17) (20)

Tizen Web Application Checker
Tizen Web Application CheckerTizen Web Application Checker
Tizen Web Application Checker
 
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
 
Codeigniter
CodeigniterCodeigniter
Codeigniter
 
Mulesoft lisbon_meetup_asyncapis
Mulesoft lisbon_meetup_asyncapisMulesoft lisbon_meetup_asyncapis
Mulesoft lisbon_meetup_asyncapis
 
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, Ever
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, EverAltitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, Ever
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, Ever
 
About Qtp 92
About Qtp 92About Qtp 92
About Qtp 92
 
About QTP 9.2
About QTP 9.2About QTP 9.2
About QTP 9.2
 
About Qtp_1 92
About Qtp_1 92About Qtp_1 92
About Qtp_1 92
 
Putting microservices on a diet with Istio
Putting microservices on a diet with IstioPutting microservices on a diet with Istio
Putting microservices on a diet with Istio
 
Backend Development - Django
Backend Development - DjangoBackend Development - Django
Backend Development - Django
 
Complex Event Processor 3.0.0 - An overview of upcoming features
Complex Event Processor 3.0.0 - An overview of upcoming features Complex Event Processor 3.0.0 - An overview of upcoming features
Complex Event Processor 3.0.0 - An overview of upcoming features
 
Operator SDK for K8s using Go
Operator SDK for K8s using GoOperator SDK for K8s using Go
Operator SDK for K8s using Go
 
Apache StreamPipes – Flexible Industrial IoT Management
Apache StreamPipes – Flexible Industrial IoT ManagementApache StreamPipes – Flexible Industrial IoT Management
Apache StreamPipes – Flexible Industrial IoT Management
 
Building Push Triggers for Logic Apps
Building Push Triggers for Logic AppsBuilding Push Triggers for Logic Apps
Building Push Triggers for Logic Apps
 
Monitoring with Prometheus
Monitoring with PrometheusMonitoring with Prometheus
Monitoring with Prometheus
 
ApacheCon2019 Talk: Improving the Observability of Cassandra, Kafka and Kuber...
ApacheCon2019 Talk: Improving the Observability of Cassandra, Kafka and Kuber...ApacheCon2019 Talk: Improving the Observability of Cassandra, Kafka and Kuber...
ApacheCon2019 Talk: Improving the Observability of Cassandra, Kafka and Kuber...
 
How to Improve the Observability of Apache Cassandra and Kafka applications...
How to Improve the Observability of Apache Cassandra and Kafka applications...How to Improve the Observability of Apache Cassandra and Kafka applications...
How to Improve the Observability of Apache Cassandra and Kafka applications...
 
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
 
Observability and its application
Observability and its applicationObservability and its application
Observability and its application
 
ql.io at NodePDX
ql.io at NodePDXql.io at NodePDX
ql.io at NodePDX
 

Recently uploaded

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Modernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaModernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaWSO2
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard37
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Navigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseNavigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseWSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data PlatformLess Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data PlatformWSO2
 
Decarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational PerformanceDecarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational PerformanceIES VE
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)Samir Dash
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 

Recently uploaded (20)

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Modernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaModernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using Ballerina
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Navigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseNavigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern Enterprise
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data PlatformLess Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
 
Decarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational PerformanceDecarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational Performance
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

Istio's mixer policy enforcement with custom adapters (cloud nativecon 17)

  • 1. Istio’s Mixer: Policy Enforcement with Custom Adapters Limin Wang, Software Engineer, Google Torin Sandall, Software Engineer, Styra
  • 2. Outline ● Istio and policy (how to enforce your custom policy in Istio) ● Integrate Open Policy Agent to Istio (demo)
  • 3. What is Istio? An open platform to connect, manage, secure microservices •Istio provides: • Traffic management • Observation • Policy Enforcement • Service Identity and Security • And more … istio.io github.com/istio
  • 4. Istio Architecture HTTP/1.1, HTTP/2, gRPC, TCP with or without TLS svcA Envoy Pod Service A svcB Envoy Service B Pilot Control Plane API Mixer Discovery & Config data to Envoys Policy checks, telemetry Control flow during request processing Istio-Auth TLS certs to Envoy
  • 5. Policies in Istio ● Route rules ○ Load balancing, traffic splitting, request timeout, retry, fault injection ● Quota policies ● Monitoring policies ○ Metrics, logging, tracing ● Security policies ○ Service-to-service mTLS authentication ○ Simple authorization: denier, white/black list, expression language (ABAC)
  • 6. Policies in Istio (cont.) ● Upcoming security policies ○ Authentication policy ■ Enable/disable mTLS per service ■ End user authentication ○ Authorization policy ■ Role Based Access Control (RBAC) ■ Open Policy Agent ■ Expression language with richer semantics ○ Audit policy
  • 7. Example Policy (RBAC) kind: ServiceRole apiVersion: config.istio.io/v1alpha2 metadata: name: review-product-viewer namespace: default spec: rules: - services: [“reviews”] methods: [“GET”, “HEAD”] - services: [“products”] paths: [“/books”, “/books/*”] methods: [“GET”, “HEAD”] kind: ServiceRoleBinding apiVersion: config.istio.io/v1alpha2 metadata: name: example-role-binding namespace: default spec: subjects: - name: “istio-ingress-service-account” roleRef: kind: ServiceRole name: review-product-viewer More information on Istio RBAC Design Doc.
  • 8. Extend Policy System through Mixer ● Mixer is the central point for policy evaluation and extensibility. ● Mixer provides the following core features: ○ Precondition and quota checking (Check) ○ Telemetry reporting (Report) ● Mixer achieves high extensibility by having a general purpose plug-in model - the plug-ins are known as Adapters. Mixer List Memquota Statsd Stackdriver Prometheus Denier
  • 9. Mixer’s Adapters ● Mixer is an attribute-processing and routing machine. ○ Attributes => Instances => Adapters => (Backends) Envoy Mixer Infra Backends Infra Backends Infra Backends Infra Backends Infra Backends Attributes Backend-Specific Protocols Policy& Config Operator
  • 10. How to Provide a Custom Adapter ● Determine your adapter type (check/quota/report) ● Determine the runtime input to your adapter ○ Template: adapter input schema ○ You can apply multiple templates ■ Built-in templates, or your custom templates ● Determine how to configure your adapter. ○ Handler: configured adapter ● Determine the business logic for your adapter to handle runtime input. More information on https://github.com/istio/istio/blob/master/mixer/doc/adapters.md
  • 11. Example: A Toy Adapter Build an adapter to verify a string is present in a list (simplified built-in ListEntry adapter). ● Adapter type: check ● Adapter input: built-in listEntry template ● Adapter configuration: a list of strings. ● How the adapter handles runtime input: looks up the value in a list of strings. ... package listEntry; option (istio.mixer.v1.template.template_variety) = TEMPLATE_VARIETY_CHECK; message Template { // Specifies the entry to verify in the list. string value = 1; }
  • 12. Steps to Build a Custom Adapter Step 1. Write basic adapter skeleton code (online tutorial or build-in adapters) ... func GetInfo() adapter.Info { return adapter.Info{ Name: "listChecker", Description: "Checks whether a string is in the list", SupportedTemplates: []string{ listentry.TemplateName, }, NewBuilder: func() adapter.HandlerBuilder { return &builder{} }, DefaultConfig: &config.Params{}, } }
  • 13. Steps to Build a Custom Adapter Step 2. Write adapter configuration. package adapter.listChecker.config; message Params { repeated string list = 1; } Step 3. Validate adapter configuration. func (b *builder) SetAdapterConfig(cfg adapter.Config) { b.conf = cfg.(*config.Params) } func (b *builder) Validate() (ce *adapter.ConfigErrors) { // Check if the list is empty if b.conf.List == nil { ce = ce.Append(“list”, “list cannot be empty”) } return }
  • 14. Steps to Build a Custom Adapter func (b *builder) Build(context context.Context, env adapter.Env) (adapter.Handler, error) { return &handler{list: b.conf.List}, nil } func (h *handler) HandleListEntry(ctx context.Context, inst *listentry.Instance) (adapter.CheckResult, error) { code := rpc.OK for _, str := range h.list { if inst.Value == str { code = rpc.NOT_FOUND break } } return adapter.CheckResult{ Status: rpc.Status{Code: int32(code)}, }, nil } Step 4. Write business logic for your adapter.
  • 15. Configure Policy Using Custom Adapter apiVersion: “config.istio.io/v1alpha2” kind: listentry metadata: name: srcVersion spec: value: source.labels[“version”] 1. Create an instance of listentry template. apiVersion: “config.istio.io/v1alpha2” kind: listChecker metadata: name: versionChecker spec: list: [“v1”, “v2”] 2. Create a handler of listChecker adapter. apiVersion: “config.istio.io/v1alpha2” kind: rule metadata: name: checkVersion spec: match: destination.labels[“app”] == “ratings” actions: - handler: versionChecker.listChecker instances: - srcVersion.listentry 3. Create a checkVersion policy istioctl create -f *.yaml 4. Apply the policy!
  • 16. + ● Overview: Open Policy Agent ● OPA Adapter ● Demo
  • 17. •General-purpose policy engine • Offload authorization decisions •Declarative Policy Language (Rego) • Is X allowed to call operation Y on resource Z? •Library or Daemon • In-memory policies and data • Zero runtime dependencies • Implemented in Go •Don’t roll your own authorization engine! Policy (Rego) Data (JSON) Open Policy Agent (OPA)
  • 18. •Adapter type: Check •Attributes: (authz template) • Subject: map<string, value> • Action: map<string, value> • Standalone adapter • No external dependencies •Fail closed (deny) in case of error(s) • To be configurable in future Envoy Mixer check(attributes) OPA adapter OPA incoming request allow/deny Mixer’s OPA Adapter
  • 19. apiVersion: config.istio.io/v1alpha2 kind: rule metadata: name: authz spec: actions: - handler: opa-handler instances: - authz-instance Mixer config (1/3): Rule Mixer OPA adapter OPA Istio Config Store istioctl
  • 20. apiVersion: config.istio/v1alpha2 kind: authz metadata: name: authz-instance spec: subject: user: source.uid | “” action: namespace: target.namespace | “default” service: target.service | “” path: target.path | “” method: request.method | “” Mixer config (2/3): Instance Mixer OPA adapter OPA Istio Config Store istioctl
  • 21. apiVersion: config.istio.io/v1alpha2 kind: opa metadata: name: opa-handler spec: checkMethod: authz.allow policy: | package authz default allow = false allow { is_read } is_read { input.action.method = “GET” } Mixer config (3/3): Handler Mixer OPA adapter OPA Istio Config Store istioctl
  • 22. Demo
  • 23. Conclusion •Use Istio to enforce wide range of policy across your microservices •Plugin framework makes it easy to add adapters • Authorization, quota, telemetry, … •Come join us! • istio-users@googlegroups.com • Istio working groups (Security, Integrations, …) • More information: istio.io, github.com/istio