はじめに
今回は、IAMユーザーごとにログインするユーザーを変える方法について書いていきます。
参考ドキュメントはこちらになります。
前提条件
今回は、Amazon Linux 2023での手順を記載しており、Session Managerにログイン可能な環境は揃っていることを前提とします。
そのため、本記事では以下のことは書いていません。
- EC2作成方法
- SSM Session Manager利用条件について
SSM Session Managerを利用してログインするにあたっては、いくつか前提条件がありますので、対象のドキュメントをご参照ください。
手順
EC2でOSユーザー作成
始めに、ログインするOSユーザーを作成します。 SSM Session ManagerでEC2にログインして、OSユーザー追加をします。
sudo useradd my-os-user
SSMでSSMSessionRunAsを有効化する
AWSマネジメントコンソールで、SSMのページへ遷移します。 左ペインからSession Managerをクリックし、「Preferences」タブを開いて、「Edit」をクリックします。
次に、「Enable Run As support for Linux Instances」を有効化します。
OSユーザー名を記入する欄が出てきますが、こちらにOSユーザー名を記載すると、IAMで指定していなかった場合に使うOSユーザー名となります。 ただし、OSユーザーが作成されるわけではないため、利用する場合は、事前にOSユーザーを作成する必要があることにご留意ください。
参考ドキュメントには、利用するOSユーザーの優先順位が記載されています。
セッションを開始しているユーザーである場合、IAM エンティティ (ユーザーまたはロール) に SSMSessionRunAs = os user account name タグが付いていますか? 「はい」の場合、マネージドノードに OS ユーザー名が存在していますか? 存在する場合は、セッションを開始します。存在しない場合は、セッションの開始を許可しないでください。
IAM エンティティに SSMSessionRunAs = os user account name タグが付いていない場合は、ステップ 2 に進みます。 IAM エンティティに SSMSessionRunAs = os user account name タグが付いていない場合、AWS アカウント の Session Manager の詳細設定で OS ユーザー名が指定されていますか? 「はい」の場合、マネージドノードに OS ユーザー名が存在していますか? 存在する場合は、セッションを開始します。存在しない場合は、セッションの開始を許可しないでください。
Linux と macOS のマネージドノードで Run As サポートを有効にする - AWS Systems Manager
今回、まずは設定せずにssm-userで入れないこと、デフォルトOSユーザーが動くのか検証してみます。
検証
EC2にSSM Session Managerを使っては入れるかやってみます。
エラーが出ました。
Invalid RunAs username. Set default username in Session Manager Preferences page.
IAMでログインOSユーザー設定も、デフォルトのOSユーザーを指定しなかったため、入れませんでした。
次に、先ほど作成したOSユーザーを指定してみました。
test-userで入れました。
あくまでIAMから制御をしたいので、設定有無はどちらでも大丈夫です。
ちなみに、「ssm-user」を設定すれば、ssm-userでもログイン可能です。
今回は、一つのIAMユーザーまたはIAMロールから特定のOSユーザーにログインしたいため、デフォルトOSユーザーの設定は削除して進めます。
IAMユーザー・ロールの設定
今回、作成したOSユーザーにログインさせたいIAMユーザーまたはロールに以下のようなタグ付けをします。
Key | Value |
---|---|
SSMSessionRunAs | {OSユーザー名} |
今回は、IAMユーザーに以下のようなタグ付けをしました。
では、IAMユーザーでログインしてみます。
できました。
検証
ここで、タグ付けで設定したOSユーザー名が存在しなかった場合の挙動について見てみたいと思います。
今回、タグを以下のように設定してみました。
Key | Value |
---|---|
SSMSessionRunAs | os-test-user |
OS内には「os-test-user」は存在しません。
入ってみたところ、失敗しました。
次に、タグはこのままにして、デフォルトOSユーザーを「test-user」に変更してみましたが、やはり同じエラーで入れませんでした。
ということで、この設定でSession Managerを使った運用でもOSユーザーの強制ができそうということだ分かりました。
ログについて
今回、ログインしたOSユーザーを変更してみましたが、ログでは以下のように見えていました。
どのIAMが、どのOSユーザーを使っているのかはっきりわかりますね。
{ "eventVersion": "1.0", "eventTime": "2023-06-01T03:54:06Z", "awsRegion": "ap-northeast-1", "target": { "id": "i-***************" }, "userIdentity": { "arn": "arn:aws:iam::000000000000:user/test-user" }, "runAsUser": "test-user", "sessionId": "test-user-093b7e0ceca558bd8", "sessionData": [ "sh-5.2$ sh-5.2$ whoami", "test-user" ] }
最後に
今回は、Session Managerについて書いてみました。
「SSMで運用したいけど、複数のステークホルダーが同じサーバーを使うから結局SSHポート空けていた」もしくは、「結局1台SSMで入る踏み台を作って、そこからサーバーにログインするようにしていた」等あるかなと思いますが、IAMで制御できれば運用が楽になるかもしれません。
ぜひ利用の検討をしてみたらいかがでしょうか。 ご参考になれば幸いです。
篠﨑 勇輔(書いた記事を見る)
クラウドインテグレーション部 SA1課