SBクラウド・Alibaba CloudでセキュアなECS環境をユーザーデータを利用して雑に作成する

More than 1 year has passed since last update.


概要

SBクラウドのAlibaba Cloudで提供されている仮想サーバーECSでは、現状SSH公開鍵認証での初期構築がサポートされておらず、パスワード認証によって環境が構築されます。これはセキュアじゃないので、「インスタンス自動化設定フレームワーク」によって初期設定を行うサンプルです。

インスタンス自動化設定フレームワーク・・・要するにcloudinitなんですが、どうにも呼び名にはいろいろあるらしいです。コンソールでは「ユーザーデータ」ですね。

参考:Alibaba Cloudドキュメント インスタンス自動化設定フレームワーク


用意するスクリプト

こんなの用意します。


cloudinit

#!/bin/sh

/bin/sed -ie 's/PasswordAuthentication yes/PasswordAuthentication no/'
/etc/ssh/sshd_config
systemctl restart sshd
echo 'ssh-rsa あなたのSSH公開鍵' | tee -a /root/.ssh/authorized_keys

sshd_configのPasswordAuthenticationをoffにして再起動し、rootのauthorized_keysに公開鍵を追記するシェルスクリプトです。


コンソールからの設定

ECSコンソールからインスタンス作成時、「ユーザーデータ」の項目に貼り付けます。

スクリーンショット 2017-04-24 23.32.44.png

サイズが16kBを超えないように、という制限がありますので注意が必要ですが、SSHキーくらいなら絶対超えません。とりあえずUbuntuとCentOS辺りならこれでOKのはず。


インスタンスを起動

あとは普通にインスタンスが起動してくるのを待つだけです。出来上がったECSにSSHキーでログイン出来ることを確認してください。また、存在しないユーザー(root_testとか)でログインを試みて、「Permission denied (publickey,gssapi-keyex,gssapi-with-mic).」とか言われること(パスワードプロンプトが返ってこないこと)を確認してください。


雑に簡単にセキュア

とりあえず、最も典型的なユーザーデーターの使い方を雑に書いてみました。実際、クラウドプラットフォームの多くはこの処理と同じように、cloudinitの仕組みを用いてSSHキーを設定していますし、ユーザーデータの挙動を確認するにも丁度良いかなと思います。ユーザーデータは外部からのincludeやAPIでの設定もできて、インフラのコード化も進められますし、是非活用したいですね。

てゆっか、速くコンソールでSSHキー管理できるようにならないかなぁ〜。