- 統合とAPI
- 統合
- クラウド
- AWS
AWS をアセットインベントリに接続する
AWS コネクタは、AWS アカウントのインターネット公開リソースを読み取り、Ostorlab のアセットインベントリに保持します。 これにより、アタックサーフェスの一部としてスキャンや追跡ができます。必要なのは読み取りアクセスのみです。
コネクタは何を収集しますか?
コネクタはアカウントごとに次のリソースを読み取ります。プライベートアドレスは除外されます。
| スコープ | リソース |
|---|---|
| 各リージョン | パブリックアドレスを持つ EC2 インスタンス、Elastic IP、インターネット向けの Classic、Application、Network ロードバランサー、パブリックにアクセス可能な RDS インスタンス |
| グローバル | Route 53 のパブリックホストゾーンとその A、AAAA、CNAME レコード (ワイルドカードレコードは除外)、CloudFront ディストリビューション (デフォルトドメインと代替ドメイン名を含む) |
インポートされるのは上記のリソースタイプのみです。S3 バケット、Lambda 関数、API Gateway、ECS、EKS は収集されません。
各リソースは、AWS アカウントに紐付けられたクラウドノードとしてインベントリに登録されます。リソースが公開するパブリック IP アドレスとホスト名は、 通常の IP アセットおよびドメインアセットになり、プラットフォームの他の機能でスキャンできます。
始める前に必要なものは?
- インテグレーションを含む Ostorlab のプラン。 含まれていない場合、Ostorlab は「Your organisation does not have the necessary permissions to run this integration.」と応答します。
- 接続する AWS アカウントの 12 桁の ID。
- そのアカウントで IAM リソースを作成する CloudFormation スタックを作成する権限 (アクセスキー方式の場合は IAM ユーザーを作成する権限)。
- インポートされるアセットの Ostorlab 所有者。 必要に応じて事前に作成してください。
AWS でアクセスを設定する
Library > Integrations を開き、クラウド カテゴリを選択して、AWS カードを選びます。設定タブは ステップ 1: AWS アカウントを準備する から始まります。

2 つの認証方式のいずれかを選びます。長期的なキーが不要なクロスアカウントロールを推奨します。
オプション 1: クロスアカウント IAM ロール (推奨)
OstorlabReadOnly ロールは Ostorlab の AWS 同期ロールを信頼し、組織の外部 ID が提示された場合にのみそれを受け入れます。
-
ステップ 1 で クロスアカウント IAM ロール: セットアップファイルをダウンロード をクリックします。CloudFormation テンプレート
ostorlab-read-only-role.yamlが取得できます。 使用するパラメータ ブロックには、テンプレートにすでに含まれる 3 つの値、つまりパラメータOstorlabPrincipal、ExternalId、RoleNameが表示されます。
-
アカウントの CloudFormation コンソールで、テンプレートからスタックを作成します。デフォルトのパラメータ (
OstorlabPrincipal、ExternalId、RoleName) はそのままにし、CloudFormation が IAM リソースを作成することを承認します。 AWS CLI でも実行できます。aws cloudformation create-stack --stack-name ostorlab-read-only \ --template-body file://ostorlab-read-only-role.yaml \ --capabilities CAPABILITY_NAMED_IAM aws cloudformation describe-stacks --stack-name ostorlab-read-only --no-cli-pager \ --query "Stacks[0].Outputs[?OutputKey=='RoleArn'].OutputValue" --output text -
スタックが完了したら、出力
RoleArn(例:arn:aws:iam::123456789012:role/OstorlabReadOnly) をコピーします。
このロールが、すべてのリソースに対して付与するのは次の読み取り操作のみです。
ec2:DescribeRegions
ec2:DescribeInstances
ec2:DescribeAddresses
elasticloadbalancing:DescribeLoadBalancers
route53:ListHostedZones
route53:ListResourceRecordSets
cloudfront:ListDistributions
rds:DescribeDBInstances
AWS Organizations で複数のアカウントを接続する
- 管理アカウントから、AWS Organizations で AWS CloudFormation StackSets の信頼されたアクセスを有効にします。CloudFormation コンソールで StackSets を開いて Enable trusted access を選ぶか、
aws organizations enable-aws-service-access --service-principal member.org.stacksets.cloudformation.amazonaws.comを実行します。これがないと、サービス管理のスタックセットは作成できません。 - 管理アカウントから CloudFormation StackSets を開き、同じテンプレートからサービス管理のアクセス許可でスタックセットを作成します。
- 接続する組織単位またはアカウントにデプロイします。IAM ロールはグローバルなので、リージョンは 1 つだけで構いません。
- ロール ARN をコピーしたアカウント用に Ostorlab コネクタを 1 つ作成し、他のアカウント ID を AWS Organizations メンバーアカウント (任意) に列挙します。
Ostorlab は各メンバーアカウントについて
arn:aws:iam::<account id>:role/OstorlabReadOnlyを導出します。
オプション 2: アクセスキー
クロスアカウントロールを作成できない場合に使用します。コネクタ自身のアカウントのみを読み取ります。
- ステップ 1 で アクセスキー: セットアップファイルをダウンロード をクリックします。
ostorlab-read-only-user.yamlが取得できます。 - アカウントでそのテンプレートからスタックを作成します。コンソールアクセスのない IAM ユーザー
OstorlabReadOnlyが作成され、上記の操作のみを許可するインラインポリシーが付与されます。 -
そのユーザーのアクセスキーを作成し、コネクタフォーム用にペアを控えます。
aws iam create-access-key --user-name OstorlabReadOnly --no-cli-pager -
キーをローテーションするには、手順 3 の
aws iam create-access-key --user-name OstorlabReadOnlyコマンドを再実行して新しいキーを作成し (IAM ユーザーが持てるアクセスキーは最大 2 つです)、コネクタを新しいペアで更新してから、以前のキーを削除または無効化します。
Tip
シークレットアクセスキーは保存時に暗号化され、Ostorlab で再表示されることはありません。コネクタが動作したら、ローカルに保存したコピーは削除してください。
コネクタを追加する
-
設定 タブの ステップ 2: AWS コネクタ で コネクタを追加 (または 別のコネクタを追加) をクリックします。

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

| フィールド | 入力する内容 |
|---|---|
| 名前 | 組織内で一意の名前。例: 本番 AWS。 |
| AWS アカウント ID | ロールまたはキーを保持する 12 桁のアカウント。 |
| リージョン | 読み取るリージョン (eu-west-1 のような AWS リージョンコード)。空のままにすると有効なすべてのリージョンを読み取ります。 |
| 認証方式 | クロスアカウント IAM ロール または アクセスキー。 |
| ロール ARN | ロール方式のみ。OstorlabReadOnly ロールの ARN。上記の AWS アカウント ID に属している必要があります。 |
| AWS Organizations メンバーアカウント (任意) | ロール方式のみ。1 行につき 12 桁のアカウント ID を 1 つ。各アカウントに OstorlabReadOnly ロールが必要です。 |
| アクセスキー ID と シークレットアクセスキー | アクセスキー方式のみ。 |
| 所有者 | 必須。インポートされたアセットはこの所有者に紐付けられます。 |
| ロケーション | インポートされたアセットの任意のロケーション。 |
| 有効 | 無効なコネクタはスケジュール同期の対象外です。 |
アクセスキーとメンバーアカウントは併用できません。アクセスキーはコネクタ自身のアカウントのみを読み取ります。
接続をテストする
コネクタの行で 接続をテスト をクリックします。テストはアカウントから読み取るだけで、何もインポートしません。

4 つのチェックが順に実行され、1 つのアカウントのチェックは最初に失敗したところで停止します。
| チェック | 確認内容 |
|---|---|
| 認証情報 | Ostorlab がアカウントの認証情報を取得できたこと。アクセスキーの場合は、キーがコネクタのアカウントに属していることも確認します。 |
| 権限 | ロールまたはユーザーが route53:ListHostedZones を呼び出せること。 |
| スコープ | 読み取られるリージョン。有効なリージョンがない場合は失敗します。 |
| サンプルリソース | Ostorlab が最初のリージョンの Elastic IP を読み取ります。アカウントに Elastic IP がない場合も成功します。 |
メンバーアカウントを持つコネクタでは、アカウントごとにチェックが実行され、各メッセージはアカウント ID で始まります。

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

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

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

| 列 | 意味 |
|---|---|
| 状態 | 実行中、成功、一部成功 (一部のスコープが失敗し、残りはインポート済み)、失敗 (同期を完了できなかった。例: 認証情報が受け入れられなかった)。 |
| リソース | この実行で見つかったリソース。 |
| 作成、更新 | 新規および変更されたアセットとノード。作成数にはノードに加えて IP アセットとホスト名アセットも含まれます。 |
| 古い | この実行で確認されなかったため、コネクタが cloud:stale タグを付けたリソース。 |
| エラー | スコープエラーの件数。クリックすると一覧が表示されます。 |
失敗したリージョンやサービスが他のスコープを止めることはありません。エラーとして報告され、実行は 一部成功 で終了します。
各エラーはスコープを <アカウント ID>/<リージョン> / <サービス> の形式 (例: 123456789012/eu-central-1 / rds) で示し、続いて AWS からのメッセージが表示されます。

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

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

コネクタを編集、一時停止、削除する
-
編集 では、名前、リージョン、認証方式、所有者、ロケーション、有効 スイッチを変更できます。保存済みのシークレットはそのままにしたい場合は空のままにし、置き換える場合は新しい値を入力します。シークレットアクセスキーを置き換えるには、新しいアクセスキー ID 全体を新しいシークレットとあわせて入力してください。ID とシークレットは対になっています。 認証方式を切り替えると、以前の方式のフィールドは消去されます。

-
有効 をオフにすると、コネクタを残したままスケジュール同期を一時停止できます。
- 削除 はコネクタを削除します。すでにインポートされたアセットはインベントリに残り、今後の同期は停止します。
- AWS 側の Ostorlab のアクセスも削除するには、CloudFormation スタックを削除し (
OstorlabReadOnlyロールまたはユーザーが削除されます)、アクセスキー方式ではアクセスキーも削除します。
トラブルシューティング
| 症状 | 確認すること |
|---|---|
| 「AWS connections are not available right now. Try again later.」 | お客様のアカウントではなく Ostorlab 側の問題です。しばらくしてから再試行し、解消しない場合はサポートにお問い合わせください。 |
権限 チェックが AccessDenied で失敗する |
スタックが変更または削除された、またはロールの信頼ポリシーが編集された可能性があります。デフォルトのパラメータを維持してください。ロールは Ostorlab のプリンシパルと外部 ID の組み合わせのみを信頼します。 |
| 「The access keys belong to AWS account ... not to the connector's account」 | キーが、コネクタの AWS アカウント ID とは別のアカウントで作成されています。 |
SignatureDoesNotMatch または InvalidClientTokenId |
アクセスキー ID またはシークレットが誤っています。両方を再入力してください。 |
| フォームエラー: 「ロールは上記の AWS アカウント ID に属している必要があります。」 | ロール ARN のアカウント ID が、コネクタの AWS アカウント ID と異なります。 |
1 つのサービスで AccessDenied が出て同期が 一部成功 になる |
ロールまたはユーザーに、そのサービス用の上記読み取り操作のいずれかが不足しています。ダウンロードしたテンプレートを再デプロイしてください。 |
| 「The cloud connector is disabled.」 | コネクタの編集フォームで 有効 をオンにしてください。 |
| 「A sync of this cloud connector is already running.」 | 実行中の同期が終わるまでお待ちください。 |
| 期待したリソースが見つからない | コネクタの リージョン と、リソースがインターネットに公開されていること (パブリックアドレス、インターネット向けロードバランサー、パブリックホストゾーン) を確認してください。 |