Google Cloud をアセットインベントリに接続する
Google Cloud コネクタは、Google Cloud プロジェクトのインターネット公開リソースを読み取り、Ostorlab のアセットインベントリに保持します。 これにより、アタックサーフェスの一部としてスキャンや追跡ができます。必要なのは読み取りアクセスのみです。
コネクタは何を収集しますか?
すべて Cloud Asset Inventory を通じて、プロジェクトごとに読み取ります。プライベートアドレスは除外されます。
| リソース | 保持される内容 |
|---|---|
| Compute Engine インスタンス | 外部 IPv4 または IPv6 アドレスを持つインスタンス |
| 予約済みアドレス | リージョンおよびグローバルの外部アドレス |
| 転送ルール | 外部ロードバランシングスキームを持つリージョンおよびグローバルのルール |
| Cloud DNS | パブリックのマネージドゾーンとそのレコードセット (ワイルドカードレコードは除外) |
インポートされるのは上記のリソースのみです。Cloud Run、Cloud Functions、GKE などのサービスは収集されません。
各プロジェクトは、そのプロジェクトの他のノードの親となるクラウドノードになります。リソースが公開するパブリック IP アドレスとホスト名は、 通常の IP アセットおよびドメインアセットになり、プラットフォームの他の機能でスキャンできます。
始める前に必要なものは?
- インテグレーションを含む Ostorlab のプラン。 含まれていない場合、Ostorlab は「Your organisation does not have the necessary permissions to run this integration.」と応答します。
- サービスアカウントをホストするプロジェクトの ID (表示名ではなくプロジェクト ID)。
- そのプロジェクトの所有者として認証された
gcloud(例: Cloud Shell)。組織全体のコネクタの場合は、組織の所有者でもある必要があります。 - 組織全体のコネクタの場合は、数値の組織 ID。
- インポートされるアセットの Ostorlab 所有者。 必要に応じて事前に作成してください。
Google Cloud でアクセスを設定する
Library > Integrations を開き、クラウド カテゴリを選択して、Google Cloud カードを選びます。設定タブは ステップ 1: Google Cloud プロジェクトを準備する から始まります。

2 つのダウンロードボタンはどちらも ostorlab-gcp-connector.sh という名前のファイルを提供します。権限借用版とキー版は、最後のステップを除いて同一です。サービスアカウントの権限借用を推奨します。キーが組織外に出ることはありません。

オプション 1: サービスアカウントの権限借用 (推奨)
- ステップ 1 で サービスアカウントの権限借用: セットアップファイルをダウンロード をクリックします。使用するパラメータ ブロックには、Ostorlab が組織用に作成するサービスアカウント
ostorlab_service_accountと、スクリプトが付与するrolesが表示されます。 -
Cloud Shell を開いてスクリプトをアップロードし、1 つのプロジェクトに対して実行します。
PROJECT_ID=<project id> bash ostorlab-gcp-connector.sh組織のすべてのプロジェクトを読み取るには、組織レベルでロールを付与します。
ORGANIZATION_ID=<organization id> PROJECT_ID=<project id> bash ostorlab-gcp-connector.sh -
スクリプトがサービスアカウントのメールアドレス
ostorlab-cloud-connector@<project id>.iam.gserviceaccount.comを表示します。これをコピーします。
スクリプトは次の処理を行います。
- プロジェクトで API
cloudresourcemanager.googleapis.com、cloudasset.googleapis.com、iamcredentials.googleapis.comを有効にします (それ以外は有効にしません)。 - プロジェクトにサービスアカウント
ostorlab-cloud-connectorを作成します。 - プロジェクトまたは組織で、
roles/cloudasset.viewerとroles/browserを付与します。 - Ostorlab のサービスアカウント (
ostorlab_service_account) に、新しいサービスアカウントに対するロールroles/iam.serviceAccountTokenCreatorを付与し、キーなしで Ostorlab が権限を借用できるようにします。
スクリプトは再実行しても安全です。サービスアカウントが存在する場合は再利用し、Google が新しいアカウントを反映するまで再試行します。
オプション 2: サービスアカウントキー
権限借用を使えない場合に使用します。
- ステップ 1 で サービスアカウントキー: セットアップファイルをダウンロード をクリックします。
- Cloud Shell で上記と同じコマンドを実行します。トークン作成者の付与の代わりに、スクリプトが JSON キーファイル
ostorlab-cloud-connector-key.jsonを作成します。 - ファイル全体の内容をコネクタフォーム用にコピーし、その後マシンからファイルを削除します。
-
キーをローテーションするには、スクリプトを再実行し、コネクタを新しいキーで更新します。その後、キーを一覧表示して以前のキーの ID を確認し、削除します。スクリプトが古いキーを削除することはありません。
gcloud iam service-accounts keys list --iam-account <service account email> gcloud iam service-accounts keys delete <previous key id> --iam-account <service account email>
Tip
JSON キーは保存時に暗号化され、Ostorlab で再表示されることはありません。
コネクタを追加する
-
設定 タブの ステップ 2: Google Cloud コネクタ で コネクタを追加 (または 別のコネクタを追加) をクリックします。

-
フォームに入力し、作成 をクリックします。

| フィールド | 入力する内容 |
|---|---|
| 名前 | 組織内で一意の名前。例: 本番 GCP。 |
| プロジェクト ID | Google Cloud のプロジェクト ID。6〜30 文字の英小文字、数字、ハイフンで、英字で始まり、英字または数字で終わります。 |
| 組織 ID (任意) | Google Cloud の組織番号。設定すると、組織配下のすべての有効なプロジェクトが収集されます。 |
| 認証方式 | サービスアカウントの権限借用 または サービスアカウントキー。 |
| サービスアカウントのメール | 権限借用方式のみ。スクリプトが表示したメールアドレス。 |
| サービスアカウントの JSON キー | キー方式のみ。JSON キーファイル全体。 |
| 所有者 | 必須。インポートされたアセットはこの所有者に紐付けられます。 |
| ロケーション | インポートされたアセットの任意のロケーション。 |
| 有効 | 無効なコネクタはスケジュール同期の対象外です。 |
接続をテストする
コネクタの行で 接続をテスト をクリックします。テストはプロジェクトから読み取るだけで、何もインポートしません。

4 つのチェックが実行されます。
| チェック | 確認内容 |
|---|---|
| 認証情報 | Ostorlab がサービスアカウントの Google トークンを取得できたこと (権限借用、または保存済みキーから)。 |
| 権限 | Cloud Asset Inventory がスコープ内のプロジェクトを一覧できること。 |
| スコープ | 読み取られるプロジェクト。対象のプロジェクト、または組織の有効なすべてのプロジェクト。プロジェクトが有効でない、または読み取れない場合は失敗します。 |
| サンプルリソース | Ostorlab がスコープ内で最初に予約された外部アドレスを読み取ります。予約済みのものがない場合も成功します。 |
チェックが失敗すると、以降のチェックもスキップまたは失敗として表示されます。まず最初に失敗したチェックを修正してください。

コネクタを同期する
有効なコネクタは 12 時間ごとに自動で同期されます。すぐにインポートするには、コネクタの行で 今すぐ同期 をクリックします。

トーストでジョブが確認できます (同期を開始しました (ジョブ ...))。コネクタが無効な場合、または同じコネクタの同期がすでに実行中の場合、同期は拒否されます。

同期の実行履歴とエラーを確認する
最近の同期 をクリックすると、コネクタの実行履歴が表示されます。

| 列 | 意味 |
|---|---|
| 状態 | 実行中、成功、一部成功 (一部のプロジェクトが失敗し、残りはインポート済み)、失敗 (同期を完了できなかった。例: Google がトークンを拒否した)。 |
| リソース | この実行で見つかったリソース。 |
| 作成、更新 | 新規および変更されたアセットとノード。作成数にはノードに加えて IP アセットとホスト名アセットも含まれます。 |
| 古い | この実行で確認されなかったため、コネクタが cloud:stale タグを付けたリソース。 |
| エラー | スコープエラーの件数。クリックすると一覧が表示されます。 |
一覧取得に失敗したプロジェクトは 1 件のエラーとなり、他のプロジェクトは引き続き読み取られます。実行は 一部成功 で終了します。

Note
Google Cloud から消えたリソースに cloud:stale タグが付くのは、スコープエラーが一切なかった実行の後だけです。インベントリから削除されることはありません。後の同期でリソースが再び確認されると、このタグは外れます。
実行中 のまま 2 時間を超えた実行は停止したものとして扱われます。新しい同期をブロックしなくなり、次回のスケジュール同期で 失敗 になります。
インベントリでアセットを確認する
インポートされたアセットは、選択した所有者とロケーションに属します。すべてのアセットにタグ cloud:gcp が付きます。
- Inventory > Assets を開きます。
-
検索パネルを開き、Tags タブでタグ名に
cloud、値にgcpを設定して Search をクリックします。
-
一覧を絞り込むには、コネクタが追加する他のタグで絞り込みます。
gcp:account(プロジェクト ID)、gcp:region、gcp:resource(完全なリソース名)、gcp:connector(コネクタの ID) です。

検出パスをたどる
転送ルールなどのクラウドノードを開くと、ターゲット、タグ、所有者、ロケーションが表示されます。Discovery Path カードには、ノードの由来 (Google Cloud プロジェクト、次にその親リソース) が表示されます。 ノードのパブリックアドレスとホスト名は、自身の検出パスにそのノードを含むため、どのプロジェクトのどのリソースが公開したのかを常に把握できます。

コネクタを編集、一時停止、削除する
-
編集 では、名前、プロジェクト ID と組織 ID、認証方式、所有者、ロケーション、有効 スイッチを変更できます。保存済みのキーはそのままにしたい場合は空のままにし、置き換える場合は新しいキーを貼り付けます。

-
有効 をオフにすると、コネクタを残したままスケジュール同期を一時停止できます。
- 削除 はコネクタを削除します。すでにインポートされたアセットはインベントリに残り、今後の同期は停止します。
- Google Cloud 側の Ostorlab のアクセスも削除するには、サービスアカウント
ostorlab-cloud-connectorを削除します (または、その IAM バインディングと、Ostorlab を信頼するトークン作成者バインディングを削除します)。サービスアカウントを削除しても、そのために作成したプロジェクトまたは組織のロールバインディングは削除されません。そのメンバーのroles/cloudasset.viewerとroles/browserも削除してください。
トラブルシューティング
| 症状 | 確認すること |
|---|---|
| 「Google refused to issue a token for the service account ... Check that the organisation's Ostorlab service account has roles/iam.serviceAccountTokenCreator on it.」 | スクリプトの最後のステップが実行されていないか、バインディングが削除されています。スクリプトを再実行してください。 |
| 「Google refused the service account key. Check that the key and the service account ... are enabled.」 | キーが削除または無効化された、またはサービスアカウントが無効です。新しいキーを作成してコネクタを更新してください。 |
| 「Project ... is not active or cannot be read.」 | プロジェクト ID が誤っている、プロジェクトが削除中、またはサービスアカウントにそのプロジェクトのロールがありません。 |
| 「No active project found in scope.」 | 組織全体のコネクタで、ロールがプロジェクトにのみ付与されています。ORGANIZATION_ID を指定してスクリプトを再実行してください。 |
| 権限 チェックが失敗する | スクリプトの API がプロジェクトで有効になっていないか、ロールが不足しています。スクリプトを再実行してください。 |
| JSON キーに関するフォームエラー | キーファイル全体を貼り付けてください。client_email と private_key を持つサービスアカウントキー ("type": "service_account") である必要があります。 |
| テストで、現在は接続を利用できないと表示される | お客様のプロジェクトではなく Ostorlab 側の問題です。しばらくしてから再試行し、解消しない場合はサポートにお問い合わせください。 |
| 「The cloud connector is disabled.」 | コネクタの編集フォームで 有効 をオンにしてください。 |
| 「A sync of this cloud connector is already running.」 | 実行中の同期が終わるまでお待ちください。 |
| 期待したリソースが見つからない | 外部アドレスがない、またはプライベート DNS ゾーンにある可能性があります。コネクタはインターネットに公開されたリソースのみを保持します。 |