Skip to content

필사 모드: [ArgoCD] セキュリティモデル:認証、認可、シークレット管理

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

1. ArgoCDセキュリティアーキテクチャ概要

ArgoCDはKubernetes環境でGitOpsを実現するツールであり、クラスタとGitリポジトリへの広範なアクセス権限を保持します。したがってセキュリティはArgoCD運用の核心です。

セキュリティレイヤー

Layer 1: 認証 (Authentication)

- 誰がアクセスしているか?

- Local Users、SSO(OIDC/SAML/LDAP via Dex)

Layer 2: 認可 (Authorization)

- 何ができるか?

- RBACポリシー、AppProjectスコーピング

Layer 3: 資格情報管理 (Credential Management)

- Gitリポジトリ、クラスタアクセスの資格情報

- Kubernetes Secretsで安全に保存

Layer 4: シークレット管理 (Secret Management)

- アプリケーションシークレットの安全な処理

- Sealed Secrets、External Secrets、Vault

Layer 5: ネットワークセキュリティ (Network Security)

- TLS、Network Policy、アクセス制限

2. 認証(Authentication)

ローカルユーザー

ArgoCDは内蔵ユーザーアカウントを提供します:

argocd-cm ConfigMap

data:

accounts.alice: apiKey, login

accounts.bob: login

accounts.ci-bot: apiKey

| 機能 | 説明 |

| ------ | ------------------------------- |

| login | Web UIおよびCLIログイン可能 |

| apiKey | APIトークン生成可能(自動化用) |

SSO via Dex

DexはArgoCDに内蔵されたOIDC Identity Providerです:

data:

url: https://argocd.example.com

dex.config: |

connectors:

- type: github

id: github

name: GitHub

config:

clientID: YOUR_CLIENT_ID

clientSecret: $dex.github.clientSecret

orgs:

- name: my-org

teams:

- platform-team

- dev-team

OIDC直接連携(Dexなし)

Okta、Auth0、Keycloakなどと直接OIDC連携も可能です:

data:

oidc.config: |

name: Okta

issuer: https://my-org.okta.com/oauth2/default

clientID: YOUR_CLIENT_ID

clientSecret: $oidc.okta.clientSecret

requestedScopes:

- openid

- profile

- email

- groups

LDAP連携

data:

dex.config: |

connectors:

- type: ldap

id: ldap

name: LDAP

config:

host: ldap.example.com:636

insecureNoSSL: false

bindDN: cn=admin,dc=example,dc=com

bindPW: $dex.ldap.bindPW

userSearch:

baseDN: ou=users,dc=example,dc=com

filter: "(objectClass=person)"

username: uid

idAttr: uid

emailAttr: mail

nameAttr: cn

groupSearch:

baseDN: ou=groups,dc=example,dc=com

filter: "(objectClass=groupOfNames)"

userMatchers:

- userAttr: DN

groupAttr: member

nameAttr: cn

認証フロー

SSOログイン:

1. ユーザーがArgoCD UIにアクセス

2. 「Log in via SSO」をクリック

3. API Server -> Dex authorization endpointにリダイレクト

4. Dex -> 外部IdP(GitHub/Okta/LDAP)にリダイレクト

5. ユーザーが外部IdPで認証

6. IdP -> Dex callback URLにリダイレクト(認証コード)

7. Dexが認証コードでトークン交換

8. DexがID Tokenを生成(ユーザー情報 + グループ)

9. API ServerがID Tokenを検証

10. ArgoCD JWTを発行(グループ情報を含む)

11. JWTをブラウザCookieに保存

3. 認可(Authorization)- RBAC

RBACポリシー構造

ArgoCDはCasbinライブラリベースのRBACを使用します:

argocd-rbac-cm ConfigMap

data:

policy.default: role:readonly

policy.csv: |

管理者役割

p, role:admin, applications, *, */*, allow

p, role:admin, clusters, *, *, allow

p, role:admin, repositories, *, *, allow

p, role:admin, projects, *, *, allow

開発チーム役割

p, role:developer, applications, get, */*, allow

p, role:developer, applications, sync, */*, allow

p, role:developer, applications, action/*, */*, allow

p, role:developer, logs, get, */*, allow

読み取り専用役割

p, role:readonly, applications, get, */*, allow

p, role:readonly, projects, get, *, allow

CI/CDボット役割

p, role:ci-bot, applications, sync, ci-project/*, allow

p, role:ci-bot, applications, get, ci-project/*, allow

グループマッピング(SSOグループ -> ArgoCD役割)

g, platform-team, role:admin

g, dev-team, role:developer

g, viewers, role:readonly

g, ci-bot, role:ci-bot

scopes: '[groups, email]'

リソースとアクション

| リソース | アクション | 説明 |

| ------------ | ------------------------------------------------------ | ---------------- |

| applications | get, create, update, delete, sync, override, action/\* | Application管理 |

| clusters | get, create, update, delete | クラスタ管理 |

| repositories | get, create, update, delete | リポジトリ管理 |

| projects | get, create, update, delete | プロジェクト管理 |

| logs | get | Podログ閲覧 |

| exec | create | Pod exec実行 |

AppProject RBAC

AppProject内でより細かいRBACを適用できます:

apiVersion: argoproj.io/v1alpha1

kind: AppProject

metadata:

name: team-alpha

spec:

roles:

- name: deployer

description: 'デプロイ権限'

policies:

- p, proj:team-alpha:deployer, applications, sync, team-alpha/*, allow

- p, proj:team-alpha:deployer, applications, get, team-alpha/*, allow

groups:

- team-alpha-deployers

- name: viewer

description: '閲覧権限'

policies:

- p, proj:team-alpha:viewer, applications, get, team-alpha/*, allow

groups:

- team-alpha-viewers

4. リポジトリ資格情報管理

HTTPS資格情報

apiVersion: v1

kind: Secret

metadata:

name: repo-creds

namespace: argocd

labels:

argocd.argoproj.io/secret-type: repository

type: Opaque

stringData:

type: git

url: https://github.com/my-org/my-repo.git

username: git

password: ghp_XXXXXXXXXXXX

SSH資格情報

apiVersion: v1

kind: Secret

metadata:

name: repo-creds-ssh

namespace: argocd

labels:

argocd.argoproj.io/secret-type: repository

type: Opaque

stringData:

type: git

url: git@github.com:my-org/my-repo.git

sshPrivateKey: |

-----BEGIN OPENSSH PRIVATE KEY-----

...

-----END OPENSSH PRIVATE KEY-----

資格情報テンプレート

同じパターンの複数リポジトリに共通資格情報を適用:

apiVersion: v1

kind: Secret

metadata:

name: repo-creds-template

namespace: argocd

labels:

argocd.argoproj.io/secret-type: repo-creds

type: Opaque

stringData:

type: git

url: https://github.com/my-org

username: git

password: ghp_XXXXXXXXXXXX

5. クラスタ資格情報管理

最小権限原則の適用

本番環境ではcluster-adminの代わりに最小権限を適用します:

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

name: argocd-manager-minimal

rules:

- apiGroups: ['*']

resources: ['*']

verbs: ['get', 'list', 'watch']

- apiGroups: ['apps']

resources: ['deployments', 'statefulsets', 'daemonsets', 'replicasets']

verbs: ['get', 'list', 'watch', 'create', 'update', 'patch', 'delete']

- apiGroups: ['']

resources: ['services', 'configmaps', 'secrets', 'serviceaccounts', 'namespaces', 'pods']

verbs: ['get', 'list', 'watch', 'create', 'update', 'patch', 'delete']

- apiGroups: ['networking.k8s.io']

resources: ['ingresses', 'networkpolicies']

verbs: ['get', 'list', 'watch', 'create', 'update', 'patch', 'delete']

6. シークレット管理統合

Sealed Secrets

暗号化されたシークレットをGitに安全に保存:

apiVersion: bitnami.com/v1alpha1

kind: SealedSecret

metadata:

name: my-secret

namespace: default

spec:

encryptedData:

password: AgBy3i4OJSWK+...

template:

metadata:

name: my-secret

namespace: default

External Secrets Operator(ESO)

外部シークレット管理システムとの連携:

apiVersion: external-secrets.io/v1beta1

kind: SecretStore

metadata:

name: vault-backend

spec:

provider:

vault:

server: 'https://vault.example.com'

path: 'secret'

auth:

kubernetes:

mountPath: 'kubernetes'

role: 'argocd'

apiVersion: external-secrets.io/v1beta1

kind: ExternalSecret

metadata:

name: my-app-secrets

spec:

refreshInterval: 1h

secretStoreRef:

name: vault-backend

kind: SecretStore

target:

name: my-app-secrets

creationPolicy: Owner

data:

- secretKey: database-password

remoteRef:

key: my-app/database

property: password

7. ネットワークセキュリティ

TLS設定

data:

server.insecure: 'false'

reposerver.tls.minversion: '1.2'

Network Policy

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

name: argocd-server-policy

namespace: argocd

spec:

podSelector:

matchLabels:

app.kubernetes.io/name: argocd-server

policyTypes:

- Ingress

- Egress

ingress:

- from:

- namespaceSelector:

matchLabels:

name: ingress-nginx

ports:

- port: 8080

protocol: TCP

egress:

- to: []

8. 監査ログ

ArgoCD API Serverはすべてのユーザー操作をログに記録します。Prometheusメトリクスも公開されます:

argocd_app_sync_total: 総同期回数

argocd_app_info: アプリケーション状態情報

argocd_cluster_api_server_requests_total: クラスタAPIリクエスト数

9. セキュリティベストプラクティス

認証

- 本番環境ではSSOを必須に

- ローカルadminアカウントの無効化またはパスワード定期変更

- APIトークンに有効期限を設定

- MFA(多要素認証)を有効化

認可

- デフォルトポリシーを`role:readonly`に設定

- 最小権限原則の適用

- AppProjectでチーム別分離

- 本番ネームスペースのsync権限を制限

資格情報

- HTTPSトークンよりSSHキーを推奨

- トークンに最小スコープを適用

- 定期的な資格情報のローテーション

- クラスタアクセスに最小権限RBACを適用

シークレット

- 平文シークレットをGitに絶対に保存しない

- Sealed SecretsまたはExternal Secrets Operatorを使用

- シークレット変更時の自動ローテーションメカニズムを実装

ネットワーク

- すべての通信にTLSを適用

- Network PolicyでArgoCDコンポーネントへのアクセスを制限

- ArgoCD UIへのアクセスをVPNまたはIPホワイトリストで制限

10. まとめ

ArgoCDセキュリティモデルの核心要素:

1. **認証**:SSO(OIDC/SAML/LDAP via Dex) + ローカルユーザー

2. **認可**:Casbin RBAC + AppProjectスコーピング

3. **リポジトリ資格情報**:HTTPS/SSH Secretで安全に管理

4. **クラスタ資格情報**:ServiceAccount + 最小権限原則

5. **シークレット管理**:Sealed Secrets / ESO / AVP / SOPS

6. **ネットワークセキュリティ**:TLS + Network Policy

7. **監査**:API Serverログ + Prometheusメトリクス

これらのセキュリティレイヤーを適切に構成することで、安全なGitOps運用環境を構築できます。

현재 단락 (1/298)

ArgoCDはKubernetes環境でGitOpsを実現するツールであり、クラスタとGitリポジトリへの広範なアクセス権限を保持します。したがってセキュリティはArgoCD運用の核心です。

작성 글자: 0원문 글자: 7,302작성 단락: 0/298