This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.Chapter 11. Using service accounts in applications
11.1. Service accounts overview
A service account is an OpenShift Container Platform account that allows a component to directly access the API. Service accounts are API objects that exist within each project. Service accounts provide a flexible way to control API access without sharing a regular user’s credentials.
When you use the OpenShift Container Platform CLI or web console, your API token authenticates you to the API. You can associate a component with a service account so that they can access the API without using a regular user’s credentials. For example, service accounts can allow:
- Replication controllers to make API calls to create or delete pods.
- Applications inside containers to make API calls for discovery purposes.
- External applications to make API calls for monitoring or integration purposes.
Each service account’s user name is derived from its project and name:
system:serviceaccount:<project>:<name>
system:serviceaccount:<project>:<name>
Every service account is also a member of two groups:
Group | Description |
---|---|
system:serviceaccounts | Includes all service accounts in the system. |
system:serviceaccounts:<project> | Includes all service accounts in the specified project. |
Each service account automatically contains two secrets:
- An API token
- Credentials for the OpenShift Container Registry
The generated API token and registry credentials do not expire, but you can revoke them by deleting the secret. When you delete the secret, a new one is automatically generated to take its place.
11.2. Default service accounts
Your OpenShift Container Platform cluster contains default service accounts for cluster management and generates more service accounts for each project.
11.2.1. Default cluster service accounts
Several infrastructure controllers run using service account credentials. The following service accounts are created in the OpenShift Container Platform infrastructure project (openshift-infra
) at server start, and given the following roles cluster-wide:
Service Account | Description |
---|---|
|
Assigned the |
|
Assigned the |
|
Assigned the |
11.2.2. Default project service accounts and roles
Three service accounts are automatically created in each project:
Service Account | Usage |
---|---|
|
Used by build pods. It is given the |
|
Used by deployment pods and given the |
| Used to run all other pods unless they specify a different service account. |
All service accounts in a project are given the system:image-puller
role, which allows pulling images from any imagestream in the project using the internal container image registry.
11.3. Creating service accounts
You can create a service account in a project and grant it permissions by binding it to a role.
Procedure
Optional: To view the service accounts in the current project:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get sa
$ oc get sa
Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME SECRETS AGE builder 2 2d default 2 2d deployer 2 2d
NAME SECRETS AGE builder 2 2d default 2 2d deployer 2 2d
To create a new service account in the current project:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create sa <service_account_name>
$ oc create sa <service_account_name>
1 - 1
- To create a service account in a different project, specify
-n <project_name>
.
Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow serviceaccount "robot" created
serviceaccount "robot" created
TipYou can alternatively apply the following YAML to create the service account:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: ServiceAccount metadata: name: <service_account_name> namespace: <current_project>
apiVersion: v1 kind: ServiceAccount metadata: name: <service_account_name> namespace: <current_project>
Optional: View the secrets for the service account:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe sa robot
$ oc describe sa robot
Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Name: robot Namespace: project1 Labels: <none> Annotations: <none> Image pull secrets: robot-dockercfg-qzbhb Mountable secrets: robot-token-f4khf robot-dockercfg-qzbhb Tokens: robot-token-f4khf robot-token-z8h44
Name: robot Namespace: project1 Labels: <none> Annotations: <none> Image pull secrets: robot-dockercfg-qzbhb Mountable secrets: robot-token-f4khf robot-dockercfg-qzbhb Tokens: robot-token-f4khf robot-token-z8h44
11.4. Using a service account’s credentials externally
You can distribute a service account’s token to external applications that must authenticate to the API.
To pull an image, the authenticated user must have get
rights on the requested imagestreams/layers
. To push an image, the authenticated user must have update
rights on the requested imagestreams/layers
.
By default, all service accounts in a project have rights to pull any image in the same project, and the builder service account has rights to push any image in the same project.
Procedure
View the service account’s API token:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe secret <secret_name>
$ oc describe secret <secret_name>
For example:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe secret robot-token-uzkbh -n top-secret
$ oc describe secret robot-token-uzkbh -n top-secret
Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Name: robot-token-uzkbh Labels: <none> Annotations: kubernetes.io/service-account.name=robot,kubernetes.io/service-account.uid=49f19e2e-16c6-11e5-afdc-3c970e4b7ffe Type: kubernetes.io/service-account-token Data token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Name: robot-token-uzkbh Labels: <none> Annotations: kubernetes.io/service-account.name=robot,kubernetes.io/service-account.uid=49f19e2e-16c6-11e5-afdc-3c970e4b7ffe Type: kubernetes.io/service-account-token Data token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Log in using the token that you obtained:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc login --token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
$ oc login --token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Logged into "https://server:8443" as "system:serviceaccount:top-secret:robot" using the token provided. You don't have any projects. You can try to create a new project, by running $ oc new-project <projectname>
Logged into "https://server:8443" as "system:serviceaccount:top-secret:robot" using the token provided. You don't have any projects. You can try to create a new project, by running $ oc new-project <projectname>
Confirm that you logged in as the service account:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc whoami
$ oc whoami
Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow system:serviceaccount:top-secret:robot
system:serviceaccount:top-secret:robot