はじめに
みなさん、こんにちは ! ソリューションアーキテクトの上野です。
今回は、どうしても語りたい AWS Systems Manager の魅力シリーズの第 3 回目ということで、「こんなに簡単にサーバー接続できるなんて ! 応用編」をお届けしていきます。
第 2 回では、「どうしても語りたい AWS Systems Manager の魅力 ! ~ 第 2 回 こんなに簡単にサーバー接続できるなんて !」というタイトルで、AWS Systems Manager の Session Manager を利用して簡単にサーバー接続する方法をご紹介し、まずはお手軽に利用できるイメージをみなさんにお届けできたかと思います。しかし、実際の運用ではサーバー接続に関連する細かい要件として、操作ログの取得やアクセス制御といったお話が出てくるケースがあります。今回は、そういったお話に対応するための Session Manager の機能を深掘りしていき、要件に応じて Session Manager を使いこなせるようにご説明をしていきたいと思います !
この記事の登場人物
瀧田 直斗 (たきた なおと) ソリューションアーキテクト
前職では 10 年以上オンプレミスの運用に従事
最近 AWS Systems Manager を触り始め可能性を感じており、上野へ話を持ちかける。
上野 涼平 (うえの りょうへい) ソリューションアーキテクト
前職では AWS 環境の構築と運用改善に従事
好きなサービスに AWS Systems Manager を掲げていたこともあり、瀧田から相談を受ける。
対談
アクティビティログの取得
アクセス制御
上野
次はアクセス制御にいきましょう ! 作業者ごとにアクセスできるサーバーを制御したいというお話でしたよね ?
瀧田
そうですね ! 社内の部署やチームという単位でアクセスできるサーバーをわけたり、協力会社など外部の方が接続できるサーバーを限定したりといったユースケースを想定しています。
上野
第 2 回でも少しご紹介しましたが、Session Manager は IAM ポリシーでサーバーへのアクセス制御が可能です。マネジメントコンソールを利用する IAM ユーザーやスイッチロールで利用する IAM ロールなど、とにかく人による操作に関わる IAM ポリシーによって、インスタンス単位やタグ単位でアクセスできるサーバーを制御できます。ドキュメントでもポリシーの例が紹介されているのでこちらをもとに説明しますね。
Session Manager の追加サンプル IAM ポリシー »
インスタンス単位でアクセス制御を行う方法
上野 まずは、インスタンス単位でアクセス制御を行う方法です。ssm:StartSession の Resource に接続させる Amazon EC2 インスタンスを指定することで制御が可能です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890EXAMPLE",
"arn:aws:ec2:us-east-2:123456789012:instance/i-abcdefghijEXAMPLE",
"arn:aws:ec2:us-east-2:123456789012:instance/i-0e9d8c7b6aEXAMPLE",
"arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession",
"ssm:ResumeSession"
],
"Resource": [
"arn:aws:ssm:*:*:session/${aws:userid}-*"
]
}
]
}
特定のタグついた EC2 インスタンスにアクセスを限定させたい場合
上野 同様に、特定のタグついた EC2 インスタンスにアクセスを限定させたい場合は、以下のようなポリシーを利用します。Condition でタグを指定しているのがポイントですね。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ec2:us-east-2:123456789012:instance/*"
],
"Condition": {
"StringLike": {
"ssm:resourceTag/Finance": [
"WebServers"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession",
"ssm:ResumeSession"
],
"Resource": [
"arn:aws:ssm:*:*:session/${aws:userid}-*"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell"
]
}
]
}
IAM ユーザーの管理を外部の Idp と連携させる場合
瀧田
インスタンス数が多い時はタグ単位の制御が使えそうですね ! 少し気になったのですが、タグのバリエーションが多い時には、その分 IAM ポリシーを作成しないといけないってことですか ?
上野
IAM ユーザーの管理方法次第ですが、そういった状況になることもあると思います。ちなみに、IAM ユーザーの管理を外部の Idp と連携させているケースですと、Idp 側の属性情報と EC2 インスタンスに付与されているタグの値が一致するかどうかでアクセス制御ができるので、IAM ポリシーは共通化できますね。以下のブログをご参考にしていただけると!
SAMLセッションタグを使用してフェデレーションユーザーのSession Managerアクセスを構成する »
コマンド制御
接続手段ごとに変わってくること
まとめ
今回はサーバー接続機能である Session Manager の深堀りということで、実運用で出てくる要件にどのように対応できるかをご紹介してきました。
Session Manager にも複数の利用方法があり、それぞれでできること、対応していることが異なります。要件に応じてどの方法で Session Manager を利用すべきか判断するための情報をご紹介できたかと思います。AWS Systems Manager はサーバー接続の Session Manager 以外にも運用をサポートする便利な機能があります。
これを機にみなさんも Systems Manager をぜひご活用ください !
筆者プロフィール

瀧田 直斗 (たきた なおと)
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト
前職では 10 年以上オンプレミスの運用に従事。
現在は、業種・規模を問わず幅広いお客様に対して技術的な側面からビジネスを支援行う。
上野さんとはスプラトゥーン仲間。

上野 涼平 (うえの りょうへい)
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト
前職では AWS 環境の構築と運用改善に従事。
様々な業界・業種のお客様に対して技術面を中心に支援を行っている。
瀧田さんとはスプラトゥーン仲間。
Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages