クラウドサービスへの接続
GitLab CI/CDはOpenID Connect(OIDC)をサポートし、ビルドやデプロイジョブがクラウドの認証情報やサービスにアクセスできるようにします。これまで、チームはプロジェクトにシークレットを保存したり、GitLab Runnerインスタンスに権限を適用してビルドやデプロイを行っていました。OIDC 対応のID トークンはCI/CD ジョブで設定可能で、スケーラブルで最小権限のセキュリティアプローチに従うことができます。
GitLab 15.6以前では、IDトークンの代わりにCI_JOB_JWT_V2
。GitLab 14.6以前では、CI_JOB_JWT
を使用する必要がありますが、サポートに制限があります。
前提条件
- GitLabのアカウント。
- OIDCをサポートするクラウドプロバイダにアクセスし、作成者の設定やロールの作成ができること。
ID トークンは、以下のような OIDC をサポートするクラウドプロバイダーをサポートします:
- AWS
- Azure
- GCP
- ハシコープ金庫
ユースケース
- GitLabグループやプロジェクトにシークレットを保存する必要がなくなります。一時的な認証情報はOIDCを通してクラウドプロバイダーから取得できます。
- グループ、プロジェクト、ブランチ、タグなどGitLabの細かな条件でクラウドリソースへの一時的なアクセスを提供します。
- 環境に対する条件付きアクセスでCI/CDジョブの職務分掌を定義できます。歴史的に、アプリはステージング環境や本番環境にのみアクセスできる指定されたGitLab Runnerでデプロイされてきました。これは、各マシンが専用の権限を持っていたため、Runnerの乱立につながりました。
- 共有Runnerが安全に複数のクラウドアカウントにアクセスできるようにします。アクセスは、パイプラインを実行しているユーザーに固有のJWTトークンによって決定されます。
- デフォルトで一時的なクレデンシャルを取得することで、シークレットをローテーションするロジックを作成する必要がなくなります。
どのように動作するか
各ジョブは、トークンのペイロードを含むCI/CD変数として提供されるIDトークンで設定することができます。これらのJWTは、AWS、Azure、GCP、VaultなどのOIDCがサポートするクラウドプロバイダーとの認証に使用できます。
作成者のワークフロー
- クラウド(AWS、Azure、GCP、Vaultなど)にOIDC IDプロバイダを作成します。
- グループ、プロジェクト、ブランチ、またはタグにフィルタリングする条件付きロールをクラウドサービスで作成します。
- CI/CD ジョブには JWT トークンである ID トークンが含まれます。このトークンはクラウドAPIでの作成者の認証に使用できます。
- クラウドはトークンを検証し、ペイロードから条件ロールを検証し、一時的なクレデンシャルを返します。
OIDCクレームによる条件付きロールの設定
GitLabとOIDC間の信頼関係を設定するには、JWTをチェックする条件付きロールをクラウドプロバイダーに作成する必要があります。この条件はJWTに対して検証され、オーディエンスとサブジェクトの2つのクレームに対して特に信頼を作成します。
-
オーディエンスまたは
aud
:IDトークンの一部として設定:job_needing_oidc_auth: id_tokens: OIDC_TOKEN: aud: https://oidc.provider.com script: - echo $OIDC_TOKEN
-
Subject または
sub
:グループ、プロジェクト、ブランチ、タグを含む GitLab CI/CD ワークフローを記述するメタデータの連結。フィールドはsub
以下の形式です:project_path:{group}/{project}:ref_type:{type}:ref:{branch_name}
フィルタータイプ | 物件例 |
---|---|
メインブランチへのフィルター | project_path:mygroup/myproject:ref_type:branch:ref:main |
任意のブランチへのフィルタリング | ワイルドカード対応project_path:mygroup/myproject:ref_type:branch:ref:*
|
特定のプロジェクトへのフィルタリング | project_path:mygroup/myproject:ref_type:branch:ref:main |
グループ配下の全プロジェクトへのフィルタリング | ワイルドカード対応project_path:mygroup/*:ref_type:branch:ref:main
|
Git タグへのフィルタリング | ワイルドカード対応project_path:mygroup/*:ref_type:tag:ref:1.0
|
クラウドプロバイダーでのOIDC作成者
クラウドプロバイダーと接続するには、以下のチュートリアルを参照してください: