1732598909
2024-11-25 12:00:00
セキュリティと認証に関連する問題は、すべてのプラットフォームにとって不可欠です。 Google Cloud Platformも例外ではありません。セキュリティ ガバナンスを適切に管理し、CI/CD 経由で Gitlab などの外部環境から長期の認証情報を管理せずに Google リソースにアクセスするにはどうすればよいでしょうか?この記事の答えは…
JSON キーを生成するだけでは十分ではありません
Google のクラウド API に対する認証の通常の方法は、サービス アカウントのパスワードに似た JSON キーを生成し、それを「安全な」場所に保存することです。
私の経験から、十分に安全な場所は存在しないことが分かりました…特に、ある朝「緊急会議: サービス アカウントのパスワードがハッキングされました」というメールを受信した場合はそうです。さらに、これらのキーの保護、保存、配布、ローテーション、監視は面倒な作業となる可能性があるため、この方法はお勧めできません。
Google は、「」を介して認証するより良い方法を推奨しています。 Workload Identity フェデレーション”。そこで、セキュリティを向上させ、Google Cloud リソースへのアクセス管理を簡素化するために私が考える最も安全な方法を説明します。最後に、GitLab CI の OpenID Connect (OIDC) 統合について説明します。これを行うために、Gitlab CI/CD パイプラインとリソース間のやり取りを保護するためのシナリオを示します。 Workload Identity フェデレーション » Googleから。 Google Cloud サービス アカウント キーを Gitlab CI 変数に保存しないようにするため。
Workload Identity Federation による認証に重点を置く
まず、Wordkload Identity Federation を介して Google Cloud で Gitlab CI/CD パイプラインを実装し、Google Cloud リソースにアクセスします。
したがって、以下の内容は、Git でアプリケーションのバージョンを管理したい人、および/または Google Cloud などのインフラストラクチャ デプロイのために Terraform によってセットアップ (IAC) したい人すべてを対象としています。
要約すると、次のことがわかります。
- Workload Identity Federation の概念と、GCP コンポーネントと外部アプリケーション間の相互作用について説明します。
- GCP リソースにアクセスするための Workload Identity フェデレーションの構成。
- すべての Cloud Storage バケットをリストするための Gitlab での CI パイプラインの作成。
1. Workload Identity の概念


Wordload Identity は、セキュリティの向上を目的として Google が提供するメカニズムです。これを実現するために、Gitlab/GitHub/Cloud などの他のサービスで認証する可能性が提供されます。これにより、Identity and Access Management サービスを使用して Google サービスにアクセスできるようになります。
- このメカニズムにより、(変数に格納される従来のキーの場合のように) 有効期間の長い識別情報が不要になります。
- サービス アカウントの使用を活用することで、全体的なセキュリティが向上しました。
- 詳細なスコープ設定: Google と外部アプリケーションの間で、トークンと利用可能な権限の間の詳細な属性マッピングを定義できます。
- 有効期間の短い認証情報: 有効期間が制限されたトークンの使用 (認証情報は作成後 1 時間で自動的に期限切れになります)。
- 最小限の管理オーバーヘッド: シークレットを保存または管理する必要はありません。
Workload Identity プールとプロバイダー


- Workload Identity プール: 特定の Google Cloud プロジェクトにバインドし、すべてのアカウント サービス アカウントと外部 ID を ID システムとしてグループ化するコンテナとして。
- Workload Identity Provider (AWS プロバイダ、GiLab プロバイダ、GitHub プロバイダ): これは、外部サービスのユーザーの ID と Google Cloud サービスとの間の接続を確立するために、いくつかのセキュリティ ルールを含む ID プロバイダです。これにより、誰が何にアクセスできるかを管理しやすくなります。
言い換えれば、Workload Identity Provider は、Google Cloud 上の外部アプリケーションの統合を目的とした Google Workload Identity Pool の (IDP) です。
- セキュリティ トークン サービス: Google 認証情報に基づいて Google Cloud リソースにアクセスするための有効期間の短いトークンを生成するサービスです。
- サービス アカウント: Compute Engine インスタンスなどのアプリケーションまたはワークロードによって使用される、一意のメール アドレスで識別されるサービス アカウント(特定のアカウントを使用するよりも、サービス アカウントを使用する方が適切です)。
- Google Cloud リソース: コンピュータ、ハードドライブ、VM マシンなどの仮想リソースなどのコンポーネントのコレクションです。Google Cloud リソースには、プロジェクト、キーリング、ストレージ、ツールなどが含まれます。


- ワークロードは ID プロバイダーによって推定されます。
- (アイデンティティ プロバイダー) はアカウントの資格情報を送信します。
- WorkLoad は、資格情報を Goole サービス (セキュリティ トークン) に渡します。
- 情報がプール (Workload Identity プール) 内にある場合の情報の検証。
- 資格情報が有効かどうかを示す応答。
- アカウント サービス アカウントになりすます、Google にアクセスするためのトークンの送信 (短期)。
- 一時トークンを使用してサービス アカウントになりすます。
- Google Cloud リソースにアクセスします。
構成 Workload Identity フェデレーション
手順 1 : Workload Identity プールの作成
Workload Identity フェデレーションを使用すると、外部 ID を整理して管理できます。
GCP プロジェクトには複数のプールを含めることができ、それぞれのプールで複数の外部 ID プロバイダーとの統合が可能になります。これにより、プロジェクトごとに ID とコントロールのコレクションを作成できます。

gcloud iam workload-identity-pools create
–プロジェクト= » »
–location= »グローバル »
–display-name= »GitLab プロジェクト ID の Workload Identity プール »
: Google Cloud プロジェクトの ID。セキュリティを向上させるには、リソースや CI/CD プロジェクトとは別に、専用の ID 管理プロジェクトを使用します。 : プールに使用する ID
ステップ 2: プールプロバイダーの作成
プロバイダ: Google Cloud と ID プロバイダの関係を記述するエンティティです。たとえば、Gitlab は次の IDP です。 ワークロード ID プール。 これを Google Cloud に統合するには、属性マッピング レベルでプロバイダを構成する必要があります。 属性マッピング » Google 側で、ワークロードを Google Cloud にデプロイするために必要な IAM 承認を取得します。

gcloud iam workload-identity-pools プロバイダー create-oidc
–workload-identity-pool=
–issuer-uri= # 例 « https://gitlab.com »
–プロジェクト= »
–location= »グローバル »
–display-name= » 私の OIDC プロバイダー »
–attribute-mapping= »google.subject=assertion.sub »
属性マッピング : これにより、ID プロバイダから Google Cloud に渡される認証情報の属性がマッピングされます。これが属性マッピング ルールです。
google.subjet は、Google Cloud と Assertion.sub で使用される標準属性です。
サービスアカウント
サービス アカウントを作成し、必要なリソースにアクセスするために必要なロールと権限を定義します。
サービスアカウントの作成:
gcloud iam service-accounts create »my-service-account »
–project= »MY_PROJECT »
したがって、Gitlab CI/CD のデモに必要なストレージ管理者ロール「storage.admin」を付与します。
gcloud プロジェクト add-iam-policy-binding « MY_PROJECT »
–member= »serviceAccount:my-service-account@MY_PROJECT.iam.gserviceaccount.com »
–role= »roles/storage.admin »
最後に、サービス アカウントの偽装を使用して、ワークロードが Google リソースにアクセスすることを承認します。これは、サービス アカウント キーよりも安全であるためです。
gcloud iam service-accounts add-iam-policy-binding « my-service-account@MY_PROJECT.iam.gserviceaccount.com »
–project= »MY_PROJECT »
–role= »roles/iam.workloadIdentityUser »
— member= »principalSet://iam.googleapis.com/projects/MY_PROJECT_number/locations/global/workloadIdentityPools/MY_POOL/* »

例: Google Cloud の外部で実行される Gitlab での CI パイプラインの作成
一部の開発者はコードを実行してデプロイしたいと考えています テラフォーム Google Cloud 上にリソースを作成します。一方、特定の構成を実行するだけで済むものもあります。」 gクラウド”。どちらも GCP API を使用します。これらには認証と認可が必要です。
このパイプラインにより、インフラストラクチャ プロジェクトを統合し、産業化に向けたリソースやデータ プロジェクトを展開することが可能になります。
このデモでは、gcloud を使用して、コマンドを介して Google Cloud プラットフォームの既存のバケットからの情報を表示するソリューションを選択しました。 gsutil ls CI/CD Gitlab 経由
前の手順では、Workload Identity Federation で次のように構成しました。
- ワークロード ID プール
- ワークロード ID プールプロバイダー
- 必要な役割を持つサービス アカウント
ステップ 1: 空の Gitlab プロジェクトを作成するか、既存のプロジェクトを使用します。
ステップ 2: .gitlab.yml ファイルを作成します。

Google 環境に関する情報:

id_tokens をパイプラインに追加します。

ID トークンを使用して一時的な認証情報を取得します。

その後、結果のフェデレーション トークンを使用して、前のセクションで作成したサービス アカウントになりすますことができます。

その後、 gcloud storage ls コマンドを使用して Google Cloud リソースにアクセスし、Cloud Storage 内のバケットを表示できます。


パイプラインの実行後の結果:

Google Worklad Identity Federation したがって、これは推奨される安全なソリューションです。これは、運用ワークロードを軽減し、クラウドにおける IT 攻撃の主な原因の 1 つである JSON キーに関連するセキュリティ リスクを回避するのに役立ちます。
Worklad Federation Identity を統合することで、より優れたセキュリティ ガバナンスを実現しました。何よりも、堅牢で安全かつスケーラブルな導入戦略を導入することができました。これは導入プロセス全体に関係し、さまざまな環境での一貫性と信頼性も保証します。
#Google #Cloud #Platform #で適切に管理する方法