Argo CD のログインをEntra ID 認証にしてArgo CD のログインをセキュアにする
Argo CD でユーザー管理やセキュリティについて検討するのは大変です。今回はArgo CD の認証をEntra ID で連携し、Entra ID のユーザーでログインできるようにします。

実施環境
Azure CLI | 2.76.0 |
---|---|
Kubernetes (AKS) | 1.33.2 |
Argo CD | v3.0.11 |
前提条件
- Azure アカウントを持っていること
- Azure CLI を実行できる環境があること
- Argo CD CLI がインストールされていること
Argo CD の認証方法
Argo CD はデフォルトでフルアクセスの権限を持ったローカルの admin ユーザーのみ存在します。Argo CD のローカルユーザー追加はWeb UI から行えず、Argo CD のConfigMap から追加を行います。デフォルトのadmin ユーザーでは権限が強く、パスワードが漏洩した場合に不正なデプロイや意図しない設定変更を行われる恐れがあります。そのため、admin ユーザーは新規ローカルユーザーの作成後またはSSO 設定後に無効化するのを推奨します。
Argo CD ではユーザー名とパスワードでログインするローカルユーザー以外に各種SSO を用いた認証も行えます。2025年8月現在で利用できるArgo CD の認証は以下となります。
- ローカルユーザー
- Auth0
- Entra ID 認証 (今回説明するサービス)
- Okta 認証
- OneLogin
- Keycloak
- OpenUnison
- Zitadel
- Identity Center (AWS SSO)
Argo CD ではローカルユーザーで細かいRBAC の設定も可能ですが、規模が大きくなるにつれて管理が複雑になります。また、グループごとの権限付与やログイン時の履歴の保存についてもSSO が必要となるため、細かい要件が必要な場合はSSO を利用しましょう。
今回の構成
今回は一つ前の記事で実施したArgo CD をデプロイしたAKS クラスターにEntra ID 認証を導入し、Entra ID 認証でのみユーザー認証できるようにします。
リソースグループ、AKS、Argo CD の作成
今回使用するAKS、Argo CD の準備は以下の記事と同じ構成とします。構築方法は以下ページを参照してください。
Azure Kubernetes Service 上のクラスターにArgo CD を導入し、GitHub の更新をトリガーにデプロイを行う
Argo CD 用のアプリを登録
Argo CD の認証をEntra ID 認証にする場合、アプリの登録を介して行います。
# Argo CD用のアプリを登録する
az ad app create \
--display-name "argocd-app" \
--sign-in-audience "AzureADMyOrg" \
--web-redirect-uris "https://<Argo CDホストのIPアドレス>/auth/callback"
実行結果に appId が表示されるためメモします。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications/$entity",
"addIns": [],
"api": {
"acceptMappedClaims": null,
"knownClientApplications": [],
"oauth2PermissionScopes": [],
"preAuthorizedApplications": [],
"requestedAccessTokenVersion": null
},
"appId": "xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"appRoles": [],
"applicationTemplateId": null,
"certification": null,
"createdDateTime": "2025-08-06T14:56:02.3890666Z",
"defaultRedirectUri": null,
"deletedDateTime": null,
"description": null,
"disabledByMicrosoftStatus": null,
"displayName": "argocd-app",
"groupMembershipClaims": null,
"id": "20104315-11fc-47cc-ae95-6d656259dc60",
"identifierUris": [],
"info": {
"logoUrl": null,
"marketingUrl": null,
"privacyStatementUrl": null,
"supportUrl": null,
"termsOfServiceUrl": null
},
"isDeviceOnlyAuthSupported": null,
"isFallbackPublicClient": null,
"keyCredentials": [],
"nativeAuthenticationApisEnabled": null,
"notes": null,
"optionalClaims": null,
"parentalControlSettings": {
"countriesBlockedForMinors": [],
"legalAgeGroupRule": "Allow"
},
"passwordCredentials": [],
"publicClient": {
"redirectUris": []
},
"publisherDomain": "kdkwakaba.com",
"requestSignatureVerification": null,
"requiredResourceAccess": [],
"samlMetadataUrl": null,
"serviceManagementReference": null,
"servicePrincipalLockConfiguration": null,
"signInAudience": "AzureADMyOrg",
"spa": {
"redirectUris": []
},
"tags": [],
"tokenEncryptionKeyId": null,
"uniqueName": null,
"verifiedPublisher": {
"addedDateTime": null,
"displayName": null,
"verifiedPublisherId": null
},
"web": {
"homePageUrl": null,
"implicitGrantSettings": {
"enableAccessTokenIssuance": false,
"enableIdTokenIssuance": false
},
"logoutUrl": null,
"redirectUriSettings": [
{
"index": null,
"uri": "https://<Argo CDホストのIPアドレス>/auth/callback"
}
],
"redirectUris": [
"https://<Argo CDホストのIPアドレス>/auth/callback"
]
}
}
Web のアプリケーション作成後、Azure Portal からArgo CD CLI 用の認証を作成します。Entra ID の「App registrations > 対象のアプリ > Authentication (Preview)」 から Add Redirect URI を選択します。作成画面で Mobile and desktop applications を選択し、一番下のURL 入力欄に http://localhost:8085/auth/callback を設定します。

Entra ID アプリケーションに資格情報を登録
アプリの登録後、Argo CD 接続用の資格情報を登録します。資格情報の登録はWorkload Identity Federation とクライアントシークレットの2種類がありますが、今回は簡易的な検証のためクライアントID を使い登録します。Argo CD 用に作成したアプリケーションから「Certificates & secrets > Client secrets」を選択し、New client secret を選択します。

クライアントシークレットに任意の名前と期間を設定します。今回はシークレット名を ArgoCD-SSO、シークレットの有効期限を180日で設定します。

クライアントシークレットが作成されるため、シークレットの値を取得します。

Entra ID アプリケーションの権限を設定
クライアントシークレット作成後、Entra ID アプリケーションにMicrosoft Graph のUser 読み取り権限を設定します。Argo CD 用アプリケーションから「API Permission」から Add a permission を選択します。

設定画面から「Microsoft APIs > Microsoft Graph > Delegated permissions」からサインインに必要な User.Read 権限にチェックを入れ Add permissions を選択します。

設定後、左ペインの「Token configuration」から Add groups claim を選択し権限を追加します。

設定画面の「Groups assigned to the application …」を選択し追加します。

Entra ID グループの準備、Argo CD 側の設定
API Permission、Token configuration の設定後、Entra ID のグループ準備とArgo CD のConfigMap を設定します。Entra ID のグループごとにユーザーを管理することで、Argo CD の権限ごとにユーザーを分けやすくなります。今回はArgo CD 用のEntra ID グループ・argocdgroup を事前に作成し、ログインするユーザーを登録しておきます。グループ準備後、グループのObject ID をメモしておきます。

Entra ID グループのObject ID を準備後、Argo CD にSSO 用の設定を行います。最初にメモしておいたクライアントシークレットの値を base64 でエンコードします。エンコードした値が出力されたらメモしておきます。
# クライアントシークレットの値をbase64でエンコードする
# 事前にbase64でエンコードしないとシークレット設定時にエラーとなる
echo -n "<クライアントシークレットの値>" | base64
クライアントシークレットをエンコード後、Argo CD のConfigMap を設定します。
# Argo CDのConfigMap(argocd-cm)を設定する
kubectl edit cm argocd-cm -n argocd
編集画面になったらdata セクションに以下内容を追加します。
data:
oidc.config: |
name: Azure
issuer: https://login.microsoftonline.com/<テナントのディレクトリID>/v2.0
clientID: "<appIdの値>"
clientSecret: $oidc.azure.clientSecret
requestedIDTokenClaims:
groups:
essential: true
value: "SecurityGroup"
requestedScopes:
- openid
- profile
- email
設定後、変数定義した部分のシークレットを設定します。
# Argo CDのシークレットを追加する
kubectl edit secret argocd-secret -n argocd
編集画面になったら、data セクションに以下内容を入力します。base64 でエンコードされていない場合はここでエラーとなります。
data:
<省略>
oidc.azure.clientSecret: <エンコードされたクライアントシークレットの値>
<省略>
ConfigMap、シークレットの設定後、Entra ID グループの権限を設定します。
# Argo CDのRBAC設定をする
kubectl edit cm argocd-rbac-cm -n argocd
編集画面になったらdata セクションに以下内容を追加します。今回はAdmin 用の権限のみを作成していますが、複数のグループを設定しRBAC ごとに操作を分割する、特定のApplication のみ操作可能にする、などの設定も可能です。
data:
policy.csv: |
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, "<Entra IDグループのObjectID>", role:org-admin
policy.default: role:readonly
動作確認
各種設定後、Argo CD のWeb UI にアクセスします。Argo CD のWeb UI に「LOG IN VIA Azure」のボタンが表示されたことを確認します。ボタンが表示されない場合、ConfigMap などの各種設定を適切に設定できていない可能性があるため、再度設定内容を確認し修正してください。

「LOG IN VIA AZURE」を選択するとMicrosoft の認証画面となるため、ログインしたいアカウントを選択します。アカウント選択後、Argo CD のWeb UI にログインしたことを確認します。

Argo CD CLI でログインを行う場合は以下コマンドで認証を実施します。
# Argo CD CLIでSSO認証をする
argocd login <ArgoCDのIPアドレス or URL> --sso --grpc-web
admin ユーザーを無効化
Entra ID 認証が可能となった後はセキュリティ向上のため admin ユーザーを無効化します。admin ユーザー無効化のため、argocd-cm を編集します。今回はわかりやすくするためにAzure の認証設定とは別で設定していますが、同時に設定をしても問題ありません。
# Argo CDのConfigMap(argocd-cm)を設定する
kubectl edit cm argocd-cm -n argocd
編集画面になったら、data セクションに以下内容を追加します。
<省略>
data:
admin.enabled: "false"
<省略>
設定後、username とpassword の入力欄が消えていればadmin が無効化されています。
リソースのクリーンアップ
動作確認後、リソースをクリーンアップします。
# Entra IDのアプリを削除する
az ad app delete --id "<APPLICATION_ID>"
# リソースグループを削除する
az group delete --name rg-argocdtest
まとめ
- Argo CD のデフォルトのローカルユーザーはadmin のみとなる。新規ローカルユーザーやSSO 設定後はadmin 無効化が推奨されている。
- Entra ID でSSO を設定する場合、Entra ID でアプリを登録しArgo CD のConfigMap やRBAC を修正する。グループごとにArgo CD の操作や閲覧範囲を制御できる。