Azure をアセットインベントリに接続する
Azure コネクタは、Azure サブスクリプションのインターネット公開リソースを読み取り、Ostorlab のアセットインベントリに保持します。 これにより、アタックサーフェスの一部としてスキャンや追跡ができます。必要なのは組み込みの 閲覧者 (Reader) ロールのみです。
このページは Azure クラウドコネクタについて説明します。Azure DevOps の CI/CD 連携については Azure DevOps を参照してください。
コネクタは何を収集しますか?
コネクタは Azure Resource Graph と Azure DNS 管理 API を読み取ります。プライベートアドレスは除外されます。
| リソース | 保持される内容 |
|---|---|
| サブスクリプション | 読み取られた各サブスクリプションが、他のノードの親となるクラウドノードになります |
| パブリック IP アドレス | IPv4 と IPv6 のアドレス。DNS ラベルがある場合はそのホスト名も含みます |
| ロードバランサーとアプリケーションゲートウェイ | パブリック IP アドレスが関連付けられているフロントエンド |
| 仮想マシン | ネットワークインターフェイス経由でパブリック IP アドレスが関連付けられているマシン |
| Azure DNS | パブリック DNS ゾーンとその A、AAAA、CNAME レコード (ワイルドカードレコードは除外) |
データベース、CDN、ストレージ、AKS、Functions、Front Door は収集されません。リソースのパブリック IP アドレスとホスト名は、 通常の IP アセットおよびドメインアセットになり、プラットフォームの他の機能でスキャンできます。
始める前に必要なものは?
- インテグレーションを含む Ostorlab のプラン。 含まれていない場合、Ostorlab は「Your organisation does not have the necessary permissions to run this integration.」と応答します。
- Microsoft Entra のテナント ID と、接続する サブスクリプション または 管理グループ の ID。
- Azure CLI (
az)。例: Azure Cloud Shell。スコープを所有するテナントにログインしている必要があります。 - そのスコープでの所有者またはユーザーアクセス管理者ロール。 閲覧者ロールを割り当てるために必要です。テナントの設定によっては、ディレクトリに外部アプリケーションを追加するのに、アプリケーション管理者などのディレクトリ管理者ロールも必要になる場合があります。
- インポートされるアセットの Ostorlab 所有者。 必要に応じて事前に作成してください。
Azure でアクセスを設定する
Library > Integrations を開き、クラウド カテゴリを選択して、Azure カード (Azure DevOps ではありません) を選びます。設定タブは ステップ 1: Azure テナントを準備する から始まります。

どちらの方式も az スクリプトで、任意の SCOPE を指定して実行します。
- 1 つのサブスクリプションの場合は
/subscriptions/<subscription id> - 管理グループの場合は
/providers/Microsoft.Management/managementGroups/<group id>。配下のすべてのサブスクリプションが対象になります。
SCOPE の値は単一引用符で囲んでください。例: SCOPE='/providers/Microsoft.Management/managementGroups/<group id>'。管理グループ ID には括弧を含められますが、引用符で囲まないとシェルがエラーにします。

オプション 1: Ostorlab マルチテナントアプリケーション (推奨)
Ostorlab は独自のマルチテナントアプリケーションをお客様のテナントに登録し、シークレットなしで認証します。
- ステップ 1 で Ostorlab マルチテナントアプリケーション: セットアップファイルをダウンロード をクリックします。
ostorlab-azure-reader.shが取得できます。使用するパラメータ ブロックには、スクリプトが使用する Ostorlab のアプリケーション ID と Ostorlab のテナント ID が表示されます。 -
Cloud Shell で次を実行します。
SCOPE='/subscriptions/<subscription id>' bash ostorlab-azure-reader.sh -
スクリプトは、Ostorlab アプリケーションがまだテナントにない場合は登録し、スコープに組み込みの 閲覧者 ロールを割り当て (Azure が新しいプリンシパルを反映するまで再試行します)、
Tenant id: <お客様のテナント ID>を表示します。この値をコピーします。
オプション 2: クライアントシークレット付きアプリ登録
アプリケーションを自分で所有したい場合に使用します。
- ステップ 1 で クライアントシークレット付きアプリ登録: セットアップファイルをダウンロード をクリックします。
ostorlab-azure-service-principal.shが取得できます。 -
同じように実行します。
SCOPE='/subscriptions/<subscription id>' bash ostorlab-azure-service-principal.sh -
スクリプトは
ostorlab-cloud-connector-sub-<subscription id>(またはostorlab-cloud-connector-mg-<group id>) という名前のアプリ登録を作成し、スコープに 閲覧者 を割り当てて、tenant_id、client_id、client_secret、scope_idを表示します。コネクタフォームに次のように対応させます。tenant_id-> テナント IDclient_id-> クライアント IDclient_secret-> クライアントシークレットscope_id(サブスクリプションの GUID または管理グループ ID) -> サブスクリプション ID または 管理グループ ID- スコープごとに専用のアプリケーションが作成されます。同じスコープでスクリプトを再実行するとクライアントシークレットが置き換えられるため、コネクタを新しいシークレットで更新してください。有効期限が切れる前にシークレットをローテーションしてください。
Tip
クライアントシークレットは保存時に暗号化され、Ostorlab で再表示されることはありません。
コネクタを追加する
-
設定 タブの ステップ 2: Azure コネクタ で コネクタを追加 (または 別のコネクタを追加) をクリックします。

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

| フィールド | 入力する内容 |
|---|---|
| 名前 | 組織内で一意の名前。例: 本番 Azure。 |
| スコープ | サブスクリプション または 管理グループ。 |
| サブスクリプション ID または 管理グループ ID | サブスクリプションの GUID、または管理グループの ID (1〜90 文字の英字、数字、ハイフン、アンダースコア、ピリオド、括弧)。管理グループ配下のすべてのサブスクリプションが収集されます。 |
| 認証方式 | Ostorlab マルチテナントアプリケーション または クライアントシークレット付きアプリ登録。 |
| テナント ID | セットアップスクリプトの最後に表示される Microsoft Entra テナントの GUID。 |
| クライアント ID と クライアントシークレット | アプリ登録方式のみ。 |
| 所有者 | 必須。インポートされたアセットはこの所有者に紐付けられます。 |
| ロケーション | インポートされたアセットの任意のロケーション。 |
| 有効 | 無効なコネクタはスケジュール同期の対象外です。 |
接続をテストする
コネクタの行で 接続をテスト をクリックします。テストはスコープから読み取るだけで、何もインポートしません。

4 つのチェックが実行されます。
| チェック | 確認内容 |
|---|---|
| 認証情報 | Ostorlab がマルチテナントアプリケーションとして Microsoft Entra ID で認証した、またはクライアントシークレットをトークンに交換し、有効なトークンを取得できたこと。 |
| 権限 | Ostorlab がスコープに対して Resource Graph にクエリを実行し、読み取り可能なリソース数を報告すること。 |
| スコープ | 読み取られるサブスクリプション。管理グループの場合は配下のすべてのサブスクリプション。読み取れないサブスクリプションはメッセージに表示されます。 |
| サンプルリソース | Ostorlab がスコープ内のパブリック IP アドレスを 1 つ読み取ります。該当するものがない場合も成功します。 |

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

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

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

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

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

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

コネクタを編集、一時停止、削除する
-
編集 では、名前、認証方式、所有者、ロケーション、有効 スイッチを変更できます。保存済みのクライアントシークレットはそのままにしたい場合は空のままにし、置き換える場合は新しい値を入力します。

-
有効 をオフにすると、コネクタを残したままスケジュール同期を一時停止できます。
- 削除 はコネクタを削除します。すでにインポートされたアセットはインベントリに残り、今後の同期は停止します。
- Azure 側の Ostorlab のアクセスも削除するには、スコープ上の Ostorlab アプリケーション (またはお客様のアプリ登録) の 閲覧者 ロール割り当てを削除し、不要であればアプリ登録またはエンタープライズアプリケーションも削除します。
トラブルシューティング
| 症状 | 確認すること |
|---|---|
| スクリプトが「SCOPE must be a subscription or a management group, not a nested resource path」で停止する | SCOPE を /subscriptions/<id> または /providers/Microsoft.Management/managementGroups/<id> に設定してください。それより深いパスは指定できません。 |
| スクリプトが「Could not assign Reader」と表示する | スコープでの所有者またはユーザーアクセス管理者ロールが必要です。ロールが付与された後にスクリプトを再実行してください。 |
| スクリプトが Ostorlab アプリケーションを追加できない | テナントが外部アプリケーションを制限しています。アプリケーション管理者などのディレクトリ管理者に実行を依頼してください。 |
| 認証情報 チェックが失敗する | テナント ID が誤っている、閲覧者ロールの割り当てがない、または (クライアントシークレット方式) シークレットの有効期限が切れた、もしくは置き換えられました。スクリプトを再実行してコネクタを更新してください。 |
| 権限 チェックが失敗する | 閲覧者ロールがスコープにまだ割り当てられていないか、反映されていません。数分待ってから再度テストしてください。 |
| スコープ チェックに「could not be read」のサブスクリプションが表示される | そのサブスクリプションでプリンシパルに閲覧者ロールがありません。管理グループまたはそのサブスクリプションに閲覧者を割り当ててください。 |
| GUID に関するフォームエラー | テナント ID、サブスクリプション ID、クライアント ID は GUID です。例: 00000000-0000-0000-0000-000000000000。 |
| 「The cloud connector is disabled.」 | コネクタの編集フォームで 有効 をオンにしてください。 |
| 「A sync of this cloud connector is already running.」 | 実行中の同期が終わるまでお待ちください。 |
| 期待したリソースが見つからない | コネクタが保持するのは、パブリック IP アドレスとそのロードバランサー、アプリケーションゲートウェイ、仮想マシン、およびパブリックな Azure DNS レコードのみです。 |