インスタンス内からAmazon Lightsailの裏側を想像してみる(小ネタ)

タイトルどおり特にこれといって役に立つお話ではないのですがなんとなく気になって色々見てみた小ネタ。

きっかけは、Lightsailで起動したubuntuインスタンス内でsnapで入ってるssm-agentが動いており、なんとなく見始めたところから。

TL;DR

  • Lightsailの実態は単にAWS管理下のアカウント内にあるEC2インスタンスっぽい
  • 起動しているインスタンスも例えばUbuntu 18.04のamiならpublicイメージを元に起動してるだけでamiとして特に差分があるわけではない
  • AWSが自社の提供するサービスを組み合わせていい感じにパッケージして定型化したものを別サービスっぽく仕立てて安く提供しているものだと思えばよさそう
  • 単に既存のサービスを組み合わせてターゲットを変えたユーザー層に安価に提供するという戦略なのだろうけどAWS的にも省エネでうまいことできている気がする(使う側からすればまあやすいし)

そういえば

環境

  • LightsailのOS OnlyでUbuntu 18.04
  • ap-northeast-1a
  • メモリ1GB、1 vCPU の5$プラン

f:id:egmc:20200223213625p:plain

見てみたとこ

起動してるssm-agentののログ

AccessDeniedException: User: arn:aws:sts::596322350845:assumed-role/AmazonLightsailInstanceRole/i-095f243859d90fbfd is not authorized to perform: ssm:UpdateInstanceInformation on resource: arn:aws:ec2:ap-northeast-1:596322350845:instance/i-095f243859d90fbfd

おもむろにget-caller-identityしてみる

$ aws sts get-caller-identity
{
    "Arn": "arn:aws:sts::596322350845:assumed-role/AmazonLightsailInstanceRole/i-095f243859d90fbfd",
    "Account": "596322350845",
    "UserId": "AROAYVV4U6367357MRC4Q:i-095f243859d90fbfd"
}

596322350845 はLightsailを使用してる自アカウントではない。 i-095f243859d90fbfd は起動しているインスタンスIDだが 596322350845 アカウント内にあるのでまあ当然自アカウント上では見えない AmazonLightsailInstanceRole というロールがアタッチされてるが特に権限はついてなさそう。 メタデータから普通にクレデンシャルを取ることができるが特に何ができるというわけでもない。

インスタンスタイプ

$ curl http://169.254.169.254/latest/meta-data/instance-type
t2.micro

ami-id

$ curl  http://169.254.169.254/latest/meta-data/ami-id
ami-07ad4b1c3af1ea214

インスタンスは東京リージョンの通常のubuntuイメージ ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-20180912 で起動してることがわかる(のでデフォルトでssm-agentも入ってくる)

セキュリティグループ

Your Parkside Resources
Ingress from Your Parkside LoadBalancers
ps-adhoc-10022_22_443_80_9100_9104_9117_9253

が付与されている、インスタンス起動時にこのへんは裏側で動的に作成されるのでしょう、たぶん。

userdata

Lightsail用にCA公開鍵を生成してTrustedUserCAKeysに追加するスクリプトが動いている LightsailのコンソールからターミナルにログインするとAWSのIPからCA認証でログインしたと思われるログが出力されるのでおそらくそれ用のものと思われる

snapshotをとってexportしてみる

Lightsailでsnapshotを取得し、EC2にexportした際に生成されたsnapshotをみると以下のようなdescriptionになっている

Copied for DestinationAmi ami-0d4e5e150b0e9fe87 from SourceAmi ami-06751be45589128e9 for SourceSnapshot snap-0f5472d00cc91a548. Task created on 1,582,454,630,187.

おそらくAWS管理下のアカウントで普通にamiが取得されて管理されていて、Lightsail上で起動する場合は単にそれが使用され、exportするとamiが自アカウントにコピーされてきてSourceAmiのIDはその名残的なところなのかなーと。

ということで

まあ色々眺めて多分Lightsailはこんなかんじなんだろーなーという想像ネタでした。 AWSのサービスは既存の基盤の組み合わせで出来てるものが多くあり、個人的には「別サービスのリソースを実質管理下に置くが手で変更できてしまう」系のサービスがあまり好きではなく、その点Lightsailは(想像ですがおそらく)アカウントごと別ということで必要な機能だけがラッピングされて提供しており割と扱いやすくなっている気がします。