はじめに
EC2を使用する際にWifi環境などからのアクセスが必要となり、固定IPからの通信許可設定ができない場合がある。
その場合、「0.0.0.0/0」からのアクセスを許可すればログインは可能ではあるが、セキュリティに不安があると思う。
そんな時には、AWS Systems Manager (SSM)を使用するのが薦められている。
ただし、いざSMM経由でアクセスしようとするとどのようにやったか毎回思い出しながら設定しているので、備忘のために記事にする。
SSMを設定するうえでの準備
SSM経由でアクセスするうえで、「AWS CLI」を使用できること、「AWS CLI SSMプラグイン」がインストールされていることが前提になる。
既にいずれもインストール済みの場合は本項目は省略可能である。
AWS CLIのインストール
AWSサイトから実行環境にあったインストールパッケージをダウンロードし、インストールする。
インストールの設定項目はすべてデフォルトで問題ない。
AWS CLIの設定
AWS CLIはwindows環境の場合、コマンドプロンプトから使用する。
コマンドプロンプトを立ち上げ、下記のように「aws configure」コマンドを実行して、下記の項目を入力する。
> aws configure
AWS Access Key ID :アクセスキー
AWS Secret Access Key :シークレットキー
Default region name :リージョン名(東京リージョンなら、ap-northeast-1)
Default output format :特に設定する必要ありません
アクセスキーとシークレットキーを忘れている場合は、AWSコンソールにログインし、「IAMダッシュボード > ユーザータブ > 認証情報 > シークレットキーの作成」から新規に作成する。
AWS CLI Session Manager Plugin のインストール
AWSサイトからダウンロード可能。ダウンロードしたファイルを実行すればインストールできる。
EC2インスタンスの作成
EC2インスタンスは基本的に通常通り作成すれば問題ない。
ただし、通常セキュリティグループのインバウンドルールを設定していると思うが、SSM経由のアクセスの場合、セキュリティグループの設定は必要ない。
デフォルトでセキュリティグループが設定されていると思うが、セキュリティを考慮し、インバウンドルールを削除しておく。
EC2インスタンスへのSSM Agentインストール
EC2インスタンス作成後にはSSM Agentをインストールする。
AWSコンソールのサービス検索窓に「ssm」や「manager」など入力すると、下記のように「Systems Manager」が表示されるのでクリックする。
その後、Systems Manager画面のサイドバーから「セッションマネージャー」を選択する。
セッションマネージャー画面のサイドバーにある「高速セットアップ」をクリックし、「Get started」をクリックする。
高速セットアップ画面の「Create」ボタンを押すことでセットアップを開始できる。
その後、下記の通り進めていく。対象のインスタンスはデフォルトでは「All instances」が選択されているが、特定のインスタンスのみ適用したい場合は「Manual」を選択し、インスタンスを選び「Create」ボタンをクリックする。
SSM経由で接続する
ここまでで、SSM経由でEC2にアクセスするまでの準備はできた。
コマンドプロンプトを起動し、下記コマンドを実行する。
> aws ssm start-session --target 接続するインスタンスID --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389"
「インスタンスID」部分には接続するEC2のインスタンスIDに置き換える。
下記のように「Wationg for connections…」と表示されれば問題なく接続できている。
その後、リモードデスクトップを起動し「localhost:13389」を入力し、通常のリモートデスクトップアクセスと同様にアカウント情報を入れればアクセスできる。
基本はここまでだが、補足として下記の情報も後続に記載する。
- プロキシ使用時のアクセス方法
- ユーザープロファイルを指定してアクセス
- リモートアクセスのアカウント情報確認方法
プロキシ使用時のアクセス方法
プロキシ使用時には下記のようにAWSコマンドを入力する前にプロキシ設定を入れておけば問題なく接続できる。
> set HTTP_PROXY=http://proxy-server-host:port
> set HTTPS_PROXY=http://proxy-server-host:port
> aws ssm start-session --target 接続するインスタンスID --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389"
ユーザープロファイルを指定してアクセス
SSM経由でアクセスするためのプロファイルを設定してアクセスしたい場合もあると思う。
ユーザープロファイルの作成
$ vi ~/.aws/credentials
credentialsファイルの中身は下記のようにする。
[プロファイル名(例:TEST_PLOFILE)]
aws_access_key_id=アクセスキーID
aws_secret_access_key=シークレットアクセスキー
また、configファイルも作成する。
$ vi ~/.aws/config
configファイルの中身は以下のようにする。ちなみにconfigファイルは「aws configure」コマンドを実行している場合、既に存在しているはず。
[profile ユーザー名(例:TEST_USER)]
region = ap-northeast-1
output = json
role_arn = IAMロールのARN
source_profile = TEST_PLOFILE
ユーザープロファイルを指定してssmにアクセス
下記コマンドを実行し、ssm経由でアクセスする。
> aws --profile ユーザー名(例:TEST_USER) ssm start-session --target 接続するインスタンスID --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389"
リモートアクセスのアカウント情報確認方法
AWSコンソールのEC2ダッシュボードにて、接続したいEC2を選択し、「接続」ボタンをクリックする。
「RDPクライアント」タブの「パスワードを取得」ボタンをクリック。
インスタンス作成時に指定したキーペアをアップロードすることでパスワードを確認することができる。
また、ユーザー名はデフォルトでは「Administrator」となっている。
おわりに
AWS SSMを使用することでWifi環境など固定IPがないときでも、「0.0.0.0/0」のIP許可設定や踏み台サーバーを用意せずにセキュリティを担保できる。
今後この記事を備忘として利用し、なるべくSSM経由のアクセスをするようにしたい。SSM関係の設定で補足などあればアップデートしていきます。