このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
Argo CD に関する考慮事項
このトピックでは、EKS Capability for Argo CD を使用する際の重要な考慮事項を示します。具体的には、計画、アクセス許可、認証、マルチクラスターデプロイパターンなどです。
計画
Argo CD をデプロイする前に、以下の点を考慮してください。
リポジトリ戦略: アプリケーションマニフェストの保存場所を決定します (CodeCommit、GitHub、GitLab、Bitbucket)。異なる環境ごとにリポジトリ構造と分岐戦略を計画します。
RBAC 戦略: どのチームやユーザーが管理者、編集者、またはビューワーのアクセス権を持つべきかを計画します。これらを AWS アイデンティティセンターグループまたは Argo CD ロールにマッピングします。
マルチクラスターアーキテクチャ: 単一の Argo CD インスタンスから複数のクラスターを管理するかどうかを決定します。Argo CD に専用の管理クラスターを使用することを検討してください。
Application の編成: Application と ApplicationSet をどのように構造化するかを計画します。Project を使用してチームや環境ごとに Application を編成することを検討してください。
同期ポリシー: アプリケーションを自動的に同期するか、手動で承認するかを決定します。開発環境では自動同期が一般的ですが、本番稼働環境では手動で同期します。
アクセス許可
IAM 機能ロール、信頼ポリシー、セキュリティベストプラクティスの詳細については、「Amazon EKS 機能 IAM ロール」および「EKS 機能のセキュリティに関する考慮事項」を参照してください。
IAM 機能ロールの概要
Argo CD 機能リソースを作成するときに、IAM 機能ロールを指定できます。ACK とは異なり、Argo CD は主に Kubernetes リソースを管理し、AWS リソースを直接には管理しません。一方、次の場合には IAM 機能ロールが必要です。
-
CodeCommit でプライベート Git リポジトリにアクセスする場合
-
認証のために AWS アイデンティティセンターと統合する場合
-
AWS Secrets Manager でシークレットにアクセスする場合 (設定されている場合)
-
他の EKS クラスターにクロスクラスターでデプロイする場合
CodeCommit 統合
CodeCommit リポジトリを使用している場合は、読み取りアクセス許可を付与したポリシーをアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" } ] }
重要
本番稼働で使用する場合は、"*" を使用する代わりに、Resource フィールドを特定のリポジトリ ARN に制限します。
例:
"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"
これにより、Argo CD 機能のアクセスが要管理のリポジトリにのみ制限されます。
Secrets Manager の統合
Secrets Manager にリポジトリ認証情報を保存する場合は、読み取りアクセスのマネージドポリシーをアタッチします。
arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess
このポリシーには、secretsmanager:GetSecretValue、secretsmanager:DescribeSecret、および KMS 復号アクセス許可という必要なアクセス許可が含まれています。
基本セットアップ
基本的な Argo CD 機能にパブリック Git リポジトリがある場合、信頼ポリシー以外に追加の IAM ポリシーは必要ありません。
認証
AWS アイデンティティセンターの統合
Argo CD マネージド機能を AWS アイデンティティセンター (以前の AWS SSO) と直接統合すると、認証に既存の ID プロバイダーを使用できます。
AWS アイデンティティセンター統合を設定した場合:
-
ユーザーは、EKS コンソールから Argo CD UI にアクセスします。
-
AWS アイデンティティセンターを使用してユーザーが認証されます (社内の ID プロバイダーにフェデレーションできます)。
-
AWS アイデンティティセンターは、ユーザーとグループの情報を Argo CD に提供します。
-
Argo CD は、現在の設定に基づいてユーザーとグループを RBAC ロールにマッピングします。
-
ユーザーには、自分がアクセス許可を持つアプリケーションとリソースのみが表示されます。
アイデンティティセンターアクセス許可セットでアクセスをシンプルにする
AWS アイデンティティセンターでは、Argo CD を使用する際に以下の 2 種類の認証パスを利用できます。
Argo CD API 認証: アイデンティティセンターにより、Argo CD UI と API から SSO 認証を行うことができます。これを設定するには、Argo CD 機能の RBAC ロールマッピングを使用します。
EKS クラスターアクセス: Argo CD 機能は、お客様提供の IAM ロールを使用して、アクセスエントリを基に EKS クラスターで認証します。こうしたアクセスエントリは、アクセス許可を追加または削除するように手動で設定できます。
アイデンティティセンターアクセス許可セットを使用すると、単一の ID で Argo CD クラスターと EKS クラスターの両方にアクセスできるため、ID 管理がシンプルになります。Argo CD アクセス用とクラスターアクセス用の認証情報を別々に維持するのではなく、両方のシステムで 1 つの ID だけを管理すればよいので、オーバーヘッドが軽減されます。
RBAC ロールマッピング
Argo CD には、AWS アイデンティティセンターのユーザーとグループにマッピングできるロールが組み込まれています。
ADMIN: すべてのアプリケーションと設定にフルアクセスできます。アプリケーションの作成、デプロイ、更新、削除が可能です。Argo CD の設定を管理できます。
EDITOR: アプリケーションを作成および変更できます。Argo CD の設定を変更したり、アプリケーションを削除したりすることはできません。
VIEWER: アプリケーションに読み取り専用でアクセスできます。アプリケーションのステータスおよび履歴を表示できます。変更を加えることはできません。
注記
ロール名は、大文字と小文字が区別され、大文字 (ADMIN、EDITOR、VIEWER) にする必要があります。
重要
EKS 機能と AWS アイデンティティセンターが統合されている場合、Argo CD 機能あたり最大 1,000 個の ID がサポートされます。ユーザーやグループを ID にすることができます。
マルチクラスターデプロイ
Argo CD マネージド機能は、マルチクラスターデプロイをサポートしているため、単一の Argo CD インスタンスから開発、ステージング、本番稼働のクラスター全体にわたってアプリケーションを管理できます。
マルチクラスターの仕組み
Argo CD に追加でクラスターを登録する場合:
-
ARN でターゲット EKS クラスターを参照するクラスターシークレットを作成します。
-
ターゲットが異なるクラスターごとに Application または ApplicationSet を作成します。
-
Argo CD は、各クラスターに接続してデプロイし、リソースを監視する
-
単一の Argo CD UI からすべてのクラスターを表示して管理します。
マルチクラスターの前提条件
追加でクラスターを登録する前に:
-
ターゲットクラスターで Argo CD 機能ロールのアクセスエントリを作成すること
-
Argo CD 機能とターゲットクラスターとの間にネットワーク接続を確保すること
-
ターゲットクラスターにアクセスするための IAM アクセス許可を検証すること
クラスターを登録する
Kubernetes シークレットを使用して argocd 名前空間にクラスターを登録します。
ターゲットクラスター ARN を取得します。region-code はターゲットクラスターがある AWS リージョンに置き換え、my-cluster はターゲットクラスターの名前に置き換えます。
aws eks describe-cluster \ --regionregion-code\ --nametarget-cluster\ --query 'cluster.arn' \ --output text
クラスター ARN を使用して、クラスターシークレットを作成します。
apiVersion: v1 kind: Secret metadata: name: target-cluster namespace: argocd labels: argocd.argoproj.io/secret-type: cluster type: Opaque stringData: name: target-cluster server: arn:aws:eks:us-west-2:111122223333:cluster/target-cluster project: default
重要
Kubernetes API サーバー URL ではなく、server フィールドで EKS クラスター ARN を使用します。マネージド機能では、ARN でターゲットクラスターを識別する必要があります。
シークレットを適用します。
kubectl apply -f cluster-secret.yaml
ターゲットクラスターでアクセスエントリを設定する
アプリケーションのデプロイに必要なアクセス許可を Argo CD 機能ロールに付与するには、ターゲットクラスターでアクセスエントリを設定する必要があります。region-code はターゲットクラスターがある AWS リージョンに置き換え、target-cluster はターゲットクラスターの名前に置き換え、ARN は Argo CD 機能ロール ARN に置き換えます。
aws eks create-access-entry \ --regionregion-code\ --cluster-nametarget-cluster\ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole\ --type STANDARD \ --kubernetes-groups system:masters
注記
本番稼働で使用する場合は、system:masters ではなくより制限の厳しい Kubernetes グループを使用することを検討してください。
プライベートクラスターアクセス
Argo CD マネージド機能では、VPC ピアリングや特殊なネットワーク設定を施すことなく、完全にプライベートな EKS クラスターにデプロイできます。AWS が Argo CD 機能とプライベートリモートクラスターとの接続を自動的に管理します。リポジトリのアクセスコントロールと Argo CD RBAC ポリシーが正しく設定されていることを確認します。
クロスアカウントデプロイ
クロスアカウントデプロイの場合は、ソースアカウントの Argo CD IAM 機能ロールをターゲットクラスターの EKS アクセスエントリに追加します。
-
ターゲットアカウントでは、ターゲット EKS クラスターにアクセスエントリを作成します。
-
ソースアカウントの Argo CD IAM 機能ロール ARN をプリンシパルとして使用します。
-
アクセスエントリに適切な Kubernetes RBAC アクセス許可を設定します。
-
EKS クラスター ARN を使用して Argo CD にターゲットクラスターを登録します。
追加で IAM ロールを作成したり、信頼ポリシーを設定したりする必要はありません。EKS アクセスエントリがクロスアカウントアクセスを処理します。
ベストプラクティス
宣言型ソースを信頼できるソースとして使用する: すべてのアプリケーションマニフェストを宣言型ソース (Git リポジトリ、Helm レジストリ、または OCI イメージ) に保存して、バージョン管理、監査証跡、およびコラボレーションを有効にできます。
適切な RBAC を実装する: AWS アイデンティティセンター統合を使用すると、Argo CD でアプリケーションにアクセスして管理できるユーザーを制御できます。Argo CD では、Application 内のリソース (デプロイ、ポッド、ConfigMap、シークレット) へのアクセスをきめ細かく制御できます。
マルチ環境デプロイに ApplicationSet を使用する: ApplicationSet を使用すると、設定が異なる複数のクラスターまたは名前空間にアプリケーションをデプロイできます。
ライフサイクル管理
アプリケーション同期ポリシー
Argo CD によるアプリケーション同期の方法を制御します。
手動同期: アプリケーションで変更を同期するには、手動承認が必要です。本番稼働環境に推奨されます。
自動同期: Git での変更が検出されると、アプリケーションが自動的に同期します。開発環境とステージング環境でよく使用されます。
自己修復: クラスターに手動で加えられた変更を自動的に元に戻します。クラスターの状態が Git と一致するようになります。
プルーニング: Git から除去されたリソースを自動的に削除します。リソースを削除できるため、使用には注意が必要です。
アプリケーションのヘルス
Argo CD は、アプリケーションのヘルスを継続的にモニタリングします。
-
正常: すべてのリソースが想定どおりに動作しています。
-
進行中: リソースは作成中または更新中です。
-
低下: 一部のリソースが正常ではありません。
-
中断: アプリケーションが一時停止しています。
-
欠落: クラスターにリソースがありません。
同期期間
同期期間を設定して、どのような場合にアプリケーションを同期できるかを制御します。
-
メンテナンス期間中にのみ同期を許可します。
-
営業時間中の同期をブロックします。
-
特定の時間に自動同期をスケジュールします。
-
変更を行い、同期を停止する必要がある状況で同期ウィンドウを使用する (ブレークグラスシナリオ)
ウェブフックを設定して同期を高速化する
デフォルトでは、Argo CD は 6 分ごとに Git リポジトリをポーリングして変更がないか検出します。デプロイの応答性を高めるには、変更がプッシュされたらすぐに同期をトリガーするように Git ウェブフックを設定します。
ウェブフックには、次のような利点があります。
-
コードがプッシュされたらすぐに同期応答が返されます (秒か分かの違い)
-
ポーリングのオーバーヘッドが軽減され、システムのパフォーマンスが向上します。
-
API レートリミットをより効率的に使用できます。
-
フィードバックがすぐに返されるので、ユーザーエクスペリエンスが向上します。
ウェブフックエンドポイント
ウェブフック URL はパターン ${serverUrl}/api/webhook に従います。ここでは、Argo CD サーバー URL は serverUrl です。
例えば、Argo CD サーバー URL が https://abc123.eks-capabilities.us-west-2.amazonaws.com の場合、ウェブフック URL は次のようになります。
https://abc123.eks-capabilities.us-west-2.amazonaws.com/api/webhook
Git プロバイダーでウェブフックを設定する
GitHub: リポジトリ設定に、Argo CD ウェブフック URL と共にウェブフックを追加します。コンテンツタイプを application/json に設定し、「Just the push event」を選択します。
GitLab: Project 設定に、Argo CD ウェブフック URL と共にウェブフックを追加します。「Push events」とオプションで「Tag push events」を有効にします。
Bitbucket: リポジトリ設定に、Argo CD ウェブフック URL と共にウェブフックを追加します。トリガーとして「Repository push」を選択します。
CodeCommit: Amazon EventBridge に、CodeCommit リポジトリの状態が変化したらトリガーして、Argo CD ウェブフックエンドポイントに通知を送信するというルールを作成します。
ウェブフック設定の詳細な手順については、「Argo CD ウェブフック設定
注記
ウェブフックは、ポーリングを補完するものであり、ポーリングに置き換わるものではありません。Argo CD は、ウェブフック通知が見逃された場合に備えて、フォールバックメカニズムとしてリポジトリを継続的にポーリングします。
次のステップ
-
Argo CD の使用 - Argo CD Application を作成および管理する方法を学ぶ
-
Argo CD 機能に関する問題をトラブルシューティングする - Argo CD の問題をトラブルシューティングする
-
機能リソースの使用 - Argo CD 機能リソースを管理する