Complex architectures for authentication and authorization
- n AWS
Boyan Dimitrov Director Platform Engineering @ Sixt @nathariel September 2019
Complex architectures for authentication and authorization on AWS - - PowerPoint PPT Presentation
Complex architectures for authentication and authorization on AWS Boyan Dimitrov Director Platform Engineering @ Sixt @nathariel September 2019 Our Focus Today ? Authenticate Key patterns for authentication & Authorize and
Boyan Dimitrov Director Platform Engineering @ Sixt @nathariel September 2019
Service ?
Authenticate & Authorize
and authorization
more complex microservices environments
Service ?
Authenticate & Authorize
Service Service
Autenticate & Authorize
Service Service Service
IdP
Autenticate & Authorize
OIDC ( OpenID Connect ) - a protocol for Authentication built on top of OAuth 2.0
OAUTH 2.0 – a protocol for Authorization
AWS Cognito User Pools AWS Cognito Federated Identities
Identity providers
Social Identity Providers Other Identity Providers
SAML OIDC S3 EC2
Federate Authorize Federate
Mobile Client Amazon API Gateway Custom Authorizer Amazon Cognito
credentials Service
function Auth Service
Amazon API Gateway Amazon Cognito Service Service Service Service Service Service Service Service Service
On-Prem
auth auth auth auth auth auth auth
Elastic Load Balancer
environment with various ingress points ?
Amazon Cognito
Internal Perimeter
SAML OIDC federate Standard Access Token
External Perimeter
Service Service Service Service
Authenticate
ACL MAC DAC RBAC ADAC PBAC …
ACL MAC DAC RBAC ADAC PBAC …
Service Service Service Service Amazon Cognito
Internal Perimeter
SAML OIDC
External Perimeter
{ "name": "John Doe", "email": "john.doe@foo.com", "roles": ["finance_controller"] … }
If role ==„finance_controller“...
Amazon API Gateway
User Service
POST /users GET /users/<id> PUT /users/<id> DELETE /users/<id>
API Contract Associated Permissions
users:create:any users:read:any users:read:own users:update:any users:update:own users:delete:own users:delete:any { "name": "John Doe", "email": "john.doe @foo.com", "roles": ["finance_controller"], “user_id": 343242, … }
Auth Service
GET /users/343242
finance_controller -> users:read:own
Role Permission Authorised?
User Service Auth Service
Advantages
business roles management
Disadvantages
User Service Auth Service
Associated Permissions
users:create:any users:read:any users:read:own users:update:any users:update:own users:delete:own users:delete:any
Register permissions on startup
Service:Permissions Map
com.x.service.user users:create:any com.x.service.user users:read:any com.x.service.user users:read:own com.x.service.user users:update:any com.x.service.user users:update:own com.x.service.user users:delete:own com.x.service.user users:delete:any
Associated Permissions
users:create:any users:read:any users:read:own users:update:any users:update:own users:delete:own users:delete:any
User Service Auth Service
finance_controller -> com.x.service.user users:read:own
Role Permission
Associated Permissions and Roles
users:create:any users:read:any finance_controller -> users:read:own users:update:any users:update:all users:delete:own users:delete:any finance_controller ALLOW com.x.service.user users:read:own
Role Permission
roles for its permissions
User Service Auth Service
User Service Auth Service
Associated Permissions
users:create:any users:read:any users:read:own users:update:any users:update:all users:delete:own users:delete:any { "name": "John Doe", "email": "john.doe @foo.com", "roles": ["finance_controller"], “user_id": 343242, “jti“: 21312e1d123 … }
User Service Auth Service
with TTL
Permissions and Cached Policy Result
users:create:any users:read:any 21312e1d123 -> users:read:own users:update:any users:update:all users:delete:own users:delete:any { "name": "John Doe", "email": "john.doe @foo.com", "roles": ["finance_controller"], “user_id": 343242, “jti“: 21312e1d123 … }
User Service
Cache the access token JWK for local validation
Amazon Cognito
{ "name": "John Doe", "email": "john.doe @foo.com", "roles": ["finance_controller"], … “kid": "5689example" } { “keys": [{ “kid": "5689example", “alg": "RS256" }, { … }]}
Service Service Service Service Amazon Cognito
Internal Perimeter
SAML OIDC
External Perimeter
Auth Service
“Decentralised“ authorisation
User Service Auth Service
Advantages
business roles management
Disadvantages
Auth Service Hello World Service Amazon Cognito User Pool
Register a user & Authenticate Authorize hello request
Fetch IdP JWK
Demo Webapp Admin Webapp
Manage Permissions
Service ?
Authenticate & Authorize
Service Service
Autenticate & Authorize
Service Service Service
IdP
Autenticate & Authorize
User Service Amazon Cognito Email Service
{ “service":“com.x.service.user, … }
Auth Service
com.x.service.user ALLOW com.x.service.email email:send:any
Service Permission
requests
Service Service Service Service Amazon Cognito
Internal Perimeter
SAML OIDC
External Perimeter
Auth Service
S3
User Service Amazon Cognito User Pool Amazon Cognito Identity Federation
Token
Token for IAM Creds
Services
Service ?
Authenticate & Authorize
Service Service
Autenticate & Authorize
Service Service Service
IdP
Autenticate & Authorize