事前準備
本記事は、事前に以下設定がされていることを前提とします。
(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]->[アクセス管理]->[ユーザー]->[(対象ユーザー選択)]->[(概要画面から)認証情報]->「アクセスキーの作成」
(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」を控えておく。
-
【AWS Systems Manager】Privateサブネット内のEC2インスタンスにSSM経由でアクセスしてみた
- Publicサブネットで実施したい場合は、Privateサブネットに関する記載を適宜読み替えてください。
(c) ローカル環境にAWS CLIをインストール
以下公式サイトに従い、各環境に合わせてインストール
-
【AWS公式】AWS CLI バージョン 2 のインストール
- インストールが完了すると、コンソールで「aws」コマンドが使えるようになる。
- 2020年5月時点だと、以下バージョンがインストールされる。
$ 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 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環境などの場合は適宜フォルダパスを読み替えてください。)
$ 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文字のコード
$ 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コマンドの引数として利用可能になる
[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$