Authentication Policy
This package defines user-facing authentication policy.
Jwt
JSON Web Token (JWT) token format for authentication as defined by https://tools.ietf.org/html/rfc7519. See OAuth 2.0 and OIDC 1.0 for how this is used in the whole authentication flow.
Example,
issuer: https://example.com
audiences:
- bookstore_android.apps.googleusercontent.com
bookstore_web.apps.googleusercontent.com
jwksUri: https://example.com/.well-known/jwks.json
MutualTls
TLS authentication params.
MutualTls.Mode
Defines the acceptable connection TLS mode.
Name | Description |
---|---|
STRICT | Client cert must be presented, connection is in TLS. |
PERMISSIVE | Connection can be either plaintext or TLS, and client cert can be omitted. |
OriginAuthenticationMethod
OriginAuthenticationMethod defines authentication method/params for origin authentication. Origin could be end-user, device, delegate service etc. Currently, only JWT is supported for origin authentication.
PeerAuthenticationMethod
PeerAuthenticationMethod defines one particular type of authentication, e.g mutual TLS, JWT etc, (no authentication is one type by itself) that can be used for peer authentication. The type can be progammatically determine by checking the type of the “params” field.
Policy
Policy defines what authentication methods can be accepted on workload(s), and if authenticated, which method/certificate will set the request principal (i.e request.auth.principal attribute).
Authentication policy is composed of 2-part authentication: - peer: verify caller service credentials. This part will set source.user (peer identity). - origin: verify the origin credentials. This part will set request.auth.user (origin identity), as well as other attributes like request.auth.presenter, request.auth.audiences and raw claims. Note that the identity could be end-user, service account, device etc.
Last but not least, the principal binding rule defines which identity (peer or origin) should be used as principal. By default, it uses peer.
Examples:
Policy to enable mTLS for all services in namespace frod
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
name: mTLS_enable
namespace: frod
spec:
peers:
- mtls:
Policy to disable mTLS for “productpage” service
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
name: mTLS_disable
namespace: frod
spec:
targets:
- name: productpage
Policy to require mTLS for peer authentication, and JWT for origin authenticationn for productpage:9000. Principal is set from origin identity.
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
name: mTLS_enable
namespace: frod
spec:
target:
- name: productpage
ports:
- number: 9000
peers:
- mtls:
origins:
- jwt:
issuer: "https://securetoken.google.com"
audiences:
- "productpage"
jwksUri: "https://www.googleapis.com/oauth2/v1/certs"
jwt_headers:
- "x-goog-iap-jwt-assertion"
principaBinding: USE_ORIGIN
Policy to require mTLS for peer authentication, and JWT for origin authenticationn for productpage:9000, but allow origin authentication failed. Principal is set from origin identity. Note: this example can be used for use cases when we want to allow request from certain peers, given it comes with an approperiate authorization poicy to check and reject request accoridingly.
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
name: mTLS_enable
namespace: frod
spec:
target:
- name: productpage
ports:
- number: 9000
peers:
- mtls:
origins:
- jwt:
issuer: "https://securetoken.google.com"
audiences:
- "productpage"
jwksUri: "https://www.googleapis.com/oauth2/v1/certs"
jwt_headers:
- "x-goog-iap-jwt-assertion"
originIsOptional: true
principalBinding: USE_ORIGIN
PortSelector
PortSelector specifies the name or number of a port to be used for matching targets for authenticationn policy. This is copied from networking API to avoid dependency.
PrincipalBinding
Associates authentication with request principal.
Name | Description |
---|---|
USE_PEER | Principal will be set to the identity from peer authentication. |
USE_ORIGIN | Principal will be set to the identity from origin authentication. |
TargetSelector
TargetSelector defines a matching rule to a service/destination.