アクセス制御とユーザー管理
ユーザー認証とユーザーおよび namespace のアクセス制御の設定
概要
第1章 Argo CD RBAC の設定
デフォルトでは、デフォルトの Argo CD インスタンスにログインしている kube:admin
ユーザー以外のどのタイプのユーザーも、どのサービスにもアクセスできません。ただし、カスタム Argo CD インスタンスにログインしたユーザーは、デフォルトでは読み取り専用ユーザーです。
Red Hat OpenShift GitOps v1.9.0 以前のバージョンでは、Red Hat SSO (RH SSO) を使用して Argo CD にログインした kube:admin
ユーザー以外のすべてのタイプのユーザーは、デフォルトで読み取り専用ユーザーです。
1.1. ユーザーレベルのアクセス設定
ユーザーレベルのアクセスを管理および変更するには、Argo CD カスタムリソース (CR) のロールベースのアクセス制御 (RBAC) セクションを設定します。
手順
argocd
CR を編集します。$ oc edit argocd [argocd-instance-name] -n [namespace]
出力
metadata ... ... rbac: policy: 'g, rbacsystem:cluster-admins, role:admin' scopes: '[groups]'
rbac
セクションにpolicy
設定を追加し、ユーザーに適用するname
と目的のrole
を追加します。metadata ... ... rbac: policy: g, <name>, role:<admin> scopes: '[groups]'
現在、RHSSO は Red Hat OpenShift GitOps ユーザーのグループ情報を読み取ることができません。そのため、ユーザーレベルで RBAC を設定します。
第2章 Dex を使用した Argo CD の SSO の設定
Red Hat OpenShift GitOps Operator がインストールされると、Argo CD は admin
権限を持つユーザーを自動的に作成します。複数のユーザーを管理するために、クラスター管理者は Argo CD を使用して、シングルサインオン (SSO) を設定できます。
ArgoCD CR の spec.dex
パラメーターは、Red Hat OpenShift GitOps v1.10.0 以降ではサポート対象外になりました。代わりに .spec.sso
パラメーターの使用を検討してください。
2.1. Dex OpenShift OAuth コネクターを有効にするための設定
Dex は、Operator によって作成されるすべての Argo CD インスタンスにデフォルトでインストールされます。.spec.sso
パラメーターを設定することで、Dex を SSO 認証プロバイダーとして使用するように Red Hat OpenShift GitOps を設定できます。
Dex は、プラットフォームが提供する OAuth
サーバーを確認して、OpenShift Container Platform 内で定義されたユーザーおよびグループを使用します。
手順
Dex を有効にするには、Operator の YAML リソースで
.spec.sso.provider
パラメーターをdex
に設定します。# ... spec: sso: provider: dex dex: openShiftOAuth: true 1 # ...
- 1
openShiftOAuth
プロパティーは、値がtrue
に設定されている場合に、組み込み OpenShift Container PlatformOAuth
サーバーを自動的に設定するように Operator をトリガーします。
2.1.1. 特定のロールへのユーザーのマッピング
Argo CD は、直接の ClusterRoleBinding
ロールがある場合は、ユーザーを特定のロールにマップできません。OpenShift 経由で SSO の role:admin
としてロールを手動で変更できます。
手順
cluster-admins
という名前のグループを作成します。$ oc adm groups new cluster-admins
ユーザーをグループに追加します。
$ oc adm groups add-users cluster-admins USER
cluster-admin
ClusterRole
をグループに適用します。$ oc adm policy add-cluster-role-to-group cluster-admin cluster-admins
2.2. .spec.sso を置き換えて Dex を無効にする
-
dex を無効にするには、Argo CD カスタムリソースから
spec.sso
要素を削除するか、別の SSO プロバイダーを指定します。
第3章 Keycloak を使用した Argo CD の SSO の設定
Red Hat OpenShift GitOps Operator がインストールされると、Argo CD は admin
権限を持つユーザーを自動的に作成します。複数のユーザーを管理するために、クラスター管理者は Argo CD を使用して、シングルサインオン (SSO) を設定できます。
3.1. 前提条件
- Red Hat SSO がクラスターにインストールされている。
- Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
- Argo CD がクラスターにインストールされている。
-
DeploymentConfig
API はクラスターで使用できます。詳細は、「DeploymentConfig [apps.openshift.io/v1]」を参照してください。 - Red Hat OpenShift GitOps Operator が FIPS モードに設定された OpenShift Container Platform クラスターにデプロイされている場合、Keycloak を使用した Argo CD のシングルサインオン (SSO) 設定はサポートされません。
3.2. Keycloak での新規クライアントの設定
Dex は、Operator によって作成されるすべての Argo CD インスタンスにデフォルトでインストールされます。ただし、Dex 設定を削除し、代わりに Keycloak を追加して OpenShift 認証情報を使用して Argo CD にログインすることができます。Keycloak は Argo CD と OpenShift 間のアイデンティティーブローカーとして機能します。
手順
Keycloak を設定するには、以下の手順に従います。
Argo CD カスタムリソース (CR) から
.spec.sso.dex
パラメーターを削除して Dex 設定を削除し、CR を保存します。dex: openShiftOAuth: true resources: limits: cpu: memory: requests: cpu: memory:
-
Argo CD CR で
provider
パラメーターの値をkeycloak
に設定します。 次のいずれかの手順を実行して、Keycloak を設定します。
安全な接続のために、次の例に示すように
rootCA
パラメーターの値を設定します。apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: example-argocd labels: example: basic spec: sso: provider: keycloak keycloak: rootCA: "<PEM-encoded-root-certificate>" 1 server: route: enabled: true
- 1
- Keycloak の TLS 証明書を検証するために使用されるカスタム証明書。
Operator は
.spec.keycloak.rootCA
パラメーターの変更を調整し、argocd-cm
設定マップの PEM エンコードされたルート証明書でoidc.config
パラメーターを更新します。安全でない接続の場合は、
rootCA
パラメーターの値を空のままにして、以下に示すようにoidc.tls.insecure.skip.verify
パラメーターを使用します。apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: example-argocd labels: example: basic spec: extraConfig: oidc.tls.insecure.skip.verify: "true" sso: provider: keycloak keycloak: rootCA: ""
オプション:
spec.sso.keycloak
フィールドをカスタマイズして、ArgoCD
CR にkeycloak
プロバイダーのルート名を追加します。この機能を使用すると、複数の Ingress Controller シャーディング 間で着信トラフィックの負荷を分散するなど、高度なルーティングのユースケースをサポートできます。次の YAML の例を使用して、
ArgoCD
CR にhost
パラメーターを追加します。ArgoCD
CR の例apiVersion: argoproj.io/v1alpha1 kind: ArgoCD metadata: name: <resource_name> 1 labels: example: route spec: sso: provider: keycloak keycloak: host: <hostname> 2 server: ingress: enabled: true insecure: true
ArgoCD CR
を作成するには、次のコマンドを実行します。$ oc create -f <argocd_filename>.yaml -n <your-namespace>
ArgoCD CR
を編集するには、次のコマンドを実行します。$ oc edit -f <argocd_filename>.yaml -n <your_namespace>
- 変更を適用するためにファイルを保存します。
ArgoCD
CR を適用するには、次のコマンドを実行します。$ oc apply -f <argocd_filename>.yaml -n <your_namespace>
次のコマンドを実行して、
host
属性が追加されたことを確認します。$ oc get route keycloak -n <your_namespace> -o yaml
出力例
kind: Route metadata: name: keycloak 1 labels: application: keycloak spec: host: sso.test.example.com status: ingress: - host: sso.test.example.com 2
注記Keycloak インスタンスのインストールおよび実行には、2 - 3 分かかります。
3.3. Keycloak へのログイン
Keycloak コンソールにログインしてアイデンティティーまたはロールを管理し、さまざまなロールに割り当てられた権限を定義します。
前提条件
- Dex のデフォルト設定は削除されている。
- Argo CD CR は Keycloak SSO プロバイダーを使用するように設定されている。
手順
ログイン用の Keycloak ルート URL を取得します。
$ oc -n argocd get route keycloak NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD keycloak keycloak-default.apps.ci-ln-******.origin-ci-int-aws.dev.**.com keycloak <all> reencrypt None
環境変数としてユーザー名とパスワードを保存する Keycloak Pod 名を取得します。
$ oc -n argocd get pods NAME READY STATUS RESTARTS AGE keycloak-1-2sjcl 1/1 Running 0 45m
Keycloak ユーザー名を取得します。
$ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_USERNAME SSO_ADMIN_USERNAME=Cqid54Ih
Keycloak パスワードを取得します。
$ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD SSO_ADMIN_PASSWORD=GVXxHifH
ログインページで、LOG IN VIA KEYCLOAK をクリックします。
注記Keycloak インスタンスの準備ができた後にのみ、LOGIN VIA KEYCLOAK オプションが表示されます。
Login with OpenShift をクリックします。
注記kubeadmin
を使用したログインはサポートされていません。- ログインするために OpenShift の認証情報を入力します。
オプション: デフォルトでは、Argo CD にログインしているすべてのユーザーが、読み取り専用アクセス権を持っています。
argocd-rbac-cm
設定マップを更新して、ユーザーレベルのアクセスを管理できます。policy.csv: <name>, <email>, role:admin
3.4. Keycloak のアンインストール
Argo CD カスタムリソース (CR) ファイルから SSO
フィールドを削除して、Keycloak リソースおよびそれらの関連設定を削除できます。SSO
フィールドを削除すると、ファイルの値は以下のようになります。
apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: example-argocd labels: example: basic spec: server: route: enabled: true
この方法を使用して作成した Keycloak アプリケーションは、現在永続的ではありません。Argo CD Keycloak レルムで作成された追加の設定は、サーバーの再起動時に削除されます。
3.5. Keycloak リソースリクエスト/制限の変更
デフォルトでは、Keycloak コンテナーはリソース要求と制限付きで作成されます。リソース要求を変更および管理できます。
リソース | 要求 | 制限 |
---|---|---|
CPU | 500 m | 1000 m |
メモリー | 512 Mi | 1024 Mi |
手順
- Argo CD カスタムリソース (CR) にパッチを適用する際のデフォルトのリソース要件を変更します。
$ oc -n openshift-gitops patch argocd openshift-gitops --type='json' -p='[{"op": "add", "path": "/spec/sso", "value": {"provider": "keycloak", "resources": {"requests": {"cpu": "512m", "memory": "512Mi"}, "limits": {"cpu": "1024m", "memory": "1024Mi"}} }}]'
Red Hat OpenShift GitOps Operator によって作成された Keycloak は、Operator によって行われる変更のみを永続化します。Keycloak が再起動すると、管理者が Keycloak で作成した追加の設定はすべて削除されます。