AWS IAM Identity CenterとABACを活用したSSMセッションマネージャーのRun As設定手順

はじめに

SSMセッションマネージャーは便利なツールです。ログイン対象のEC2がプライベートサブネットに配置されていても、踏み台サーバが不要でコスト削減に繋がりますし、22番ポートを開放しなくて済むのでセキュリティ的にも優れています。

しかし、デフォルト設定では、どのIAMユーザまたはIAMロールを使用していようとも、ログイン時に使用されるOSユーザはssm-userとなります。この設定では、誰が何を操作したのかがOSの操作ログから明確に判別できず、さらにssm-userはデフォルトでsudo権限を持っています。これらは、操作履歴の記録や最小権限の原則の観点から言えば、あまり望ましい状況とは言えません。

そこで、Aさん用のIAMユーザ/IAMロールでEC2にログインした際は、ssm-userではなく、Aさん用のOSユーザに自動的にログインさせたいです。これを実現できる機能がRun Asです。

Run Asについての詳細は公式ドキュメントに記載されていますが、IAMユーザ/IAMロールのタグにSSMSessionRunAs = os user account nameを設定する必要があります。しかし、AWSアカウントのログインにIAM Identity Centerを使用している場合、少し問題が発生します。

IAM Identity Centerを使用してAWSアカウントにログインする際は、AWSアカウントに自動プロビジョニングされるIAMロール(AWSReservedSSO_XXX)にスイッチロールする形になるため、この自動プロビジョニングされたIAMロールにSSMSessionRunAs = os user account nameを付ける必要があります。しかし、このIAMロールにAWSアカウント側から直接タグを付与しようとすると、エラーが出ます。

エラー画像

このIAMロールはIAM Identity Centerから管理されており、AWSアカウント側からの更新は受け付けていないため、エラーが発生します。したがって、IAM Identity Center側からこのIAMロールにタグを設定する方法が必要ですが、現時点ではIAM Identity Centerの公式ドキュメントによれば、IAM Identity Centerはこれに対応していません。

IAM Identity Centerの公式ドキュメント

Run Asの公式ドキュメントにも、IAMユーザ/IAMロールにタグを設定する以外の記載が無いため、困惑するかもしれません。しかし、Run AsはIAM Identity CenterのABAC(Attribute Based Access Control)に対応しているようです。これを活用してRun Asの設定を実施してみます。

設定手順

前提

アイデンティティストアはADや外部IDブロバイダーではなく、Identity Center ディレクトリを前提とした設定手順です。また、ログイン時に使用するOSユーザは既に作成済みとします。

IAM Identity Center アクセスコントロール属性 設定

IAM Identity Center コンソールの設定画面の「アクセスコントロールの属性を有効にするボタン」を押下します(初回のみ)。

スクリーンショット

アクセスコントロールの属性タブを押下し、属性の管理を押下します。

スクリーンショット

属性を追加を押下すると、入力ボックスが出てくるので、属性のキーと値を入力します。キーはSSMSessionRunAs固定ですが、値が本設定における肝となります。

IAM Identity CenterのABACを用いたRun As設定において、ここの値がSSMセッションマネージャーログイン時のOSユーザ名となるので、どんな属性を設定でき、その値はどうなるのかを意識する必要があります。

今回は、Identity Center ディレクトリのユーザ(以降SSOユーザと呼称します)名が所属するベンダー(会社)毎に、OSユーザ名を設定したかったので、${path:enterprise.organization}を設定します。本当は、SSOユーザが所属するグループ名をOSユーザ名とするため、ここに${user:groups.displayName}を設定したかったのですが、非サポート属性だったようなので、代替として${path:enterprise.organization}を設定しています。

SSOユーザ名をログイン時のOSユーザ名とする場合は、${path:userName}を設定して下さい。この場合、後続のオプション手順は実施不要です。

スクリーンショット

${path:enterprise.organization}は変数で、参照先はSSOユーザのプロファイルの組織(属性キー)の値です。

スクリーンショット

他の属性を使用したい場合は、IAM Identity Centerの公式ドキュメントSCIMのRFCを参考にしてください。以下の通り、特定の属性を除き、SCIM ユーザースキーマの属性をIdentity Center ディレクトリではサポートしているようです。

IAM Identity Centerの公式ドキュメント

SSOユーザ プロファイル設定(オプション設定)

ログイン時に使用するOSユーザ名を、SSOユーザのプロファイルの組織(属性キー)に設定します。

スクリーンショット

Run AS設定の有効化

ログイン対象のEC2が存在するAWSアカウントのSSMセッションマネージャコンソール上で、Run AS設定を有効化します。

スクリーンショット

ログイン確認

IAM Identity Centerを使用してAWSアカウントにログインし、ログイン対象のEC2にSSMセッションマネージャーで接続します。

スクリーンショット

スクリーンショット

スクリーンショット

デフォルトのssm-userではなく、前述の手順で設定したOSユーザ名(iret)でログインできました。

最後に

ABACを用いたRun As設定は、公式ドキュメントにもまだ記載されていないニッチなトピックかもしれませんが、IAM Identity Centerの利用が広まってきたら、今後需要が増えるかもしれません。
まあ、IAM Identity Center側からAWSアカウントに自動プロビジョニングされるIAMロール(AWSReservedSSO_XXX)に任意のタグが付与できるようになれば、こんなややこしい設定は不要になるかもしれませんね笑