> ## Documentation Index
> Fetch the complete documentation index at: https://docs.iru.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Amazon Elastic Compute Cloud (EC2)

> クロスアカウント IAM ロールを使用して Amazon EC2 を Iru Compliance に接続し、インスタンスのインベントリ、セキュリティグループ、VPC ネットワークのメタデータを証跡として収集します。

### Amazon Elastic Compute Cloud (EC2) について

**Amazon EC2** コネクタは、AWS アカウントから**インスタンスのインベントリ**、**セキュリティグループ**、**VPC のトポロジー**、**AMI のメタデータ**、および関連する**コンピューティング**の詳細を収集し、Iru Compliance のコントロールに添付できるようにします。Iru は、お客様のアカウントに**お客様が作成した IAM ロール**に **`sts:AssumeRole`** で切り替えて AWS API を呼び出します。このロールは Iru の AWS プリンシパルを信頼し、コネクタのウィザードに表示される**外部 ID** を必須とします。アクセスは**読み取り専用**であるため、Iru がこのソースを通じてインスタンスを起動、停止、終了することはありません。

### 仕組み

Iru は **Iru の AWS アカウント**で稼働しています。**お客様の**アカウントに、次の条件を満たす**カスタマー管理の IAM ロール**を作成します:

1. **`sts:ExternalId`** が Iru に表示される値と一致する場合にのみ、Iru のロール ARN(ウィザードに表示)を**信頼**する。
2. 読み取り専用の EC2 および関連する呼び出しを**許可**する。通常は **`AmazonEC2ReadOnlyAccess`** を使用しますが、セキュリティチームが最小権限を求める場合は、より厳密なインラインポリシーを使用します。

ロールの **ARN** をコネクタに貼り付けます。その後、Iru はそのロールを引き受け、リージョンごとの EC2 データを読み取ります(Iru は有効なリージョンを順に確認します)。

| 項目 | 値 |
| - | - |
| **カテゴリ** | 開発者ツール |
| **認証** | クロスアカウント IAM ロール(`sts:AssumeRole` + 外部 ID) |

参考資料: [AmazonEC2ReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ReadOnlyAccess.html)、[EC2 IAM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-iam.html)。

### 前提条件

* **ロールを作成**し、ポリシーをアタッチできる IAM 権限(例: **`IAMFullAccess`** またはより限定的な管理者ロール)。
* **お客様の**テナントのコネクタ画面に表示される **Iru のプリンシパル ARN** と**外部 ID**(以下の例のサンプル値は、現在 Iru に表示される値と一致しない限り使用しないでください)。

### Amazon EC2 を Iru に接続する

<Tabs>
  <Tab title="Iru Compliance">
    <Note>
      まずここから始めます。ソースのウィザードを開き、**信頼ポリシー**を確認します(**外部 ID** も控えておきます)。AWS でロールを作成する準備ができたら、[**AWS**](#aws) タブに切り替えて [**IAM ロールを作成する**](#create-the-iam-role)の手順に従います。**Role ARN** を取得したら、[**Iru Compliance**](#iru-compliance) タブに戻り、以下の [**Iru でロール ARN を送信する**](#submit-the-role-arn-in-iru)を完了します。
    </Note>

    #### Iru から信頼ポリシーを取得する

    <Steps>
      <Step title="ソースを開く">
        Iru Compliance の左側のナビゲーションバーで **コンプライアンス** を展開し、**ソース** を選択します。

        <Frame>
          <img src="https://mintcdn.com/iru/tI0HDLDwHj8r9Ile/assets/media/images/iru-navigation-compliance-sources.png?fit=max&auto=format&n=tI0HDLDwHj8r9Ile&q=85&s=87dcef15fc17d2fb9a6e53f454e41710" alt="左側のナビゲーション: Compliance を展開し、Sources を選択した状態" width="410" height="1024" data-path="assets/media/images/iru-navigation-compliance-sources.png" />
        </Frame>
      </Step>

      <Step title="AWS Elastic Compute Cloud (EC2) をオンにする">
        **AWS Elastic Compute Cloud (EC2)** を探します(**カテゴリ** または **名前または説明で検索** を使用します)。そのカードの**トグル**をオンにします。**Iru が外部サービスへのアクセスをリクエストしています** のウィザードのタブは開いたままにしておきます。
      </Step>

      <Step title="信頼ポリシーの JSON を確認する">
        ウィザードはロール ARN の入力を求め、IAM ロールで使用する必要がある**信頼ポリシー**(**Principal** と **sts:ExternalId**)を表示します。以下は構造の**例**です。アカウント、プリンシパル ARN、外部 ID が正確に一致するように、**ウィザードに表示される最新の JSON をコピーしてください**。

        ```json copy=false lines theme={null}
        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "AWS": "arn:aws:iam::753695775620:role/IruConnect"
              },
              "Condition": {
                "StringEquals": {
                  "sts:ExternalId": "YOUR_EXTERNAL_ID"
                }
              },
              "Action": "sts:AssumeRole"
            }
          ]
        }
        ```
      </Step>

      <Step title="AWS に切り替えてロールを作成する">
        参照用に Iru ウィザードのタブを開いたまま、[**AWS**](#aws) タブに切り替えて [**IAM ロールを作成する**](#create-the-iam-role)の手順に従います。
      </Step>
    </Steps>

    #### Iru でロール ARN を送信する

    <Note>
      新しいロールの **Role ARN** を取得するため、先に [**AWS**](#aws) タブ([**IAM ロールを作成する**](#create-the-iam-role)まで)を完了してください。
    </Note>

    <Steps>
      <Step title="IAM Role ARN を貼り付ける">
        Iru ウィザードのタブに戻ります。**Role ARN** フィールドに **Role ARN** を貼り付けます。
      </Step>

      <Step title="接続を完了する">
        **Submit Role** を選択します。接続が成功すると、ウィザードに **接続が構成されました** と表示されます。
      </Step>

      <Step title="ソースが有効であることを確認する">
        **Iru が外部サービスへのアクセスをリクエストしています** のブラウザタブを閉じてから、**コンプライアンス** → **ソース** に戻り、**EC2** のカードが **有効** であることを確認します。
      </Step>
    </Steps>
  </Tab>

  <Tab title="AWS">
    <Note>
      このロールを作成する前に、[**Iru Compliance**](#iru-compliance) タブの [**Iru から信頼ポリシーを取得する**](#get-the-trust-policy-from-iru)を完了してください。**Trusted entity** を設定する際は、最新のウィザードに表示される**外部 ID** と信頼ポリシーを使用します。
    </Note>

    #### IAM ロールを作成する

    <Steps>
      <Step title="ロール作成のワークフローを開始する">
        EC2 ワークロードを所有する AWS アカウントにサインインします。**IAM** → **Roles** → **Create role** を開きます。
      </Step>

      <Step title="信頼されたエンティティを設定する">
        **AWS account** → **Another AWS account** を選択します。Iru の AWS アカウント ID(ウィザードに別の値が表示されない限り **`753695775620`**)を入力します。**Require external ID** を有効にし、Iru のウィザードからコピーした**外部 ID** を貼り付けます。
      </Step>

      <Step title="EC2 の読み取り権限をアタッチする">
        **アクセス許可** で **`AmazonEC2ReadOnlyAccess`** をアタッチします。

        セキュリティチームがマネージドポリシーを使用**しない**場合は、代わりに以下の JSON を使用した**インラインポリシー**をアタッチします。この JSON は最小権限の代替案の**例**です。チームのレビュー後に、アクションを絞り込むか拡張してください。

        ```json lines theme={null}
        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "ec2:Describe*",
                "ec2:Get*",
                "elasticloadbalancing:Describe*",
                "cloudwatch:ListMetrics",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:Describe*",
                "autoscaling:Describe*"
              ],
              "Resource": "*"
            }
          ]
        }
        ```
      </Step>

      <Step title="ロールに名前を付けて ARN をコピーする">
        ウィザードを完了し、ロールに名前を付けます(例: **`IruEC2ReadOnly`**)。新しいロールを開き、概要ページの上部から **Role ARN** をコピーします。[**Iru Compliance**](#iru-compliance) タブに戻り、[**Iru でロール ARN を送信する**](#submit-the-role-arn-in-iru)を完了します。
      </Step>

      <Step title="信頼ポリシーを確認する">
        ロールの **Trust relationships** タブを開き、JSON が Iru に表示された内容と一致していることを確認します。外部 ID の入力ミスは、**`AssumeRole`** での **`AccessDenied`** の最も一般的な原因です。
      </Step>
    </Steps>

    <Note>
      [**Iru Compliance**](#iru-compliance) タブに進み、**Role ARN** を貼り付けてウィザードを完了します([**Iru でロール ARN を送信する**](#submit-the-role-arn-in-iru))。
    </Note>
  </Tab>
</Tabs>

### トラブルシューティング

<AccordionGroup>
  <Accordion title="ソースをオンにしても何も開かない">
    Iru サイトの**ポップアップブロッカー**の設定を確認してから、再試行してください。
  </Accordion>

  <Accordion title="AssumeRole で AccessDenied になる">
    信頼ポリシーの**外部 ID** と**プリンシパル**が、Iru のウィザードと 1 文字ずつ完全に一致していることを確認してください。
  </Accordion>

  <Accordion title="インベントリが空になる">
    ロールがインスタンスと**同じアカウント**にあること、および想定しているリージョンにインスタンスが存在することを確認してください。
  </Accordion>

  <Accordion title="セキュリティグループ / VPC のデータがない">
    `ec2:Describe*` がカバーされていることを確認してください(マネージドポリシーにはすでに含まれています)。カスタムポリシーには、対応する `Describe*` アクションが必要です。
  </Accordion>
</AccordionGroup>

### 考慮事項

<CardGroup cols={2}>
  <Card title="EC2 API はリージョン単位のため、初回の同期に時間がかかる場合がある…" icon="circle-info">
    EC2 API は**リージョン単位**であるため、多数のリージョンにまたがる場合は初回の同期に時間がかかることがあります。
  </Card>

  <Card title="AmazonEC2ReadOnlyAccess は関連する ELB と…もカバーする" icon="shield">
    `AmazonEC2ReadOnlyAccess` は、より全体的な状況を把握できるよう、関連する **ELB** と **Auto Scaling** の読み取りもカバーします。
  </Card>

  <Card title="このインテグレーションはインスタンスを変更しない…" icon="server">
    このインテグレーションがインスタンスを変更することはなく、**情報の取得**(describe)のみを行います。
  </Card>
</CardGroup>

### 関連記事

<CardGroup cols={2}>
  <Card title="ソース管理" icon="plug" href="/ja/compliance/sources-management">
    すべての Compliance ソースを参照して管理します。
  </Card>

  <Card title="コンプライアンスの開始" icon="rocket" href="/ja/compliance/getting-started-with-compliance">
    フレームワーク、アクション、**アーティファクト**。
  </Card>

  <Card title="Iru の概要" icon="layer-group" href="/ja/iru/platform-overview/iru-overview">
    Endpoint、Compliance、Identity がどのように連携するか。
  </Card>

  <Card title="アーティファクト管理" icon="folder-open" href="/ja/compliance/artifacts-management">
    ソースとアクションからの証跡のアップロード、確認、整理。
  </Card>
</CardGroup>
