Creating an Argo CD service account
This blog post shows how to create an Argo CD service account. The account will only be able to authenticate via API and not the Web UI.
Having an account like this is useful in CI environments or other automated programs that need to interact with the Argo CD Server API.
The versions used are Argo CD v2.5.9 and the Argo CD Helm Chart v5.17.0.
Create User Account
The first thing we do is to create an account in Argo CD. In the Helm
chart values.yaml
we do this by setting the following
values:
argo-cd:
configs:
cm:
accounts.gh_actions: apiKey
rbac:
policy.csv: |
p, gh_actions, applications, get, */*, allow
The name of the account can be specified by setting
accounts.<name>
. For this example post, we name the
account gh_actions
and grant it permissions to get all
applications.
However, we cannot use this account yet. To do this, we need to create a token for the account. The token can then be used to authenticate with the API.
Make sure to sync the Helm chart deployment. After that, we can check that the account was created and generate a token by using the Argo CD CLI.
First we log in with our admin
account:
kubectl run --rm -it --image=argoproj/argocd:v2.5.9 sh
$ argocd login --insecure argocd-server.argocd.svc.cluster.local
$
WARNING: server is not configured with TLS. Proceed (y/n)? y
Username: admin
Password:
'admin:login' logged in successfully Context 'argocd-server.argocd.svc.cluster.local' updated
Then we can check if the user was created:
argocd account get --account gh_actions
$
Name: gh_actions
Enabled: true
Capabilities: apiKey
Tokens: NONE
Next, we create a token for the user account:
argocd account generate-token --account gh_actions $
The command will output the token that is used to authenticate with the API. Make sure to save it somewhere, as it can’t be displayed again.
Logout from the admin
account. When using API tokens, we
don’t have to use the login anymore and can provide the token via CLI
argument.
argocd logout argocd-server.argocd.svc.cluster.local
$ Logged out from 'argocd-server.argocd.svc.cluster.local'
Testing the API token
To test that the token works, we can run the following command to
list all Applications in the cluster. Replace
<mytoken>
with the real token from above:
argocd --server argocd-server.argocd.svc.cluster.local --plaintext --auth-token <mytoken> app list $
If your Argo CD server is behind an HTTP proxy with TLS, you need to
use --grpc-web
instead of --plaintext
.