このページの本文へ

FIXER Tech Blog - Development

FIXER cloud.config Tech Blog

AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

2023年06月14日 10時00分更新

文● 村上滉樹/FIXER

  • この記事をはてなブックマークに追加
  • 本文印刷
FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

 本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「【AWS Systems Manager】プライベートサブネット内のEC2にAWS PrivateLink経由でリモート接続してみた 」を再編集したものです。

 こんにちは、FIXERの村上です。

 AWS Systems Managerを使用して、AWS PrivateLink(インターフェースVPCエンドポイント)経由でプライベートサブネット内のAmazon Linux 3にSSH接続する手順をブログにしました。

※本記事はAWS CloudShellで操作することを前提としています。ただし、以下の要件を満たせばローカルPCでも動作します。

1. ローカル環境の推奨要件

・AWS CLI v2をインストールしていること
・PowerShell 7をインストールしていること

2. 検証環境の構築手順(省略可能)

 AWS CLIで各リソースを作成します。本記事は「東京リージョン」を想定しています。

(1)環境変数を定義する

# VPC の IPv4 CIDR ブロック $vpc_ipv4_cidr_block = '10.0.0.0/16'
# サブネット の IPv4 CIDR ブロック
$subnet_ipv4_cidr_block = '10.0.0.0/24'
# セキュリティグループ名
$security_group_name = 'techblog-sg'
# セキュリティグループの説明文
$security_group_description = 'Security group for techblog.'
# キーペア名
$key_name = 'techblog-keypair'

(2)キーペアを作成する(既存のキーペアを利用する場合は、省略可能)

# キーペアを作成して、カレントディレクトリ配下に公開鍵をダウンロードする
aws ec2 create-key-pair --key-name $key_name --key-type rsa --key-format pem --output text > "$key_name.pem"

(3)下記のコマンドを実行して、検証環境のリソースを作成する

# VPC を作成する
$vpc_id = aws ec2 create-vpc --cidr-block $vpc_ipv4_cidr_block --query 'Vpc.VpcId' --output text
# プライベートサブネット を作成する
$subnet_id = aws ec2 create-subnet --vpc-id $vpc_id --cidr-block $subnet_ipv4_cidr_block --query 'Subnet.SubnetId' --output text
# セキュリテグループ を作成する
$sg_id = aws ec2 create-security-group --group-name $security_group_name --description $security_group_description --vpc-id $vpc_id --query 'GroupId' --output text
# Amazon Linux3 のAMIイメージを取得する
$ami_id = aws ec2 describe-images --owners amazon --filters 'Name=name,Values=al2023-ami-2023.*.*.*-kernel-6.1-x86_64' 'Name=state,Values=available' --query 'sort_by(Images, &CreationDate)[-1].[ImageId]' --region ap-northeast-1 --output text
# EC2インスタンス を作成する
aws ec2 run-instances --image-id $ami_id --count 1 --instance-type t2.micro --key-name $key_name --subnet-id $subnet_id --security-group-ids $sg_id --no-associate-public-ip-address

※1:AMIのイメージIDは、リージョンごとに異なるため EC2インスタンスと同じリージョンにしてください。
※2:AMIのイメージはAWSから提供されているものに限ります。自作AMIを用いる場合は、SSM Agentをインストールした状態にしてください。

3. AWS Systems Manager を 利用するための設定手順

 AWS Systems Managerを利用するためには、下記3つの条件を満たす制約があります。

(1)EC2インスタンスにIAMロールをアタッチする

 「AmazonSSMManagedInstanceCore」ポリシーを付与されたIAMロールを作成して、EC2インスタンスにアタッチします。

1-1. IAMロールを作成する

1. IAMコンソールにサインインします。
2. [アクセス管理] > [ロール] に移動して、「ロールを作成」 を選択します。
3. 【ステップ1】 信頼されたエンティティを選択
 1. 信頼されたエンティティタイプ では、「AWS のサービス」を選択
 2. ユースケースでは、「EC2」を選択
 3. 「次へ」を押下

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

4. 【ステップ2】許可を追加
 1. 許可ポリシーでは、「AmazonSSMManagedInstanceCore」を選択
 2. 「次へ」を押下

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

5. 【ステップ3】名前、確認、および作成
 1. ロールの詳細
  1. ロール名:「Custom-AdminRole-Test-EC2(任意)」
  2. 説明:「Created to perform administrative tasks on EC2 instances in test environments.(任意)」

 2. 「ロールを作成」を押下

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

1-2. IAMロールをEC2インスタンスにアタッチする

1. EC2コンソールにサインインします。
2. [インスタンス] に移動して、作成したEC2インスタンスを選択します。
3. 右上の [インスタンスの状態] > [セキュリティ] > 「IAMロールを変更」を選択します。

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

4. 先ほど作成したIAMロールを選択して、「IAMロールの更新」を押下します。

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

 これでEC2インスタンスにIAMロールをアタッチできました。

(2)SSMエージェントをEC2インスタンスにインストールする

 AWSから提供されたAMIには、SSMエージェントは初期インストールされています。

 本記事では、AWSイメージを利用するため導入手順を省略します。

(3)SSMエージェントからSSM APIを実行できる通信経路(アウトバウンド)を確保する

 本記事では、VPCエンドポイントを利用してSSMエージェントがSSM APIと通信できるプライベートネットワークを構築して、通信経路を確保します。

 パブリックサブネットを利用している場合、インターネット通信のインバウンド・アウトバウンドは確保されているため本手順は省略してください。

3-1. VPC で 「DNS ホスト名」と「DNS 解決」を有効化に更新する

1. VPCコンソールにサインインします。
2. [仮想プライベートクラウド] > [お使いのVPC]に移動して、対象のVPCを選択します。
3. 右上の[アクション] > [VPC の設定を編集] を選択します。
4. [DNS 設定] の 「DNS 解決を有効化」と「DNS ホスト名を有効化」にチェックを入れて、DNS機能の有効化を行います。
5. 「保存」を押下

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

3-2. PrivateLink用のインバウンドルールを追加する

 SSMエージェントからSSM APIまでの通信プロトコルは、すべてHTTPSで通信を行います。

 「2. 検証環境の構築手順」で作成したセキュリティグループにHTTPSトラフィックを許可するインバウンドルールを追加します。

1. VPCコンソールにサインインします。
2. [セキュリティ] > [セキュリティグループ] に移動して、EC2に設定されたセキュリティグループを選択します。
3. インバウンドルール には 下記の設定を行います。
 1. タイプ:[HTTPS] を選択
 2. ソース:[10.0.0.0/16](VPC の IPv4 cider値)を選択
 3. 「ルールを保存」を押下

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

3-3. SSM用のVPCエンドポイントを作成する

 PrivateLink経由でSSM APIを実行することを想定しているため、インターフェイスエンドポイントを3つ追加します。

(補足:ゲートウェイエンドポイントはSSMに対応していません)

1. VPCコンソールにサインインします。
2. [仮想プライベートクラウド] > [エンドポイント] に移動して、「エンドポイントを作成」 を選択します。
3. エンドポイントの作成
 1. エンドポイントの設定
  
1. エンドポイント名:[Ssm-Test-Ssm-Endpoint](任意)を入力します。
  2. サービスカテゴリ:[AWSのサービス] を選択します。
 2.サービス
  
1.サービス:[com.amazonaws.ap-northeast-1.ssm] を選択します。
 3. VPC
  1. VPC:対象のVPCを選択します。
  2. [追加設定] DNS 名を有効化:チェックします。(3-1で設定済み)
  3. [追加設定] DNS レコードの IP タイプ:[IPv4]
4. サブネット
 
1. サブネット:EC2が存在するAZを選択して、対象のサブネットを選択します。
 2. IP アドレスタイプ:[IPv4]
5.セキュリティグループ
 1. 対象のセキュリティグループを選択します。(3-2でインバウンドルールを追加したSGを選択)
6. ポリシー
 1. [フルアクセス] を選択します。

「エンドポイントを追加」を押下

 上記の手順を繰り返して、

・サービス:[com.amazonaws.ap-northeast-1.ssmmessages](エンドポイント名:Ssm-Test-SsmMessages-Endpoint(任意))
・サービス:[com.amazonaws.ap-northeast-1.ec2messages](エンドポイント名:Ssm-Test-Ec2Messages-Endpoint(任意))

 のVPCエンドポイントを作成します。

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

<補足>
※ Windows Serverを利用する場合、EBS上でWindows VSSを使用するときは、下記のエンドポイントも追加してください。
・サービス:com.amazonaws.ap-northeast-1.ec2(エンドポイント名:Ssm-Test-Ec2-Endpoint(任意))

 これで、AWS Systems Manager を利用するための設定は完了しました。

※(1)から(3)を設定されたEC2インスタンスのことを AWSでは、マネージドインスタンスと呼びます。

4. AWS Systems Manager を 利用してリモート接続する手順

1. AWS Systems Managerコンソールにサインインします。
2. [ノード管理] > [Session Manager]に移動します。
3. [セッション]画面で 接続したいインスタンスを選択して、[セッションの開始]を選択します。
4. セッション情報の設定画面が表示されますが、特に設定値を追加・変更することなく [Next]を選択します。
5. 最後に [start session] を押せば、ブラウザ上でSSHポートを穴あけすることなくSSH接続できました。

FIXERブログ AWS Systems Managerを使いAWS PrivateLink経由でEC2にSSH接続する方法

村上滉樹/FIXER
FIXER|エンタープライズ部門所属
2020年4月 新卒入社
職業:Cloud Solution Engineer(主にインフラ)
好きなAWS/Azureサービス:AWS Fargate / App Service

カテゴリートップへ

この連載の記事