AWS EC2ディスカバリ

EC2インスタンスを検出して接続

概要

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

有効化されると、以下に示すように、EC2インスタンスがKeeper Connection Managerのホーム画面に表示されます。

連携による機能

  • AWS環境でのEC2インスタンスの即時検出

  • 定義したユーザーグループへの権限の制限

  • ファイルシステムまたはKeeperボルトによるPEMファイルの管理

AWSの設定

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

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

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

インストール

グループの作成

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

Dockerの自動メソッド

Keeper Connection Manager環境を更新して、この機能をサポートするには、/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でSecrets Managerボルト接続を使用している場合は、pemファイルまたは秘密鍵をKeeperボルトから動的に取得できます。_この方法を使用する場合、pemファイルのボリュームマウントを作成する必要はありません。_詳細は、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 Connection Managerのユーザーグループの名前。デフォルトでは、「AWS EC2 Administrators」という名前のグループになります。これは、Azure ADまたはその他のディレクトリとの連携からプロビジョニングされたグループに割り当てることもできます。

AWS_DISCOVERY_RECORD_CONNECTIONS_BY_DEFAULT

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

AWS_DISCOVERY_KSM_CONFIG

このKeeper Secrets Manager設定は、PEMファイルを格納するためのKeeperボルトとの連携を実現します。詳細は、EC2 Cloud Connectorのドキュメントをご参照ください。

(3) .pemファイルをguac_keysフォルダにコピー

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

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

KCMでSecrets Managerボルト接続を使用している場合は、pemファイルまたは秘密鍵をKeeperボルトから動的に取得できます。詳細は、EC2 Cloud Connectorのドキュメントをご参照ください。

(4) コンテナをアップグレード

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

sudo ./kcm-setup.run upgrade

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

Docker Composeメソッド

Keeper Connection Manager環境を更新して、この機能をサポートするには、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 Connection Managerのユーザーグループの名前。デフォルトでは、「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インスタンスのメタデータに基づいて、接続を確立するための適切なファイルを選択します。

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

(4) コンテナをアップグレード

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

sudo docker-compose up -d

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

Linux高度メソッド

Linux高度インストールメソッドを使用してKeeper Connection Managerをインストールした場合は、次の手順に従って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 Connection Managerのユーザーグループの名前。デフォルトでは、「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」に設定すると、そのインスタンスは、「Databases」の下の「MySQL」接続グループ内に配置され、それ自体がメインの「Amazon EC2」グループの配下になります。

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

kcm:record

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

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

鍵ファイルの権限

ファイル名

  • 鍵ファイルの名前は、EC2コンソールの表示どおり正確に付ける必要があります(MyServerなど)。

  • 鍵ファイルの名前には、ファイル拡張子**.pem**を付ける必要があります(MyServer.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)** ホストからファイルに対する読み取り許可をより広いグループまたはその他すべてに設定できますが、これは環境とセキュリティ設定に基づいて判断します。

<div data-gb-custom-block data-tag="hint" data-style='info'>

変更を反映するには、必ずコンテナをアップグレードしてください。

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

</div>

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

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

Last updated