# AWS EC2ディスカバリ

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2Ff12t2NdSjgUz9GO3ztHi%2Fimage.png?alt=media&#x26;token=7df1fef6-9d3a-4fa9-a2af-243194bc6910" alt=""><figcaption></figcaption></figure>

## 概要

KeeperコネクションマネージャーはAmazon AWSと連携し、自動的にEC2インスタンスを検出して接続を行います。これにより、手動で何も設定しなくても、クラウド環境内の任意のEC2インスタンスに素早く簡単に接続できるようになります。他の接続と同様に、EC2インスタンス接続は特別に許可されるもので、エンドユーザーは根底をなすクレデンシャルにアクセスできないことになります。

この連携機能を有効化すると、以下のようにEC2インスタンスがKeeperコネクションマネージャーのホーム画面に表示されます。

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2F5WX4eZwsIQimoC1eQHhz%2Fimage.png?alt=media&#x26;token=9ea87196-87ef-422d-a508-17d16b93590b" alt=""><figcaption><p>Amazon EC2ディスカバリ</p></figcaption></figure>

### 連携による機能

* AWS環境でのEC2インスタンスの即時検出
* 定義したユーザーグループに対する権限の制限
* ファイルシステムまたはKeeperボルトでPEMファイルを管理

## AWSの設定

KeeperコネクションマネージャーをAmazon AWSと連携するには、ユーザーを作成して、インスタンス情報を読み取る権限を持つロールポリシーを割り当てる必要があります。以下は権限を最小限に抑えたポリシーの例です。

```
{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Sid":"VisualEditor0",
            "Effect":"Allow",
            "Action": [
                "ec2:DescribeImages",
                "ec2:GetPasswordData",
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": "*"
        }
    ]
}
```

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2FfIdLPDrzzE9gtKhQMzsg%2Fimage.png?alt=media&#x26;token=4a6805bc-635d-42fb-b513-8d6c26ea0e7e" alt=""><figcaption><p>権限の追加</p></figcaption></figure>

ユーザーに権限を割り当てた後、アクセスキーを作成します。

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2FHPXyQEmBm5eAfcED0ynS%2Fimage.png?alt=media&#x26;token=78e30091-7689-49b6-84b3-6dd2cadddd70" alt=""><figcaption></figcaption></figure>

## インストール

### グループの作成

環境を設定する前に、「AWS EC2 Administrators」というグループが、検出されたインスタンスにアクセスするユーザーに割り当てられているようにします。グループ名は、AWS\_DISCOVERY\_ADMIN\_GROUP環境変数を使用してカスタマイズすることもできます。

### Dockerの自動メソッド

この機能を使用するためにKeeperコネクションマネージャー環境を更新するには、`/etc/kcm-setup/docker-compose.yml`にあるDocker Composeファイルを編集する必要があります。

1. コンテナを停止する

ローカルインスタンスに変更を加える前に、コンテナを停止しておきましょう。

```
sudo ./kcm-setup.run stop
```

2. Docker Composeを編集する

次に、docker composeファイル`/etc/kcm-setup/docker-compose.yml`を編集し、以下のように必要な環境変数とボリュームのプロパティを追加します。

```
 guacamole:
        image: keeper/guacamole:2
        environment:
            ....
            ....
            AWS_DISCOVERY_ACCESS_KEY_ID:XXXXXXXXXXXXXXX
            AWS_DISCOVERY_SECRET_KEY:XXXXXXXXXXXXXXXXXXXXXXX
            AWS_DISCOVERY_REGIONS: us-east-1
            AWS_DISCOVERY_ADMIN_GROUP:MyDevOpsGroup
            AWS_DISCOVERY_RECORD_CONNECTIONS_BY_DEFAULT: "true"
        volumes:
            ....
            - "/var/lib/guac_keys/:/etc/guacamole/cloud-connector-secrets/aws/:ro"
```

#### Keeperボルトにクレデンシャルを保存する (オプション)

KCMでシークレットマネージャーのボルト接続を使用している場合は、pemファイルまたは秘密鍵をKeeperボルトからその都度取得できます。この方法を使用する場合、pemファイルのボリュームマウントを作成する必要はありません。詳細については、[EC2 Cloud Connectorのページ](https://docs.keeper.io/kcm-linux-rpm-method/vault-integration/ec2-cloud-connector)をご参照ください。

**環境変数**

`AWS_DISCOVERY_ACCESS_KEY_ID`

AWSでの認証に使用するAWSアカウントのアクセスキーID (必須)。

`AWS_DISCOVERY_SECRET_KEY`

アクセスキーに関連付けられた秘密鍵 (必須)。

`AWS_DISCOVERY_REGIONS`

`us-west-1、us-east-1`など、EC2インスタンスを照会するリージョンのカンマ区切りリスト (必須)。

`AWS_DISCOVERY_INSTANCE_BASE_PATH`

利便性を考慮し、EC2インスタンスを格納するために使用する組織の接続グループの名前。デフォルトでは、「Amazon EC2」になります (オプション)。

`AWS_DISCOVERY_ADMIN_GROUP`

検出されたEC2インスタンスを表示するために必要となるKeeperコネクションマネージャーでのユーザーグループの名前。デフォルトでは、「AWS EC2 Administrators」というグループになります。このユーザーグループは、Azure ADなどのディレクトリとの連携からプロビジョニングされたグループに割り当てることもできます。

`AWS_DISCOVERY_RECORD_CONNECTIONS_BY_DEFAULT`

「true」に設定すると、すべての接続で録画がデフォルトで有効になります。接続セッションの録画は、「`kcm:record`」というEC2インスタンスタグを使用して個々のマシンレベルで設定することもでき、「true」または「false」に設定して、接続の録画を有効化または無効化できます。

`AWS_DISCOVERY_KSM_CONFIG`

このKeeperシークレットマネージャーの設定で、PEMファイルを格納するためのKeeperボルトと連携します。詳細については、[EC2 Cloud Connectorのページ](https://docs.keeper.io/kcm-linux-rpm-method/vault-integration/ec2-cloud-connector)をご参照ください。

3. .pemファイルをguac\_keysフォルダにコピーする

Docker Composeの例では、ローカルファイルの場所`/var/lib/guac_keys/`でボリュームのマッピングを確認できます。これはKCMホスト内のフォルダで、目的のインスタンスへの接続を確立するために必要なすべてのSSH鍵ファイルが配置されていなければなりません。Windowsインスタンスの場合は、管理者パスワードの復号化に使用される.pemファイルもコピーする必要があります。KCMはEC2インスタンスのメタデータに基づいて適切なファイルを選択し、接続を確立します。

ファイルの権限を確認し、鍵ファイルがコンテナによって確実に読み取れるようにするには、以下の[鍵ファイルの権限](#fairuno)セクションをご参照ください。

{% hint style="info" %}
KCMでシークレットマネージャーのボルト接続を使用している場合は、pemファイルまたは秘密鍵をKeeperボルトからその都度取得できます。詳細については、[EC2 Cloud Connectorのページ](https://docs.keeper.io/kcm-linux-rpm-method/vault-integration/ec2-cloud-connector)をご参照ください。
{% endhint %}

4. コンテナをアップグレードする

Docker自動インストールメソッドを使用する場合、基盤となるソフトウェアをすべて更新するには、以下のコマンドを実行します。

```
sudo ./kcm-setup.run upgrade
```

これにより、更新後に自動的にコンテナが開始されます。

### Docker Composeメソッド

この機能を使用するためにKeeperコネクションマネージャー環境を更新するには、Docker Composeのカスタムファイルの「guacamole」セクションを編集する必要があります。

1. コンテナを停止する

ローカルインスタンスに変更を加える前に、docker-composeで通常行うように、コンテナを停止しておきましょう。

```
sudo docker-compose stop
```

2. Docker Composeを編集する

次に、docker composeファイルを編集し、以下のように必要な環境変数とボリュームプロパティを`guacamole`セクションに追加します。

```
 guacamole:
        image: keeper/guacamole:2
        environment:
            ....
            ....
            AWS_DISCOVERY_ACCESS_KEY_ID:XXXXXXXXXXXXXXX
            AWS_DISCOVERY_SECRET_KEY:XXXXXXXXXXXXXXXXXXXXXXX
            AWS_DISCOVERY_REGIONS: us-east-1
            AWS_DISCOVERY_ADMIN_GROUP:MyDevOpsGroup
            AWS_DISCOVERY_RECORD_CONNECTIONS_BY_DEFAULT: "true"
        volumes:
            ....
            - "/var/lib/guac_keys/:/etc/guacamole/cloud-connector-secrets/aws/:ro"
```

**環境変数**

`AWS_DISCOVERY_ACCESS_KEY_ID`

AWSでの認証に使用するAWSアカウントのアクセスキーID (必須)。

`AWS_DISCOVERY_SECRET_KEY`

アクセスキーに関連付けられた秘密鍵 (必須)。

`AWS_DISCOVERY_REGIONS`

`us-west-1、us-east-1`など、EC2インスタンスを照会するリージョンのカンマ区切りリスト (必須)。

`AWS_DISCOVERY_INSTANCE_BASE_PATH`

利便性を考慮し、EC2インスタンスを格納するために使用する組織の接続グループの名前。デフォルトでは、「Amazon EC2」になります (オプション)。

`AWS_DISCOVERY_ADMIN_GROUP`

検出されたEC2インスタンスを表示するために必要となるKeeperコネクションマネージャーでのユーザーグループの名前。デフォルトでは、「AWS EC2 Administrators」というグループになります。このユーザーグループは、Azure ADなどのディレクトリとの連携からプロビジョニングされたグループに割り当てることもできます。

`AWS_DISCOVERY_RECORD_CONNECTIONS_BY_DEFAULT`

「true」に設定すると、すべての接続で録画がデフォルトで有効になります。接続セッションの録画は、「`kcm:record`」というEC2インスタンスタグを使用して個々のマシンレベルで設定することもでき、「true」または「false」に設定して、接続の録画を有効化または無効化できます。

3. .pemファイルをguac\_keysフォルダにコピーする

Docker Composeの例では、ローカルファイルの場所`/var/lib/guac_keys/`でボリュームのマッピングを確認できます。これはKCMホスト内のフォルダで、目的のインスタンスへの接続を確立するために必要なすべてのSSH鍵ファイルが配置されていなければなりません。Windowsインスタンスの場合は、管理者パスワードの復号化に使用される.pemファイルもコピーする必要があります。KCMはEC2インスタンスのメタデータに基づいて適切なファイルを選択し、接続を確立します。

ファイルの権限を確認し、鍵ファイルがコンテナによって確実に読み取れるようにするには、以下の[鍵ファイルの権限](#fairuno)セクションをご参照ください。

4. コンテナをアップグレードする

Dockerカスタムインストールメソッドを使用して、基盤となるソフトウェアをすべて更新するには、コンテナをアップグレードします (docker-compose.ymlがカレントディレクトリにあることが前提となります)。

```
sudo docker-compose up -d
```

これにより、更新後に自動的にコンテナが開始されます。

### Linuxメソッド

Linuxインストールメソッドを使用してKeeperコネクションマネージャーをインストールした場合は、以下の手順でAWS EC2ディスカバリ機能を有効化します。

1.　KCM Cloud Connectorパッケージをインストールする

Linuxインストールメソッドを使用している場合は、以下のように「yum install」を使用してKCM Cloud Connectorパッケージをインストールできます。

```
sudo yum install kcm-cloud-connector-aws
```

2. Guacamoleプロパティファイルを編集する

`/etc/guacamole/guacamole.properties`を編集して、AWS Cloud Connector機能の必須プロパティとオプションプロパティを追加します。

**使用可能なプロパティ**

`aws-discovery-access-key-id`

AWSでの認証に使用するAWSアカウントのアクセスキーID (必須)。

`aws-discovery-secret-key`

アクセスキーに関連付けられた秘密鍵 (必須)。

`aws-discovery-regions`

`us-west-1、us-east-1`など、EC2インスタンスを照会するリージョンのカンマ区切りリスト (必須)。

`aws-discovery-instance-base-path`

利便性を考慮し、EC2インスタンスを格納するために使用する必要のある組織の接続グループの名前。デフォルトでは、「Amazon EC2」になります (オプション)。

`aws-discovery-admin-group`

検出されたEC2インスタンスを表示するために必要となるKeeperコネクションマネージャーでのユーザーグループの名前。デフォルトでは、「AWS EC2 Administrators」というグループになります。このユーザーグループは、Azure ADなどのディレクトリとの連携からプロビジョニングされたグループに割り当てることもできます (オプション)。

`aws-discovery-record-connections-by-default`

「true」に設定すると、すべての接続で録画がデフォルトで有効になります (オプション)。接続セッションの録画は、「`kcm:record`」EC2インスタンスタグを使用して個々のマシンレベルで設定することもでき、「true」または「false」に設定して、接続の録画を有効化または無効化できます。

3. .pemファイルをguac\_keysフォルダにコピーする

LinuxインスタンスへのアクセスまたはWindowsパスワードの復号化に使用する秘密鍵に必要なPEMファイルをすべて`/etc/guacamole/cloud-connector-secrets/aws/`に追加します。

4. Guacamoleサービスを再起動する

新しいパッケージは、ウェブアプリケーションが再起動されるまで有効になりません。

```
sudo systemctl restart guacamole
```

## タグを使用したインスタンス設定

インスタンスごとに割り当てられたAWS EC2タグを使用して接続を設定し、デフォルトとメタデータを上書きおよびカスタマイズできます。

### 使用できるタグ

**`kcm:username`**

インスタンスに接続するときに使用するユーザー名。

このタグで、「centos」や「ec2-user」などのインスタンスのログインユーザー名を定義します。KCMは、インスタンスのAMIに基づいて正しいユーザー名を選択しようとしますが、これを使用して誤った推測を修正できます。

#### `kcm:organize`

他の接続間でインスタンスを整理するために使用する接続グループのフルパス。

このタグにより、すべてのインスタンスを含む接続グループの範囲を超えてEC2インスタンスをさらに整理できます。デフォルトでは、検出されたすべてのインスタンスは、「Amazon EC2」という最上位の接続グループ内に配置されますが、それ以上の整理は行われません。たとえば、`kcm:organize`を「Databases」のように設定すると、そのインスタンスは、「Amazon EC2」の下の「Databases」接続グループ内に配置されます。同様に、`kcm:organize`を「Databases/MySQL」に設定すると、そのインスタンスは「Amazon EC2」の下にある「Databases」の中の「MySQL」接続グループに配置されます。

これらの接続グループはすでに存在している必要はなく、実際にはメモリ内にのみ存在します (EC2サポートによって維持されます)。

#### `kcm:record`

インスタンス接続セッションを記録するか否かを示すフラグ。

このタグは、KCM環境プロパティ `aws-discovery-record-connections-by-default` のデフォルトの画面録画設定を上書きします。このタグが存在し、その値が「true」に設定されている場合、接続は録画されます。「false」に設定されている場合は、接続は録画されません。このタグが存在しない場合、または他の値に設定されている場合は、設定済みのデフォルトの録画動作が使用されます。

## 鍵ファイルの権限 <a href="#docker-file-permissions" id="docker-file-permissions"></a>

### ファイル名

* 鍵ファイルの名前は、MyServerなどEC2コンソールの表示どおり正確に付ける必要があります。
* 鍵ファイルの名前には、**MyServer.pem**などファイル拡張&#x5B50;**.pem**を付ける必要があります。

### 権限

「guacamole」dockerコンテナ内のサービスは、「guacamole」ユーザーによって実行されます。「guacamole」ユーザーが共有鍵ファイルに読み取りアクセスできるように、ボリュームマウントでファイルのアクセス権限を適切に設定する必要があります。

例えば、ホスト上の `/var/lib/guac_keys/` フォルダ内のファイルは、`ec2-user` または設定したユーザーによって所有されている場合があります。

```
[root@xxx guac_keys]# ls -l
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoMac.pem
-rw------- 1 ec2-user ec2-user 1678 Jul 29 18:31 kcmdemo.pem
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoUbuntu.pem
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoWindows.pem
-rw------- 1 ec2-user ec2-user 1678 Jul 29 18:30 KCMKaliLinux.pem
```

コンテナ内でのファイルの所有者は、「1000」またはその他のユーザーIDが表示されている場合があります。

```
[root@1dd8996db434 aws]# ls -l
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoMac.pem
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoUbuntu.pem
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoWindows.pem
-rw------- 1 1000 1000 1678 Jul 29 18:30 KCMKaliLinux.pem
-rw------- 1 1000 1000 1678 Jul 29 18:31 kcmdemo.pem
```

ホストとguacamoleコンテナ間のファイルのアクセス権限を解決する方法は2つあります。

1. guacamole docker定義の環境変数GUACAMOLE\_UIDとGUACAMOLE\_GIDを使用して、アクセス権限をマッピングします。

```
            GUACAMOLE_UID:1000
            GUACAMOLE_GID:1000
```

この変更の結果は以下のようになります。

* 既存のファイルの所有権が、`guacamole`ユーザーの古いUIDから指定した値に更新されます。
* コンテナ内の`guacamole`ユーザーのUIDをその値に一致するように更新されます。

2. ホストからファイルに対する読み取り許可をより広いグループまたはその他すべてに設定できますが、これは環境とセキュリティ設定に基づいて判断します。

{% hint style="info" %}
変更を反映するには、必ずコンテナをアップグレードしてください。

(`kcm-setup.run upgrade`または`docker-compose up -d`)
{% endhint %}

### パスフレーズ付き鍵ファイル

.pemキーがパスフレーズで暗号化されている場合は、宛先への接続を確立するときにパスフレーズの入力を求められます。
