AWSでクラウドストレージを作る

目次
はじめに
LAN内で使用している共有領域を、クラウドに移転するという業務に携わったので、記事にしてみます。
途中、どうしても共有領域に繋がらず、一日以上試行錯誤した件もあわせてご紹介します。
AWSとは
類似の技術として、VPSがあります。
VPSでは仮想サーバーをレンタルする形式になります。
OSやソフトウェアの選択、設定などが自由に行えるといえば聞こえが良いのですが、提供されるのはIPアドレスだけです。
何をするにしても自分でインストールし、設定しないといけません。
また、容量など様々な拡張も正直厳しいです。
一方のAWSは、サーバーだけでなく様々なサービスを提供していて、必要に応じて追加したり削除したりが比較的容易にできます。
VPSと比べれば、セキュリティも強固なので、現在、自社内にサーバーがあって業務に使用している場合、それをAWS上に移して、様々な場所からアクセスできるようにすることも可能です。
同様のサービスとしては、マイクロソフトのAzure や、さくらのクラウドなどがあります。
AWSを始めてみる
AWSを利用するには、AWSアカウントが必要です。
ちなみに、お買い物などで使用するAmazonのアカウントとは異なりますので、別途、アカウントを取得する必要があります。
アカウントの作成には、使用可能なスマートフォンと、クレジットカードが必要になります。
AWSのサイトでアカウントを取得

https://aws.amazon.comGoogleで、AWSと検索すれば、すぐに見つかります。
執筆時点では、画像のAWSクラウドで接続できます。

AWSアカウントで使用するメールアドレスを入力します。
今回は個人のgmailを使用しました。
アカウント名は「自社のクラウド」を英訳して名前にしました。
ボタン押下で、指定のアドレスに認証コードが届きます。

認証が取れたら、ログインなどに使用するパスワードを設定します。
画像にあるとおり、大文字、小文字、数字、英数字以外の文字(記号の事)を最低でも3つ組み合わせたパスワードを作成します。
出来るだけ複雑なパスワードを作成する事を強くオススメします。

ここでクレジットカード情報を入力します。
無料枠のみの使用でも、登録が必要となり、実際にカード決済が使えるかの確認で、1ドルの引き落としがあるようです。
私の場合は、数日後にカード会社から、外国での使用があったので、不正使用を疑われて確認の電話がありました。

スマホのメッセージに、本人確認用コードが送信されてくるので、これをページに入力します。

これでアカウント取得が完了しました。
最初に設定したメールアドレスとパスワードで、AWSのコンソールに入る事ができます。
ボタンの押下で、サインイン画面に進むことができます。
AWSのコンソールにログイン
VPCを設定する。
VPC(Virtual Private Cloud)は、クラウド上に仮想的なネットワークを構築するためのサービスです。
一般的にLANを構築するときの、ブロードバンドルーターを設置したり、コンピューターと配線したりする作業に近いです。

VPCの設定画面ですが、ここのアジアンパシフィックに1と表示されています。
これは、アカウントを作成した時点で作成されているデフォルトVPCです。
ほとんどの機能は、このデフォルトVPCが備えています。
サーバーを作成する
AWSでサーバーを設置するサービスは、EC2(Elastic Computing Cloud)になります。

AWSでは、サーバー1台が1インスタンスと表示されます。
この表示では、インスタンス(実行中)は0なので、実行されているサーバーはありません。
少し妙ですが、「インスタンスを起動」でサーバを設定します。

OSのスペックも設定可能です。
メモリ量やコア数を決定できます。
もちろん、メモリを大量に、コアを多数に「盛れば」高性能なサーバーになりますが、お値段もかかります。
今回は無料利用枠枠の1GBメモリのパターンです。
赤枠のキーペアは、起動前に設定します。

ネットワークの設定になります。
デフォルト設定だと、全てのIPアドレスから接続を許可+SSH接続を許可になっています。
実際の使用時は、IPアドレスを絞り込む必要が出てくるかと思いますが、今回はこのままで作成します。

キーペアを作成します。
名前を決めて入力します。
タイプはED25519を選択しました。
形式はOpenSSHを選択します。
キーペアを作成を押下すると、キーが作成されます。
自動的にダウンロードされますので、ブラウザのダウンロードフォルダをチェックしてください。
起動したサーバーに接続する

パブリックIPアドレスとユーザー名が表示されます。
ちなみに、ユーザー名は基本的に同じです。
また、パスフレーズが無いため、先ほどダウンロードしたキーがあれば、誰でもアクセスできてしまいます。
キーの扱いにはくれぐれも注意しましょう。
AWSを使って見る
無事にサーバーに接続できましたので、このサーバーに仕事をさせてみましょう。
VPSと同様、この状態でWEBサーバーを入れれば、WEBサーバーとしても使用できますが、今回はクラウドにファイルを保管する領域を作りたいというのがオーダーでしたので、ファイルサーバーを構築します。
サーバーにsambaを導入する

まず、useraddでsamba用のユーザーを作ります。
sudo useradd awssamba
追加したユーザーにパスワードを設定します。
sudo passwd awssamba
更に、sambaのユーザーとして同名のユーザーを指定し、パスワードを設定します。
pdbedit -a awssamba
これで、このサーバーに接続できるユーザーができました。

sambaの設定ファイルを修正/追記します
sudo vi /etc/samba/smb.conf
変更点は、
- workgroup をSAMBAから、WORKGROUPに変更
- load printersをnoに変更
- encrypt passwords = yes を追加
- セクション[awssamba]を追加
- comment = knowledgecommunication
- path = /home/awssamba
- writable = yes を追加
共有する場所として、作成したユーザーawssambaのHOME領域を指定します。
WORKGROUPに変更しましたが、これはWindows 系のデフォルトのワークグループ名です。
違うワークグループ名を使用していたら、それに合わせてください。
sambaに接続できるようにする
sambaの設定は完了しましたが、このままではAWSのサーバーに繋がりません。

現状、このサーバーで接続出来るポートは、インスタンスを設定するときに指定した、SSH用の22番ポートだけです。
sanba でサーバーに接続するためには、137,138、139ポートと、445ポートの接続が必要になります。
この画像のセキュリティグループのインバウンドルールで、使用するポートを設定します。

ルールを追加 ボタンを押下し、増えた枠に 137-139 の範囲と、SMBを指定します。
送信元は、SSHと同じく0.0.0.0/0なので、何処からでもOKになります。
設定が終わったら、ルールの保存を押下して、設定を保存します。
保存した瞬間から、この設定が反映されます。
接続……できない……
設定が完了したら、\\(¥マークを二つ)パブリックIPアドレス を入力すると、sambaユーザーのアカウントとパスワードが要求……されるはずなんですが

このように、アクセスできませんと表示されてしまいます。
ここからが実に長い闘いでした……。
ネットを漁り、ChatGPTなどにも訊ねましたが、どうしても繋がらず、ほとほと困り果てました。
原因は、IPv6オプションでした。
IPv6オプション(無料)は、フレッツ光回線もしくはビッグローブ光やドコモ光など光コラボレーション回線をご利用の方向けのIPv6接続サービスです。
私もまったく意識する事なく、このサービスを使用していましたが、このサービスには一つ、罠が仕掛けられていました。
IPv6オプションで利用できないサービスの中に「一部通信型ゲームなど、特定ポートを使用するサービス、または、複数のユーザでIPアドレスを共有すると利用できないサービス」が入っていました。
この特定ポートの中に引っかかった?ようです
スマートフォンをテザリングにして、ノートPCから繋いでみると

\\(¥マークを二つ)パブリックIPアドレス を入力すると、sambaユーザーのアカウントとパスワードが要求されました。
useraddで作成したユーザー名、awssambaとパスワードを入力すると

SSHから確認すると、ちゃんとファイルが保存されていて、中身も一致しました。
SMBのポートを閉鎖しているのは不自然なので
しかし、いくらIPv6オプションが「特定ポートを使用するサービス」を利用できないとはいえ、SMBのような重要なポートが閉鎖されいるのは不自然です。
例えば、このサイトはSSL化されていますから、実体としては443ポートのデータをやりとりしています。つまり、SSLのポートは閉鎖されていない事になります。
なのに近似の445ポートが使用できないというのは、どうも腑に落ちません。

IPv6オプションでは、ルーター機の設定画面と別に、http://192.168.1.1:8888/t/ という設定画面でポートの設定を行います。
調べてみると、セキュリティ上の理由や、マルウェア対策などで、デフォルトで閉鎖されてる場合があるとの記載が……
この情報、ネット上での検索にも、ChatGPTでも提示されませんでした。
全部削除しても良いのですが、削除すると全IPを許可した事になり、セキュリティ上の懸念が発生するとの事なので、AWSのサーバーだけを許可します。

種別を通過に変更します。
送信元アドレスにパブリックIPアドレス を入力します。
サーバーの停止・再起動
作成したサーバーのメンテナンスを行います。
インスタンスを停止する
インスタンスを起動する

停止しているインスタンスを選び、インスタンスの状態から「インタンスを開始」を選択すれば、起動できます。
起動すると、パブリックIPアドレスが変ります。
このため、IPv4パケットフィルタ設定の送信元アドレスも書き換える必要があります。
インスタンスを終了する

ここで終了を選択すると、インスタンスは終了されます。
サーバー内のデータ、設定はすべて消失しますので、くれぐれもご注意ください。
しばらくは、インスタンス一覧に表示されていますが、やがてリストからも消滅します。
まとめ
AWSを利用すれば、クラウドストレージは比較的簡単にできます。
ただし、AWSは有料サービスなので、このストレージを永続的に使用するには料金がかかります。
コストと利便性をよく検討して、設置しましょう。
また、繋がらない場合、自分のISP(Internet Service Provider)の契約と、ルーターの設定を確認しましょう。