コンテンツに移動
アイデンティティとセキュリティ

GitHub Actions からのキーなしの認証の有効化

2021年12月21日
https://storage.googleapis.com/gweb-cloudblog-publish/original_images/1_GitHub_Actions.jpg
Google Cloud Japan Team

GCP を試す

$300 分の無料クレジットと 20 以上の無料プロダクトがある Google Cloud で構築を始めよう

無料トライアル

※この投稿は米国時間 2021 年 12 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。

GitHub Actions は Google Cloud の多くのお客様とデベロッパーの間で人気があるサードパーティ CI / CD ソリューションです。GitHub Actions ワークフローで Google Cloud 上でのリソースの読み取りや変更が必要な場合(Artifact Registry へのコンテナの公開や Cloud Run での新しいサービスのデプロイなど)、最初に認証をしなくてはなりません。

GitHub Actions から Google Cloud への従来の認証では、有効期間が長い JSON サービス アカウント キーのエクスポートと保存が必要でした。よって、ID 管理をするためにシークレット管理も必要でした。これは、サービス アカウント キー漏洩時のセキュリティ リスクの増大をもたらすだけではありません。デベロッパーの組織が、組織ポリシーの制約(constraints/iam.disableServiceAccountKeyCreation など)により、一般的なセキュリティのベスト プラクティスとしてサービス アカウント キーの作成を無効にした場合、デベロッパーが GitHub Actions から Google Cloud に認証できなくなることも意味します。

しかし今は、GitHub が GitHub Actions ワークフローに OIDC トークンを導入したため、Workload Identity 連携を使用して GitHub Actions から Google Cloud に認証できるようになりました。そして、有効期間が長い JSON サービス アカウント キーのエクスポートも不要になりました。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_GitHub_Actions.max-1100x1100.jpg
  • 詳細なスコープ Workload Identity プールとプロバイダは、OIDC トークンと Google Cloud で利用可能な権限の間に詳細な属性マッピングを定義できます。JSON サービス アカウント キーはアクセス可能とアクセス不能のいずれかである一方、Workload Identity 連携は、ダウンストリームの OIDC トークンのプロパティに基づいて認証を選択的に許可するように構成できます。GitHub Actions の場合は、たとえば、特定のリポジトリ、ユーザー名、ブランチ名、パブリッシュされたクレームに認証を制限できます。また、CEL を使用して、より複雑で複合的な制約を組み合わせて構築できます。

  • 有効時間が短い認証情報 JSON サービス アカウント キーと異なり、Workload Identity 連携は有効時間の短い OAuth 2.0 または JWT 認証情報を生成します。デフォルトでは、これらの認証情報は作成から 1 時間後に自動的に期限が切れます。これにより、悪意のある人物が不正使用された認証情報を利用できる時間を潜在的に短縮します。

  • 最小限の管理オーバーヘッド JSON サービス アカウント キーは、安全に保存、ローテーション、管理する必要があります。これには、たとえ小規模であっても労力を要し、エラーも発生しやすい傾向にあります。Workload Identity 連携は有効時間の短い認証情報を使用するため、最初の構成以外にローテーションや管理の必要なシークレットは存在しません。

新しい GitHub Action – auth

Workload Identity 連携による Google Cloud への GitHub Actions ワークフローの認証と承認のプロセスを容易にするため、新しい GitHub Action の auth をご用意しました。auth アクションが、増大を続ける Google GitHub Actions コレクションに加わり、Google Cloud への認証の設定と構成をシンプルにします。

読み込んでいます...

読み込んでいます...

アプリケーションのデフォルト認証情報をサポートしていないサードパーティのツールを使用している場合や、Google Cloud API を curl で手動で呼び出す場合、auth GitHub Action は、今後のステップでの使用のために、OAuth 2.0 トークンと JWT を作成できます。次の例では、有効時間の短い OAuth 2.0 アクセス トークンを作成し、そのトークンを使用して、Google Secret Manager から curl でシークレットにアクセスします。

読み込んでいます...

移行を簡単にして、以前のワークフローをサポートするため、auth GitHub Action は、Google Cloud サービス アカウント キー JSON ファイルによる認証にも対応しています。

読み込んでいます...

auth GitHub Action の詳細と例を google-github-actions/auth でご確認ください。

GitHub Actions の ID 連携の設定

新しい GitHub Actions auth アクションを使用するには、Workload Identity プールと Workload Identity プロバイダを作成して Workload Identity 連携を設定および構成する必要があります。

読み込んでいます...

属性マッピングは、GitHub Actions JWT のクレームを、リクエストについて行うことのできるアサーションにマップします(リポジトリや GitHub Action を呼び出すプリンシパルの GitHub ユーザー名など)。これらを使用して、--attribute-condition フラグで認証をさらに制限できます。たとえば、属性の repository 値をマップして、認証を特定のリポジトリに制限するためにこの値を後で使用することができます。

読み込んでいます...

最後に、Workload Identity プロバイダからの認証について、目的のサービス アカウントの権限の借用を許可します。

読み込んでいます...

その他の構成オプションについては、Workload Identity 連携ドキュメントをご覧ください。Terraform を使用してインフラストラクチャのプロビジョニングを自動化している場合は、GitHub OIDC Terraform モジュールもご確認ください。

「見えないセキュリティ」に向けて

長期間有効な JSON サービス アカウント キーを使用せずに GitHub Action から Google Cloud に認証することは、魔法のように見えるかもしれません。しかしこれは、「見えないセキュリティ」を実現し Google のプラットフォームをデフォルトで保護するという、Google Cloud の現在の取り組みを集約するものです。GitHub Actions で長期間有効な JSON サービス アカウント キーに代わり Workload Identity 連携を使用することで、セキュリティと監査対応力が向上します。

はじめに、auth GitHub Action を今すぐご覧ください。


- デベロッパー アドボケイト兼プロダクト マネージャー Seth Vargo

- ソリューション アーキテクト Bharath Baiju

投稿先