12
9

More than 3 years have passed since last update.

【AWS Systems Manager】AWS CLIを用いてSSM経由でEC2インスタンスにアクセスしてみた

Last updated at Posted at 2020-05-05

事前準備

本記事は、事前に以下設定がされていることを前提とします。
(a) IAMユーザーの設定(プログラムアクセスキー情報取得、MFA認証設定、各種IAMポリシー付与)
(b) AWS Systems Managerセッションマネージャーからの、EC2インスタンスへのセッション開始可能設定(別記事参照)
(c) ローカル環境にAWS CLIをインストール
(d) AWS CLI用のSession Manager Pluginをインストール

(a) IAMユーザーの設定

後述の手順で必要なため、IAMユーザーの概要画面で、以下設定がされたIAMユーザーのARNを控えること

AWSアカウントIDが「123456789012」で、IAMユーザー名が「ssm-user」の場合
arn:aws:iam::123456789012:user/ssm-user

(a-1) IAMユーザーの作成時に「プログラムによるアクセス」にチェックが入っていること

作成時に表示される「アクセスキーID」と「シークレットアクセスキー」を必ず控えること!!!

  • 特に「シークレットアクセスキー」はこのタイミングでしか参照できないため要注意
    • 万が一このタイミングで取得を逃した場合、以下手順でアクセスキーの再作成が必要

[IAM]->[アクセス管理]->[ユーザー]->[(対象ユーザー選択)]->[(概要画面から)認証情報]->「アクセスキーの作成」

  • 【参考_1】IAMユーザー作成画面 01_IAMユーザー.png
  • 【参考_2】アクセスキーの取得画面 02_アクセスキーを控えること.png

(a-2) MFA認証が設定されていること

IAMユーザーがログインする際に、MFA認証ができるように設定をすること(説明割愛)

  • IAMユーザーに対するIAMポリシーアタッチ(MFA認証用途)や、スマホに「GoogleAuthenticator」等の認証アプリインストールが必要

(a-3) 本記事で取り上げるAWSサービス利用に必要なIAMポリシーが設定されていること

本来はもっと絞るべきですが、本記事では以下権限を付与しています。

  • AmazonEC2FullAccess
  • AmazonS3FullAccess
  • AmazonSSMFullAccess

(b) AWS Systems Managerセッションマネージャーからの、EC2インスタンスへのセッション開始可能設定

以下記事の内容を参考に、EC2の設定を実施する。後述の手順で必要になるため、作成したEC2インスタンスの「instance-id」を控えておく。

(c) ローカル環境にAWS CLIをインストール

以下公式サイトに従い、各環境に合わせてインストール

aws-cliのバージョン確認
$ aws --version
aws-cli/2.0.10 Python/3.7.4 Darwin/19.4.0 botocore/2.0.0dev14

(d) AWS CLI用のSession Manager Pluginをインストール

以下公式サイトに従い、各環境に合わせてインストール

手順

(1) ローカル環境のAWS CLIコンフィグ設定

ローカル環境にて「aws configure」コマンドを実行すると項目の入力を求められるため、事前準備(a)の情報をもとに入力し、AWS CLIコンフィグ設定を行う。

aws-cliのconfigure設定
$ aws configure
AWS Access Key ID [None]: (自身のIAMユーザーの「アクセスキーID」を入力)
AWS Secret Access Key [None]: (自身のIAMユーザーの「シークレットアクセスキー」を入力)
Default region name [None]: (自身のリージョンを入力、東京だったら「ap-northeast-1」を入力)
Default output format [None]: json
  • 「Default output format」はjson以外も選べるが、本記事ではjsonを選択
    • 【参考】Default output format
フォーマット 説明
json JSON形式で出力
yaml YAML形式で出力(AWS CLI ver.2から利用可能)
text 複数行のタブ区切り文字列値の形式で出力。grep、sed、awkなどで加工しやすい
table セルの罫線を形成する文字列(+
  • コンフィグ設定が完了すると、コンフィグ設定が書き込まれた以下ファイルが作成される。(Mac環境で実施した場合の状態のため、Windows環境などの場合は適宜フォルダパスを読み替えてください。)
aws-cliコンフィグファイル(Mac環境)
$ cat ~/.aws/credentials
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXX
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

$ cat ~/.aws/config
[default]
region = ap-northeast-1
output = json

(2) MFAを利用したAWS CLI経由でのAWSリソースアクセス認証

以下の情報を準備して、aws cliコマンドを実行してアクセス認証を行う。

  • 事前準備(a)で控えた、ARN情報から「user」を「mfa」に置換した文字列
    • 本記事のssm-userの例) arn:aws:iam::123456789012:mfa/ssm-user
  • MFA認証で使う6文字のコード
本記事のユーザー(ssm-user)で実行で認証する場合
$ aws sts get-session-token --serial-number arn:aws:iam::123456789012:mfa/ssm-user --token-code XXXXXX
{
    "Credentials": {
        “AccessKeyId”: "access-key-id",
        “SecretAccessKey”: "secret-access-key",
        “SessionToken”: "temporary-session-token",
        “Expiration”: "expiration-date-time"
    }
}

なお、認証情報の有効期限はデフォルトでは12時間となりますが、「--duration-seconds」オプションを使用することで、「900秒(15分)」から「129600秒(36時間)」まで変更可能です。ただし、rootユーザーの場合は「900秒(15分)」から「3600秒(1時間)」となります。

(3) AWS CLIコマンドからssm経由でセッションスタート

事前準備(b)で用意したEC2インスタンスの「instance-id」をターゲットに設定し、ssmプラグインをaws cliから実行してセッションを開始する。

$ aws ssm start-session --target i-xxxxxxxxxxxxxxxxxxx --region ap-northeast-1

Starting session with SessionId: xxxxxxxxxxxxxxxxxxxxxxxxxx
sh-4.2$

おまけ : MFA認証情報を、AWS CLIのプロファイル情報として利用する

認証情報が有効な間に限りますが、「credentials」ファイルにMFA情報として追記することで、AWS CLIコマンドの実行の際に「--profile」オプションの引数としてMFA認証プロファイルを利用することが可能となります。

[1] 手順(2)で取得した認証情報をcredentialsファイルに追記

ここで指定したプロファイル名(mfa)で、AWS CLIコマンドの引数として利用可能になる

~/.aws/credentials
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXX
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

[mfa]
aws_access_key_id = "access-key-id"
aws_secret_access_key = "secret-access-key"
aws_session_token = "temporary-session-token"

[2] 作成したプロファイル情報を指定してAWS CLIコマンドを実行

「--pforile」オプションで、[1]で作成したプロファイル名(mfa)を指定することで、実行可能となる。

$ aws ssm start-session --target i-xxxxxxxxxxxxxxxxxxx --region ap-northeast-1 --profile mfa

Starting session with SessionId: xxxxxxxxxxxxxxxxxxxxxxxxxx
sh-4.2$

参考URL

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9