SlideShare una empresa de Scribd logo
1 de 89
Enabling Cloud Native Security
with Multi-Tenant UAA
William Tran, Pivotal
Agenda
• Introductions
• Why use UAA for Cloud Native Applications
• Advantages of Multi-tenant UAA
• How to get started
Introductions
About Me
• Spring user since version 2.0 (2007)
• Joined Pivotal October 2013
• Based in Toronto, Canada
• Working on Pivotal CF Services
– Mobile Services API Gateway
– Pivotal SSO
– Spring Cloud Services
• Committer on UAA
About UAA
• User Account and Authorization server
• Secures all CF components
• OAuth2 and OpenID Connect
• SCIM API for user management in internal
user database
• Integration with SAML 2.0 and LDAP
• OAuth2 client registration API
About OAuth2
• Delegated Authorization
• 4 Actors
– The Authorization Server
– User
– Client
– Resource Server
• Clients act on behalf of users
– Authorization Code Grant
– Resource Owner Password Grant
– Implicit Grant
• Clients act on their own
– Client Credentials Grant
OAuth2 In Cloudfoundry
• Apps Manager (PWS or PCF)
OAuth2 In Cloudfoundry
• Apps Manager
– Go to apps.cfdomain in the browser
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
OAuth2 In Cloudfoundry
• Apps Manager
– Apps manager redirects you to UAA
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
Not logged
in!
OAuth2 In Cloudfoundry
• Apps Manager
– Apps manager redirects you to UAA
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
OAuth2 In Cloudfoundry
• Apps Manager
– UAA asks for username and password
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
Please log in
OAuth2 In Cloudfoundry
• Apps Manager
– User logs in
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
Here is the
username and
password
OAuth2 In Cloudfoundry
• Apps Manager
– UAA redirects back to Apps Manager with a one
time code
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
Here is an
authorization
code
OAuth2 In Cloudfoundry
• Apps Manager
– UAA redirects back to Apps Manager with a one
time code
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
Here is an
authorization
code
OAuth2 In Cloudfoundry
• Apps Manager
– Apps Manager gives the code back to UAA
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
Here is the same
authorization code
OAuth2 In Cloudfoundry
• Apps Manager
– UAA exchanges the code for an access token
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
The code is the same,
here is a token
OAuth2 In Cloudfoundry
• Apps Manager
– Apps manager uses the access token to access
the CC API
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
/v2/apps -H
“Authorization: bearer
eyJhbGci…”
OAuth2 In Cloudfoundry
• Apps Manager
– Apps manager renders the page
UAA
(login.)
Apps
Manager
(apps.)
Cloud
Controller
(api.)
Browser
Here is the the
pretty screen,
finally!
OAuth2 In Cloudfoundry
• Apps Manager
– Authorization Code Grant
– Typical of web applications
– Apps manager webapp is the client
OAuth2 In Cloudfoundry
• CF CLI
cf target api.cfdomain
cf login
cf apps
OAuth2 In Cloudfoundry
• CF CLI
– cf login
UAA
(login.)
Cloud
Controller
(api.)
CF CLI
Here is the
username and
password
OAuth2 In Cloudfoundry
• CF CLI
– cf login
UAA
(login.)
Cloud
Controller
(api.)
CF CLI
Here is a token
OAuth2 In Cloudfoundry
• CF CLI
– cf login
UAA
(login.)
Cloud
Controller
(api.)
CF CLI
/v2/apps -H
“Authorization: bearer
eyJhbGci…”
OAuth2 In Cloudfoundry
• CF CLI
– Resource Owner Password Grant
– Typical of CLI, Mobile Apps, non-browser user
apps
– CF CLI is the client
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
my-appAutoscaler
I’m getting very busy!
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
my-appAutoscaler
Don’t worry, I’ll create
more instances
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
my-appAutoscaler
my-app
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
my-appAutoscaler
my-app
my-app
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
UAA
(login.)
Cloud
Controller
(api.)
Autoscaler
Time to check
status!
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
UAA
(login.)
Cloud
Controller
(api.)
Autoscaler
Here is my
client_id and
client_secret
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
UAA
(login.)
Cloud
Controller
(api.)
Autoscaler
Here is a token
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
UAA
(login.)
Cloud
Controller
(api.)
Autoscaler
/v2/apps/1234/stats
-H “Authorization: bearer eyJhbGci…”
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
UAA
(login.)
Cloud
Controller
(api.)
Autoscaler
CPU at
80%!
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
UAA
(login.)
Cloud
Controller
(api.)
Autoscaler
PUT /v2/apps/1234
-H “Authorization: bearer eyJhbGci…”
-d ‘{"instances":2}’
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
UAA
(login.)
Cloud
Controller
(api.)
Autoscaler
OK, creating
more
instances
OAuth2 In Cloudfoundry
• Autoscaling Service (PCF)
– Client Credentials Grant
– Typical of apps that act without a user’s
involvement
– Autoscaling Service is the client
OAuth2 In Cloudfoundry
• The CF platform has many more examples of
using OAuth2
• UAA is the key
– Manages users
– Manages clients
– Grants and verifies access tokens
UAA is the perfect fit for
Cloud Native Security*
UAA for Cloud Native Security
• *In CF there’s more to security than just UAA
– Network security / security groups
– Cross container traffic / trusted workloads
– No End to end TLS
• UAA is for application-level security
• It works for us, so it’ll work for you*
So you want to secure your apps
• Example
– You want to host your API application on Cloud
Foundry
my-cloudfoundry.cn
So you want to secure your apps
• Example
– You want to host your API application on Cloud
Foundry
my-cloudfoundry.cn
my-api
So you want to secure your apps
• Example
– It will be accessed by a web app hosted on CF
my-cloudfoundry.cn
my-api
my-
webapp
browser
So you want to secure your apps
• Example
– It will be accessed through a mobile app as well
my-cloudfoundry.cn
my-api
my-
webapp
browser
Mobile
app
So you want to secure your apps
• Perfect! Use UAA
my-cloudfoundry.cn
my-api
my-
webapp
browser
Mobile
app
UAA
So you want to secure your apps
• Perfect! Use UAA
– Client for web app  authcode grant
So you want to secure your apps
• Perfect! Use UAA
– Client for web app  authcode grant
– Client for mobile app  password grant
So you want to secure your apps
• Perfect! Use UAA
– Client for web app  authcode grant
– Client for mobile app  password grant
– API app token verification  JWT signature
So you want to secure your apps
• Perfect! Use UAA
– Client for web app  authcode grant
– Client for mobile app  password grant
– API app token verification  JWT signature
• API app can validate token on its own
Who are your end users?
• SpaceDevelopers, OrgManagers
– Platform users, no problem
Who are your end users?
• SpaceDevelopers, OrgManagers
– Platform users, no problem
• That sales guy
– Not a platform user, PROBLEM
Who are your end users?
jsmith jsmyth
cf set-space-role 
jsmyth the-org the-space SpaceDeveloper
oops
Who are your end users?
jsmith jsmyth
My app is too
slow
Who are your end users?
jsmith jsmyth
cf login –u jsmyth ...
cf scale sales-api –m 10G
I can fix that!
The Principle of Least Privilege
• You (or the application, process, module, etc)
should have the minimum level of access
required for performing their job
The Principle of Least Privilege
• You (or the application, process, module, etc)
should have the minimum level of access
required for performing their job
• Salesguy should not have been added to the
platform UAA
Solutions?
• Create your own authorization server
• Deploy your own UAA
So you want to secure your products
• Example
– You want to build a product that’s packaged as a
CF service
my-cloudfoundry.cn
my-service
So you want to secure your products
• Example
– When apps bind to the service…
my-cloudfoundry.cn
my-service my-app
cf bind-service
So you want to secure your products
• Example
– Create an oauth client
my-cloudfoundry.cn
my-service my-app
UAA
POST
/oauth/client
So you want to secure your products
• Example
– Create an oauth client
my-cloudfoundry.cn
my-service my-app
UAA 201: Created
my-cloudfoundry.cn
So you want to secure your products
• Example
– So that the app to service communication can be
secured by OAuth2 client credentials grant
my-service my-app
UAA
The client_id and
client_secret are in
VCAP_SERVICES
my-cloudfoundry.cn
So you want to secure your products
• Example
– So that the app to service communication can be
secured by OAuth2 client credentials grant
my-service my-app
UAA
GET /api/foo
-H ‘Authorization:
bearer eyJhbGci…’
So you want to secure your products
• Perfect! Use UAA
– App to app communication  client credentials
– Token verification  JWT signature
– Every app gets their own credentials
• Super secure right?
How do you create clients in UAA?
• POST /oauth/clients
– Token must have scope clients.write
• Creating clients with authorities
– Eg the app gets a token with my-service.read
scope
– Requires clients.write and uaa.admin
• So give your service admin credentials?
Admin-Level Credentials
my-service
• client_id: my-service
• client_secret: 123xyz
• authorities: clients.write,
uaa.admin
• authorized_grant_types:
client_credentials
Admin-Level Credentials
my-service
• CLIENT_ID: my-service
• CLIENT_SECRET: 123xyz
Admin-Level Credentials
my-service
• CLIENT_ID: my-service
• CLIENT_SECRET: 123xyz
I got root, yo.
Admin-Level Credentials
my-service
• CLIENT_ID: my-service
• CLIENT_SECRET: 123xyz
This job sucks.
cf env my-service
Admin-Level Credentials
$ uaac target uaa.my-cloudfoundry.cn
$ uaac token client get my-service 
-s 123xyz
$ uaac client add my-admin-client 
–authorities cloud_controller.admin
Admin-Level Credentials
I got root yo. Lets
have some fun.
The Principle of Least Privilege
• You (or the application, process, module, etc)
should have the minimum level of access
required for performing their job
The Principle of Least Privilege
• You (or the application, process, module, etc)
should have the minimum level of access
required for performing their job
• Giving admin level credentials to applications
is dangerous
Solutions?
• Create your own authorization server
• Deploy your own UAA
How do you deploy your own UAA?
• cf push cloudfoundry-identity-uaa.war
• Yaml config
• Bootstrap users
• Provision DB
• Do the above manually, or as part of a Bosh
deployment
Running your own UAA
• Pros:
– Principle of least privilege
– You can fork it
• Cons:
– Overhead
– Manual upgrades
– “yak shaving” a bosh release
Running your own UAA
• Pros:
– Principle of least privilege
• Systems secured by your UAA cannot affect systems
secured by the platform UAA
Running your own UAA
• Pros:
– Principle of least privilege
Your UAA
Running your own UAA
• Pros:
– Principle of least privilege
Your UAA
Platform UAA
Running your own UAA
• Pros:
– Principle of least privilege
Your UAA
Platform UAA
Impossible!
Running your own UAA
• Pros:
– Principle of least privilege
– You can fork it
• Cons:
– Overhead
– Manual upgrades
– “yak shaving” a bosh release
Multitenant UAA
What is Multitenant UAA
• CF v208 +
• The built-in UAA with subdomains
• Subdomain maps to Identity Zone
• Total segregation between Identity Zones
• API for creating Identity Zones
• Existing API stays the same
Zone administrators
• UAA users with god-like powers in an identity
zone
• Requires scope zone.[zone-id].admin
• Instead of targeting zone via subdomain, use
X-Identity-Zone-Id header
– POST uaa.domain.com/oauth/clients  create a
client in the UAA zone
– POST uaa.domain.com/oauth/clients -H “X-
Identity-Zone-Id:12345”  create a client in the
Identity Zone with id 12345
Multitenant UAA
• Pros:
– Principle of least privilege
– API calls for creating a new tenant (aka Identity
Zone)
– Zone administrators instead of bootstrap users
• Cons:
– Overhead
– Manual upgrades
– “yak shaving” a bosh release
– You can’t fork it
Let’s Use It
Multitenant UAA with UAAC
• Setup can be cumbersome
– When acting as zone admin with X-Identity-Zone-
Id header, you can only uaac curl
• Once you have an admin client in the zone,
uaac works great
• Future enhancements
– Creating initial users / clients when the Identity
Zone is created
– -z global option to target a zone via header
Summary
• UAA is great for securing Cloud Native
Applications
• Always use the principle of least privilege
– Don’t add non-platform users to the platform
– Don’t give out platform admin abilities to other
apps
• You can deploy your own UAA
– but multitenant UAA is an API call away
• Tooling needs to catch up
– But once you get that admin client set up, its easy
Stay In Touch
Stay in touch
• Me
– Twitter: @fivetenwill
– github.com/william-tran
– wtran@pivotal.io
• CF Identity PM
– Sree Tummidi: stummidi@pivotal.io
• CF Identity Team
– Issues: github.com/cloudfoundry/uaa
– Discussion: lists.cloudfoundry.org

Más contenido relacionado

La actualidad más candente

Oauth2 and OWSM OAuth2 support
Oauth2 and OWSM OAuth2 supportOauth2 and OWSM OAuth2 support
Oauth2 and OWSM OAuth2 support
Gaurav Sharma
 

La actualidad más candente (20)

An Authentication and Authorization Architecture for a Microservices World
An Authentication and Authorization Architecture for a Microservices WorldAn Authentication and Authorization Architecture for a Microservices World
An Authentication and Authorization Architecture for a Microservices World
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - Introduction
 
OAuth 2.0 and Mobile Devices: Is that a token in your phone in your pocket or...
OAuth 2.0 and Mobile Devices: Is that a token in your phone in your pocket or...OAuth 2.0 and Mobile Devices: Is that a token in your phone in your pocket or...
OAuth 2.0 and Mobile Devices: Is that a token in your phone in your pocket or...
 
Stateless authentication for microservices - Spring I/O 2015
Stateless authentication for microservices  - Spring I/O 2015Stateless authentication for microservices  - Spring I/O 2015
Stateless authentication for microservices - Spring I/O 2015
 
ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2
 
API Security & Federation Patterns - Francois Lascelles, Chief Architect, Lay...
API Security & Federation Patterns - Francois Lascelles, Chief Architect, Lay...API Security & Federation Patterns - Francois Lascelles, Chief Architect, Lay...
API Security & Federation Patterns - Francois Lascelles, Chief Architect, Lay...
 
Rest API Security
Rest API SecurityRest API Security
Rest API Security
 
OAuth2 and Spring Security
OAuth2 and Spring SecurityOAuth2 and Spring Security
OAuth2 and Spring Security
 
OAuth - Open API Authentication
OAuth - Open API AuthenticationOAuth - Open API Authentication
OAuth - Open API Authentication
 
Stateless token-based authentication for pure front-end applications
Stateless token-based authentication for pure front-end applicationsStateless token-based authentication for pure front-end applications
Stateless token-based authentication for pure front-end applications
 
OAuth2 + API Security
OAuth2 + API SecurityOAuth2 + API Security
OAuth2 + API Security
 
Best Practices in Building an API Security Ecosystem
Best Practices in Building an API Security EcosystemBest Practices in Building an API Security Ecosystem
Best Practices in Building an API Security Ecosystem
 
Securing your APIs with OAuth, OpenID, and OpenID Connect
Securing your APIs with OAuth, OpenID, and OpenID ConnectSecuring your APIs with OAuth, OpenID, and OpenID Connect
Securing your APIs with OAuth, OpenID, and OpenID Connect
 
OAuth 2.0
OAuth 2.0OAuth 2.0
OAuth 2.0
 
The Ultimate Guide to Mobile API Security
The Ultimate Guide to Mobile API SecurityThe Ultimate Guide to Mobile API Security
The Ultimate Guide to Mobile API Security
 
Oauth 2.0 security
Oauth 2.0 securityOauth 2.0 security
Oauth 2.0 security
 
An Introduction to OAuth 2
An Introduction to OAuth 2An Introduction to OAuth 2
An Introduction to OAuth 2
 
REST Service Authetication with TLS & JWTs
REST Service Authetication with TLS & JWTsREST Service Authetication with TLS & JWTs
REST Service Authetication with TLS & JWTs
 
OpenID Connect and Single Sign-On for Beginners
OpenID Connect and Single Sign-On for BeginnersOpenID Connect and Single Sign-On for Beginners
OpenID Connect and Single Sign-On for Beginners
 
Oauth2 and OWSM OAuth2 support
Oauth2 and OWSM OAuth2 supportOauth2 and OWSM OAuth2 support
Oauth2 and OWSM OAuth2 support
 

Similar a Enabling Cloud Native Security with OAuth2 and Multi-Tenant UAA

The Datacenter API
The Datacenter APIThe Datacenter API
The Datacenter API
Akana
 

Similar a Enabling Cloud Native Security with OAuth2 and Multi-Tenant UAA (20)

Дмитрий Хоревич "Cloud native security with UAA \ Как защитить микросервисы с...
Дмитрий Хоревич "Cloud native security with UAA \ Как защитить микросервисы с...Дмитрий Хоревич "Cloud native security with UAA \ Как защитить микросервисы с...
Дмитрий Хоревич "Cloud native security with UAA \ Как защитить микросервисы с...
 
Security as a Service - Tian Wang
Security as a Service - Tian WangSecurity as a Service - Tian Wang
Security as a Service - Tian Wang
 
Operating Your Production API
Operating Your Production APIOperating Your Production API
Operating Your Production API
 
Operating your Production API
Operating your Production APIOperating your Production API
Operating your Production API
 
Azure API Management - why should I care?
Azure API Management - why should I care?Azure API Management - why should I care?
Azure API Management - why should I care?
 
The Datacenter API
The Datacenter APIThe Datacenter API
The Datacenter API
 
The Datacenter API
The Datacenter APIThe Datacenter API
The Datacenter API
 
#1922 rest-push2 ap-im-v6
#1922 rest-push2 ap-im-v6#1922 rest-push2 ap-im-v6
#1922 rest-push2 ap-im-v6
 
Developing Apps with Azure AD
Developing Apps with Azure ADDeveloping Apps with Azure AD
Developing Apps with Azure AD
 
Token Management using Stormpath inside Mule
Token Management using Stormpath inside MuleToken Management using Stormpath inside Mule
Token Management using Stormpath inside Mule
 
AWS Summit Barcelona 2015 - Introducing Amazon API Gateway
AWS Summit Barcelona 2015 - Introducing Amazon API GatewayAWS Summit Barcelona 2015 - Introducing Amazon API Gateway
AWS Summit Barcelona 2015 - Introducing Amazon API Gateway
 
Aws Technical Day 2015 - Amazon API Gateway
Aws Technical Day 2015 - Amazon API GatewayAws Technical Day 2015 - Amazon API Gateway
Aws Technical Day 2015 - Amazon API Gateway
 
Amazon API Gateway
Amazon API GatewayAmazon API Gateway
Amazon API Gateway
 
AWS CodeDeploy: Manage Deployment Complexity
AWS CodeDeploy: Manage Deployment ComplexityAWS CodeDeploy: Manage Deployment Complexity
AWS CodeDeploy: Manage Deployment Complexity
 
AWS re:Invent 2016: Building SaaS Offerings for Desktop Apps with Amazon AppS...
AWS re:Invent 2016: Building SaaS Offerings for Desktop Apps with Amazon AppS...AWS re:Invent 2016: Building SaaS Offerings for Desktop Apps with Amazon AppS...
AWS re:Invent 2016: Building SaaS Offerings for Desktop Apps with Amazon AppS...
 
Oauth2.0
Oauth2.0Oauth2.0
Oauth2.0
 
Authorization Architecture Patterns: How to Avoid Pitfalls in #OAuth / #OIDC ...
Authorization Architecture Patterns: How to Avoid Pitfalls in #OAuth / #OIDC ...Authorization Architecture Patterns: How to Avoid Pitfalls in #OAuth / #OIDC ...
Authorization Architecture Patterns: How to Avoid Pitfalls in #OAuth / #OIDC ...
 
API, Integration, and SOA Convergence
API, Integration, and SOA ConvergenceAPI, Integration, and SOA Convergence
API, Integration, and SOA Convergence
 
API Services: Building State-of-the-Art APIs
API Services: Building State-of-the-Art APIsAPI Services: Building State-of-the-Art APIs
API Services: Building State-of-the-Art APIs
 
Transforming Software Development
Transforming Software DevelopmentTransforming Software Development
Transforming Software Development
 

Último

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 

Último (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 

Enabling Cloud Native Security with OAuth2 and Multi-Tenant UAA

  • 1. Enabling Cloud Native Security with Multi-Tenant UAA William Tran, Pivotal
  • 2. Agenda • Introductions • Why use UAA for Cloud Native Applications • Advantages of Multi-tenant UAA • How to get started
  • 4. About Me • Spring user since version 2.0 (2007) • Joined Pivotal October 2013 • Based in Toronto, Canada • Working on Pivotal CF Services – Mobile Services API Gateway – Pivotal SSO – Spring Cloud Services • Committer on UAA
  • 5. About UAA • User Account and Authorization server • Secures all CF components • OAuth2 and OpenID Connect • SCIM API for user management in internal user database • Integration with SAML 2.0 and LDAP • OAuth2 client registration API
  • 6. About OAuth2 • Delegated Authorization • 4 Actors – The Authorization Server – User – Client – Resource Server • Clients act on behalf of users – Authorization Code Grant – Resource Owner Password Grant – Implicit Grant • Clients act on their own – Client Credentials Grant
  • 7. OAuth2 In Cloudfoundry • Apps Manager (PWS or PCF)
  • 8. OAuth2 In Cloudfoundry • Apps Manager – Go to apps.cfdomain in the browser UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser
  • 9. OAuth2 In Cloudfoundry • Apps Manager – Apps manager redirects you to UAA UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser Not logged in!
  • 10. OAuth2 In Cloudfoundry • Apps Manager – Apps manager redirects you to UAA UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser
  • 11. OAuth2 In Cloudfoundry • Apps Manager – UAA asks for username and password UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser Please log in
  • 12. OAuth2 In Cloudfoundry • Apps Manager – User logs in UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser Here is the username and password
  • 13. OAuth2 In Cloudfoundry • Apps Manager – UAA redirects back to Apps Manager with a one time code UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser Here is an authorization code
  • 14. OAuth2 In Cloudfoundry • Apps Manager – UAA redirects back to Apps Manager with a one time code UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser Here is an authorization code
  • 15. OAuth2 In Cloudfoundry • Apps Manager – Apps Manager gives the code back to UAA UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser Here is the same authorization code
  • 16. OAuth2 In Cloudfoundry • Apps Manager – UAA exchanges the code for an access token UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser The code is the same, here is a token
  • 17. OAuth2 In Cloudfoundry • Apps Manager – Apps manager uses the access token to access the CC API UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser /v2/apps -H “Authorization: bearer eyJhbGci…”
  • 18. OAuth2 In Cloudfoundry • Apps Manager – Apps manager renders the page UAA (login.) Apps Manager (apps.) Cloud Controller (api.) Browser Here is the the pretty screen, finally!
  • 19. OAuth2 In Cloudfoundry • Apps Manager – Authorization Code Grant – Typical of web applications – Apps manager webapp is the client
  • 20. OAuth2 In Cloudfoundry • CF CLI cf target api.cfdomain cf login cf apps
  • 21. OAuth2 In Cloudfoundry • CF CLI – cf login UAA (login.) Cloud Controller (api.) CF CLI Here is the username and password
  • 22. OAuth2 In Cloudfoundry • CF CLI – cf login UAA (login.) Cloud Controller (api.) CF CLI Here is a token
  • 23. OAuth2 In Cloudfoundry • CF CLI – cf login UAA (login.) Cloud Controller (api.) CF CLI /v2/apps -H “Authorization: bearer eyJhbGci…”
  • 24. OAuth2 In Cloudfoundry • CF CLI – Resource Owner Password Grant – Typical of CLI, Mobile Apps, non-browser user apps – CF CLI is the client
  • 25. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) my-appAutoscaler I’m getting very busy!
  • 26. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) my-appAutoscaler Don’t worry, I’ll create more instances
  • 27. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) my-appAutoscaler my-app
  • 28. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) my-appAutoscaler my-app my-app
  • 29. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) UAA (login.) Cloud Controller (api.) Autoscaler Time to check status!
  • 30. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) UAA (login.) Cloud Controller (api.) Autoscaler Here is my client_id and client_secret
  • 31. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) UAA (login.) Cloud Controller (api.) Autoscaler Here is a token
  • 32. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) UAA (login.) Cloud Controller (api.) Autoscaler /v2/apps/1234/stats -H “Authorization: bearer eyJhbGci…”
  • 33. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) UAA (login.) Cloud Controller (api.) Autoscaler CPU at 80%!
  • 34. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) UAA (login.) Cloud Controller (api.) Autoscaler PUT /v2/apps/1234 -H “Authorization: bearer eyJhbGci…” -d ‘{"instances":2}’
  • 35. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) UAA (login.) Cloud Controller (api.) Autoscaler OK, creating more instances
  • 36. OAuth2 In Cloudfoundry • Autoscaling Service (PCF) – Client Credentials Grant – Typical of apps that act without a user’s involvement – Autoscaling Service is the client
  • 37. OAuth2 In Cloudfoundry • The CF platform has many more examples of using OAuth2 • UAA is the key – Manages users – Manages clients – Grants and verifies access tokens
  • 38. UAA is the perfect fit for Cloud Native Security*
  • 39. UAA for Cloud Native Security • *In CF there’s more to security than just UAA – Network security / security groups – Cross container traffic / trusted workloads – No End to end TLS • UAA is for application-level security • It works for us, so it’ll work for you*
  • 40. So you want to secure your apps • Example – You want to host your API application on Cloud Foundry my-cloudfoundry.cn
  • 41. So you want to secure your apps • Example – You want to host your API application on Cloud Foundry my-cloudfoundry.cn my-api
  • 42. So you want to secure your apps • Example – It will be accessed by a web app hosted on CF my-cloudfoundry.cn my-api my- webapp browser
  • 43. So you want to secure your apps • Example – It will be accessed through a mobile app as well my-cloudfoundry.cn my-api my- webapp browser Mobile app
  • 44. So you want to secure your apps • Perfect! Use UAA my-cloudfoundry.cn my-api my- webapp browser Mobile app UAA
  • 45. So you want to secure your apps • Perfect! Use UAA – Client for web app  authcode grant
  • 46. So you want to secure your apps • Perfect! Use UAA – Client for web app  authcode grant – Client for mobile app  password grant
  • 47. So you want to secure your apps • Perfect! Use UAA – Client for web app  authcode grant – Client for mobile app  password grant – API app token verification  JWT signature
  • 48. So you want to secure your apps • Perfect! Use UAA – Client for web app  authcode grant – Client for mobile app  password grant – API app token verification  JWT signature • API app can validate token on its own
  • 49. Who are your end users? • SpaceDevelopers, OrgManagers – Platform users, no problem
  • 50. Who are your end users? • SpaceDevelopers, OrgManagers – Platform users, no problem • That sales guy – Not a platform user, PROBLEM
  • 51. Who are your end users? jsmith jsmyth cf set-space-role jsmyth the-org the-space SpaceDeveloper oops
  • 52. Who are your end users? jsmith jsmyth My app is too slow
  • 53. Who are your end users? jsmith jsmyth cf login –u jsmyth ... cf scale sales-api –m 10G I can fix that!
  • 54. The Principle of Least Privilege • You (or the application, process, module, etc) should have the minimum level of access required for performing their job
  • 55. The Principle of Least Privilege • You (or the application, process, module, etc) should have the minimum level of access required for performing their job • Salesguy should not have been added to the platform UAA
  • 56. Solutions? • Create your own authorization server • Deploy your own UAA
  • 57. So you want to secure your products • Example – You want to build a product that’s packaged as a CF service my-cloudfoundry.cn my-service
  • 58. So you want to secure your products • Example – When apps bind to the service… my-cloudfoundry.cn my-service my-app cf bind-service
  • 59. So you want to secure your products • Example – Create an oauth client my-cloudfoundry.cn my-service my-app UAA POST /oauth/client
  • 60. So you want to secure your products • Example – Create an oauth client my-cloudfoundry.cn my-service my-app UAA 201: Created
  • 61. my-cloudfoundry.cn So you want to secure your products • Example – So that the app to service communication can be secured by OAuth2 client credentials grant my-service my-app UAA The client_id and client_secret are in VCAP_SERVICES
  • 62. my-cloudfoundry.cn So you want to secure your products • Example – So that the app to service communication can be secured by OAuth2 client credentials grant my-service my-app UAA GET /api/foo -H ‘Authorization: bearer eyJhbGci…’
  • 63. So you want to secure your products • Perfect! Use UAA – App to app communication  client credentials – Token verification  JWT signature – Every app gets their own credentials • Super secure right?
  • 64. How do you create clients in UAA? • POST /oauth/clients – Token must have scope clients.write • Creating clients with authorities – Eg the app gets a token with my-service.read scope – Requires clients.write and uaa.admin • So give your service admin credentials?
  • 65. Admin-Level Credentials my-service • client_id: my-service • client_secret: 123xyz • authorities: clients.write, uaa.admin • authorized_grant_types: client_credentials
  • 66. Admin-Level Credentials my-service • CLIENT_ID: my-service • CLIENT_SECRET: 123xyz
  • 67. Admin-Level Credentials my-service • CLIENT_ID: my-service • CLIENT_SECRET: 123xyz I got root, yo.
  • 68. Admin-Level Credentials my-service • CLIENT_ID: my-service • CLIENT_SECRET: 123xyz This job sucks. cf env my-service
  • 69. Admin-Level Credentials $ uaac target uaa.my-cloudfoundry.cn $ uaac token client get my-service -s 123xyz $ uaac client add my-admin-client –authorities cloud_controller.admin
  • 70. Admin-Level Credentials I got root yo. Lets have some fun.
  • 71. The Principle of Least Privilege • You (or the application, process, module, etc) should have the minimum level of access required for performing their job
  • 72. The Principle of Least Privilege • You (or the application, process, module, etc) should have the minimum level of access required for performing their job • Giving admin level credentials to applications is dangerous
  • 73. Solutions? • Create your own authorization server • Deploy your own UAA
  • 74. How do you deploy your own UAA? • cf push cloudfoundry-identity-uaa.war • Yaml config • Bootstrap users • Provision DB • Do the above manually, or as part of a Bosh deployment
  • 75. Running your own UAA • Pros: – Principle of least privilege – You can fork it • Cons: – Overhead – Manual upgrades – “yak shaving” a bosh release
  • 76. Running your own UAA • Pros: – Principle of least privilege • Systems secured by your UAA cannot affect systems secured by the platform UAA
  • 77. Running your own UAA • Pros: – Principle of least privilege Your UAA
  • 78. Running your own UAA • Pros: – Principle of least privilege Your UAA Platform UAA
  • 79. Running your own UAA • Pros: – Principle of least privilege Your UAA Platform UAA Impossible!
  • 80. Running your own UAA • Pros: – Principle of least privilege – You can fork it • Cons: – Overhead – Manual upgrades – “yak shaving” a bosh release
  • 82. What is Multitenant UAA • CF v208 + • The built-in UAA with subdomains • Subdomain maps to Identity Zone • Total segregation between Identity Zones • API for creating Identity Zones • Existing API stays the same
  • 83. Zone administrators • UAA users with god-like powers in an identity zone • Requires scope zone.[zone-id].admin • Instead of targeting zone via subdomain, use X-Identity-Zone-Id header – POST uaa.domain.com/oauth/clients  create a client in the UAA zone – POST uaa.domain.com/oauth/clients -H “X- Identity-Zone-Id:12345”  create a client in the Identity Zone with id 12345
  • 84. Multitenant UAA • Pros: – Principle of least privilege – API calls for creating a new tenant (aka Identity Zone) – Zone administrators instead of bootstrap users • Cons: – Overhead – Manual upgrades – “yak shaving” a bosh release – You can’t fork it
  • 86. Multitenant UAA with UAAC • Setup can be cumbersome – When acting as zone admin with X-Identity-Zone- Id header, you can only uaac curl • Once you have an admin client in the zone, uaac works great • Future enhancements – Creating initial users / clients when the Identity Zone is created – -z global option to target a zone via header
  • 87. Summary • UAA is great for securing Cloud Native Applications • Always use the principle of least privilege – Don’t add non-platform users to the platform – Don’t give out platform admin abilities to other apps • You can deploy your own UAA – but multitenant UAA is an API call away • Tooling needs to catch up – But once you get that admin client set up, its easy
  • 89. Stay in touch • Me – Twitter: @fivetenwill – github.com/william-tran – wtran@pivotal.io • CF Identity PM – Sree Tummidi: stummidi@pivotal.io • CF Identity Team – Issues: github.com/cloudfoundry/uaa – Discussion: lists.cloudfoundry.org

Notas del editor

  1. Hello everyone, thank you for coming to my talk, I’m very excited to be here.