このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
Argo CD プロジェクトを操作する
Argo CD プロジェクト (AppProject) では、アプリケーションを論理的にグループ化して、アクセスコントロールを付与できます。プロジェクトは、アプリケーションが使用できる Git リポジトリ、ターゲットクラスター、名前空間を定義して、共有 Argo CD インスタンスにマルチテナンシーとセキュリティの境界を確立します。
どのような場合にプロジェクトを使用するか
プロジェクトを使用すると、以下のことが行えます。
-
チーム、環境、またはビジネスユニットごとにアプリケーションを分離します。
-
チームがどのリポジトリからデプロイできるかを制限します。
-
チームがどのクラスターと名前空間にデプロイできるかを制限します。
-
リソースクォータと許可されたリソースタイプを適用します。
-
ガードレールに沿ってセルフサービスアプリケーションをデプロイします。
デフォルトプロジェクト
すべての Argo CD 機能に default プロジェクトがあり、すべてのリポジトリ、クラスター、名前空間へのアクセスを許可する設定になっています。初期テストには有用ですが、本番稼働に使用する場合は制限を明記した専用のプロジェクトを作成します。
デフォルトプロジェクトの設定とその制限方法の詳細については、Argo CD ドキュメントの「デフォルトプロジェクト
プロジェクトの作成
プロジェクトを作成するには、クラスターに AppProject リソースを適用します。
例: チーム固有のプロジェクト
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: description: Applications for Team A # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' - 'https://github.com/my-org/shared-libs' # Source namespaces (required for EKS capability) sourceNamespaces: - argocd - team-a-dev - team-a-prod # Destination clusters and namespaces destinations: - name: dev-cluster namespace: team-a-dev - name: prod-cluster namespace: team-a-prod # Allowed resource types clusterResourceWhitelist: - group: '' kind: Namespace namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap
プロジェクトを適用します。
kubectl apply -f team-a-project.yaml
プロジェクトの設定
ソースリポジトリ
このプロジェクトのアプリケーションが使用できる Git リポジトリを制御します。
spec: sourceRepos: - 'https://github.com/my-org/app-*' # Wildcard pattern - 'https://github.com/my-org/infra' # Specific repo
ワイルドカードと否定パターン (! プレフィックス) を使用すると、特定のリポジトリを許可または拒否できます。詳細については、Argo CD ドキュメントの プロジェクトの管理
ソース名前空間
EKS Argo CD 機能を使用する場合は、カスタム AppProject 定義に spec.sourceNamespaces フィールドが 必要 です。このフィールドは、このプロジェクトを参照するアプリケーションまたは ApplicationSet を含めることができる名前空間を指定します。
重要
これは EKS Argo CD 機能の必須フィールドです。このフィールドがオプションである OSS Argo CD とは異なります。
デフォルトの AppProject の動作
default AppProject には、sourceNamespaces の argocd 名前空間が自動的に含まれます。追加の名前空間でアプリケーションまたは ApplicationSets を作成する必要がある場合は、sourceNamespaces フィールドを変更してそれらの名前空間を追加します。
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: default namespace: argocd spec: sourceNamespaces: - argocd # Already included by default - team-a-apps # Add additional namespaces as needed - team-b-apps
カスタム AppProject の設定
カスタム AppProject を作成するときは、argocd システム名前空間と、アプリケーションまたは ApplicationSets を作成する予定のその他の名前空間を手動で含める必要があります。
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a-project namespace: argocd spec: description: Applications for Team A # Required: Manually specify all namespaces sourceNamespaces: - argocd # ArgoCD system namespace (required) - team-a-dev # Custom namespace for dev Applications - team-a-prod # Custom namespace for prod Applications # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' # Destination restrictions destinations: - namespace: 'team-a-*' server: https://kubernetes.default.svc
注記
sourceNamespaces から名前空間を省略した場合、その名前空間で作成されたアプリケーションまたは ApplicationSets はこのプロジェクトを参照できなくなり、デプロイが失敗します。
送信先の制限
アプリケーションがデプロイできる場所を制限します。
spec: destinations: - name: prod-cluster # Specific cluster by name namespace: production - name: '*' # Any cluster namespace: team-a-* # Namespace pattern
重要
本番稼働のプロジェクトでは、ワイルドカードではなく、特定のクラスター名と名前空間パターンを使用します。これにより、不正なクラスターや名前空間が偶発的にデプロイされるのを防ぐことができます。
ワイルドカードと否定パターンを使用して、送信先を制御できます。詳細については、Argo CD ドキュメントの「プロジェクトの管理
リソースの制限
どの Kubernetes リソースタイプをデプロイできるかを制御します。
クラスター範囲のリソース:
spec: clusterResourceWhitelist: - group: '' kind: Namespace - group: 'rbac.authorization.k8s.io' kind: Role
名前空間範囲のリソース:
spec: namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap - group: 's3.services.k8s.aws' kind: Bucket
ブラックリストを使用して、特定のリソースを拒否します。
spec: namespaceResourceBlacklist: - group: '' kind: Secret # Prevent direct Secret creation
プロジェクトにアプリケーションを割り当てる
アプリケーションを作成するときは、spec.project フィールドにプロジェクトを指定します。
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: project: team-a # Assign to team-a project source: repoURL: https://github.com/my-org/my-app path: manifests destination: name: prod-cluster namespace: team-a-prod
アプリケーションにプロジェクトを指定しないと、default プロジェクトが使用されます。
プロジェクトのロールと RBAC
プロジェクトでは、カスタムロールを定義して、アクセスコントロールをきめ細かく設定できます。機能設定でプロジェクトのロールを AWS アイデンティティセンターのユーザーとグループにマッピングすると、アプリケーションを同期、更新、または削除できるユーザーを制御できます。
例: プロジェクトに開発者ロールと管理者ロールを付与する
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: sourceRepos: - '*' destinations: - name: '*' namespace: 'team-a-*' roles: - name: developer description: Developers can sync applications policies: - p, proj:team-a:developer, applications, sync, team-a/*, allow - p, proj:team-a:developer, applications, get, team-a/*, allow groups: - team-a-developers - name: admin description: Admins have full access policies: - p, proj:team-a:admin, applications, *, team-a/*, allow groups: - team-a-admins
プロジェクトのロール、CI/CD パイプラインの JWT トークン、および RBAC 設定の詳細については、Argo CD ドキュメントの「プロジェクトのロール
一般的なパターン
環境ベースのプロジェクト
環境ごとにプロジェクトを作成します。
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/*' destinations: - name: prod-cluster namespace: '*' # Strict resource controls for production clusterResourceWhitelist: [] namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service
チームベースのプロジェクト
専用のプロジェクトでチームを分離します。
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: platform-team namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/platform-*' destinations: - name: '*' namespace: 'platform-*' # Platform team can manage cluster resources clusterResourceWhitelist: - group: '*' kind: '*'
マルチクラスターのプロジェクト
ポリシーに一貫性のある複数のクラスターにデプロイします。
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: global-app namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/global-app' destinations: - name: us-west-cluster namespace: app - name: eu-west-cluster namespace: app - name: ap-south-cluster namespace: app
ベストプラクティス
制限のあるプロジェクトから始める: 最初から幅広いアクセスを付与するのではなく、絞り込んだアクセス許可から始め、必要に応じて拡張します。
名前空間パターンを使用する: 名前空間の制限 (team-a-* など) にワイルドカードを活用して、境界を維持しながら柔軟性を確保します。
本番稼働用のプロジェクトを分離する: 本番稼働専用のプロジェクトを使用する場合は、制御を厳格にし、手動同期ポリシーを実施します。
プロジェクトの目的を文書化する: description フィールドを使用して、各プロジェクトの目的と誰が使用すべきかを説明します。
プロジェクトのアクセス許可を定期的に見直す: プロジェクトを定期的に監査して、制限がチームのニーズとセキュリティ要件に沿っていることを確認します。
その他のリソース
-
Argo CD アクセス許可を設定する - RBAC とアイデンティティセンターとの統合を設定する
-
Application を作成する - プロジェクト内にアプリケーションを作成する
-
ApplicationSet を使用する - プロジェクトで ApplicationSet を使用してマルチクラスターデプロイを実施する
-
Argo CD プロジェクトドキュメント
- 詳細なアップストリームリファレンス