ReadOnlyでも、AWS Lightsailは完全にReadOnlyではない

シェアする

Voiced by Amazon Polly

単純にAWS上のリソースを読み取るために、ReadOnlyAccessポリシーをIAMユーザーにアタッチしているケースがあります。私は動作状況の確認等々を行う用のIAMユーザーとして使うことがあります。
表面上、これだけ見れば当該アカウント上のリソースに変更を加えることはできないように見えますが、例外があります。Lightsailに関しては、デフォルト設定ではReadOnlyでもrootとしてシェルアクセスが可能となります。

広告



Lightsailは一時的なキーペアを使う

マネジメントコンソールからLightsailインスタンスにシェルアクセスする場合、Lightsailにより一時的なキーペアが割り当てられます。

このキーペアが割り当てられる権限がReadOnlyAccessには含まれているため、この権限さえあれば任意のLightsailインスタンスにrootとしてログインし、root権限であらゆる操作ができるようになってしまいます。
sudo su -を実行した後、rm -rf --no-preserve-rootを実行すれば、当該インスタンスを破壊することさえできます。

不安定だが、権限を削る

頻繁に403エラーが出るなど、動作が不安定になりますがこの問題を解決するには権限を削ります。

LightsailにまつわるReadアクセスレベルは複数ありますが、次の2つが今回のキーになり得るポイントです。次の権限のアクションがReadにカテゴライズされているため、阻止するには手動でポリシーを設定する必要があります。
DownloadDefaultKeyPair権限を削除することで、Lightsailにより自動生成されたSSHキーペアのダウンロードを阻止します。
また、GetInstanceAccessDetails権限を削除することで、Lightsailコンソールからシェルアクセスができないようになります。

権限を削ると、次のようなメッセージが表示されることで接続が不可能となっていることを確認できます。

An error occurred and we were unable to connect or stay connected to your instance. If this instance has just started up, try again in a minute or two.

CLIENT_BAD_REQUEST [768]