コンテンツに移動
DevOps & SRE

Google Cloud 上の Pulumi CrossGuard でコードとしてのポリシーを実現する

2023年4月19日
Google Cloud Japan Team

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

Google Cloud におけるクラウド インフラストラクチャの作成とデプロイに、PulumiCrossGuard を使用する組織が増えています。この「Policy as Code(コードとしてのポリシー)」サービスでは、ガードレールを設定してリソースのコンプライアンスを強化できるため、ベスト プラクティスに準拠しながら独自のインフラストラクチャをプロビジョニングできるとともに、組織のセキュリティ コンプライアンスのベースラインを設定できます。

Pulumi を使用すれば、好みの言語(Python など)でコードを記述できるほか、「Infrastructure as code(コードとしてのインフラストラクチャ)」アプローチを使用して Google Cloud リソースを自動的にプロビジョニングして管理できます。

コードとしてのポリシーは、コードを使用してルールと条件を定義して管理するもので、ポリシーにはユーザーが適用する特定のロジックが含まれています。たとえば、誰でも読み取り可能な公開ストレージ バケットがクラウド ストレージ上に作成されないようにすることができます。ポリシーが Pulumi のデプロイの一環として実行されている場合、違反があればその更新の進行がブロックされます。

この投稿では、Pulumi を使用してインフラストラクチャを作成する際に、コードとしてのポリシーに対して CrossGuard を使用する方法をご紹介します。以下は、Google が対応している大まかなタスクのリストです。

  • Google Cloud リソース(Cloud Storage)をデプロイするための Pulumi プロジェクトの作成

  • CrossGuard に基づく簡単なポリシーの作成(Cloud Storage バケットに名前の接頭辞「my-」があるかどうかの確認)

  • Pulumi コードの検証でのポリシーの活用

前提条件

こちらの手順を参照してワークステーションを作成する

ワークステーションにアクセスし、ターミナルを起動する

Pulumi パッケージをダウンロードする(ここでは、デモ用に Pulumi v3.55.0 を使用します)

読み込んでいます...

チェックサムを確認する

読み込んでいます...

チェックサムの出力が以下と一致していれば、続行できます。

読み込んでいます...

tar パッケージを解凍する

読み込んでいます...

$HOME/pulumi/ を $PATH に追加する

読み込んでいます...

Pulumi がインストールされていることを確認する

読み込んでいます...

使ってみる

Pulumi プロジェクトを作成する

Pulumi プロジェクトでは Cloud Storage バケットが作成されます。

読み込んでいます...

このコマンドは、新規 Pulumi プロジェクトの作成手順を示すものです。

ここでは、すべての質問にデフォルトの値を使用します。

新規プロジェクトを確認する

生成されたプロジェクト ファイルを確認してみましょう。

  • __main__.py
    スタック リソースを定義する Pulumi プログラムです。

読み込んでいます...

「my-bucket」という名前の Cloud Storage バケットが Pulumi コードで定義されていることがわかります。

ポリシーパックを作成する

読み込んでいます...

ポリシーコードを調べてみましょう。

読み込んでいます...

自動生成されたポリシーは、Cloud Storage バケットの構成が publicRead または publicReadWrite であるかどうかを確認します。

生成されたポリシーを使用して Cloud Storage を検証する(Cloud Storage バケットの構成が publicRead と publicReadWrite のどちらでもないことを確認する)

ポリシーパックを作成したら、Cloud Storage を作成するために Pulumi コードを検証する必要があります。例として、Cloud Storage バケットの構成が publicRead と publicReadWrite のどちらでもないことを確認します。

読み込んでいます...

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_H9Q6TtS.max-1600x1600.png

出力から、ポリシー違反がないことがわかります。

CrossGuard でポリシーを作成する

次に、Cloud Storage バケットに接頭辞「my-」が付いているかどうかを確認する必要があります。

ポリシーコード(__main__.py)を編集する方法は次のとおりです。

読み込んでいます...

ポリシーを使用して Cloud Storage を検証する(Cloud Storage バケットに名前の接頭辞「my-」が付いていないことを確認する)

読み込んでいます...

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_lunLAOl.max-1800x1800.png

出力から、新規作成したポリシー(storage_bucket_name_prefix)に 1 つの違反があることがわかります。「my-bucket」という名前のバケットです。

次のステップ

上述の例では、CrossGuard を使用してポリシーを作成し、そのポリシーを検証することで、Google Cloud 上での Pulumi の更新提案が認められるか判断する方法をご紹介しました。この例は、作成前にすべてのリソースにタグがあることを確認する、リソースの命名基準に従っていることを確認する、セキュリティと運用の要件を満たすなど、他のユースケースにも適用できます。

インフラストラクチャのデプロイがポリシー定義に違反しているかどうかを早期に知ることは、有用である場合があります。インフラストラクチャ ライフサイクル ワークフローにポリシー評価を含めて、準拠していないリソースを作成するデプロイを失敗させることをおすすめします。Pulumi がサポートするコードとしてのインフラストラクチャ CI / CD パイプラインと CrossGuard を統合し、CrossGuard の出力を利用すれば、デプロイを自動的に失敗または成功させることができます。

まとめると、CrossGuard と Pulumi を使用すれば、Google Cloud 上にポリシードリブンのインフラストラクチャを構築し、制約やガードレールを適用することで、自信を持ってクラウド リソースを管理することができます。


- Google Cloud クラウド アーキテクト Xuejiao Zhang
投稿先