コンテンツにスキップ

手順 読了目安 16 分

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 アカウントを準備する から始まります。

AWS カードが表示されたクラウドカテゴリ

2 つの認証方式のいずれかを選びます。長期的なキーが不要なクロスアカウントロールを推奨します。

オプション 1: クロスアカウント IAM ロール (推奨)

OstorlabReadOnly ロールは Ostorlab の AWS 同期ロールを信頼し、組織の外部 ID が提示された場合にのみそれを受け入れます。

  1. ステップ 1 で クロスアカウント IAM ロール: セットアップファイルをダウンロード をクリックします。CloudFormation テンプレート ostorlab-read-only-role.yaml が取得できます。 使用するパラメータ ブロックには、テンプレートにすでに含まれる 3 つの値、つまりパラメータ OstorlabPrincipal、ExternalId、RoleName が表示されます。

    コピー可能なパラメータとダウンロードボタンが表示されたセットアップ手順

  2. アカウントの 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
    
  3. スタックが完了したら、出力 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 で複数のアカウントを接続する

  1. 管理アカウントから、AWS Organizations で AWS CloudFormation StackSets の信頼されたアクセスを有効にします。CloudFormation コンソールで StackSets を開いて Enable trusted access を選ぶか、aws organizations enable-aws-service-access --service-principal member.org.stacksets.cloudformation.amazonaws.com を実行します。これがないと、サービス管理のスタックセットは作成できません。
  2. 管理アカウントから CloudFormation StackSets を開き、同じテンプレートからサービス管理のアクセス許可でスタックセットを作成します。
  3. 接続する組織単位またはアカウントにデプロイします。IAM ロールはグローバルなので、リージョンは 1 つだけで構いません。
  4. ロール ARN をコピーしたアカウント用に Ostorlab コネクタを 1 つ作成し、他のアカウント ID を AWS Organizations メンバーアカウント (任意) に列挙します。 Ostorlab は各メンバーアカウントについて arn:aws:iam::<account id>:role/OstorlabReadOnly を導出します。

オプション 2: アクセスキー

クロスアカウントロールを作成できない場合に使用します。コネクタ自身のアカウントのみを読み取ります。

  1. ステップ 1 で アクセスキー: セットアップファイルをダウンロード をクリックします。ostorlab-read-only-user.yaml が取得できます。
  2. アカウントでそのテンプレートからスタックを作成します。コンソールアクセスのない IAM ユーザー OstorlabReadOnly が作成され、上記の操作のみを許可するインラインポリシーが付与されます。
  3. そのユーザーのアクセスキーを作成し、コネクタフォーム用にペアを控えます。

    aws iam create-access-key --user-name OstorlabReadOnly --no-cli-pager
    
  4. キーをローテーションするには、手順 3 の aws iam create-access-key --user-name OstorlabReadOnly コマンドを再実行して新しいキーを作成し (IAM ユーザーが持てるアクセスキーは最大 2 つです)、コネクタを新しいペアで更新してから、以前のキーを削除または無効化します。

Tip

シークレットアクセスキーは保存時に暗号化され、Ostorlab で再表示されることはありません。コネクタが動作したら、ローカルに保存したコピーは削除してください。

コネクタを追加する

  1. 設定 タブの ステップ 2: AWS コネクタ で コネクタを追加 (または 別のコネクタを追加) をクリックします。

    別のコネクタを追加ボタン

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

    ロール ARN が強調表示されたコネクタ追加フォーム

フィールド 入力する内容
名前 組織内で一意の名前。例: 本番 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 で始まります。

4 つのチェックがすべて成功した接続テスト

コネクタを同期する

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

今すぐ同期の操作

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

同期開始のトースト

同期の実行履歴とエラーを確認する

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

最近の同期ダイアログ

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

失敗したリージョンやサービスが他のスコープを止めることはありません。エラーとして報告され、実行は 一部成功 で終了します。 各エラーはスコープを <アカウント ID>/<リージョン> / <サービス> の形式 (例: 123456789012/eu-central-1 / rds) で示し、続いて AWS からのメッセージが表示されます。

一部成功の同期のエラー

Note

AWS から消えたリソースに cloud:stale タグが付くのは、スコープエラーが一切なかった実行の後だけです。インベントリから削除されることはありません。後の同期でリソースが再び確認されると、このタグは外れます。

実行中 のまま 2 時間を超えた実行は停止したものとして扱われます。新しい同期をブロックしなくなり、次回のスケジュール同期で 失敗 になります。

インベントリでアセットを確認する

インポートされたアセットは、選択した所有者とロケーションに属します。すべてのアセットにタグ cloud:aws が付きます。

  1. Inventory > Assets を開きます。
  2. 検索パネルを開き、Tags タブでタグ名に cloud、値に aws を設定して Search をクリックします。

    cloud タグを aws に設定して絞り込んだインベントリ

  3. 一覧を絞り込むには、コネクタが追加する他のタグで絞り込みます。aws:account (アカウント ID)、aws:region、aws:resource (ARN)、aws:connector (コネクタの ID) です。

1 つの AWS アカウントのアセット: IP、ホスト名、クラウドノード

検出パスをたどる

ロードバランサーなどのクラウドノードを開くと、ターゲット、タグ、所有者、ロケーションが表示されます。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.」 実行中の同期が終わるまでお待ちください。
期待したリソースが見つからない コネクタの リージョン と、リソースがインターネットに公開されていること (パブリックアドレス、インターネット向けロードバランサー、パブリックホストゾーン) を確認してください。

次のステップ