カテゴリー: システム構築記録

  • AWS で RSBASE 動作環境を構築した一日:S3・EC2・DNS・AMI までの実録ログ

    今日は、自分が以前運用していた医療用ファイリングソフト「RSBASE」を、AWS 上の Windows Server に構築する作業を進めた。
    ローカルでは長年扱ってきた環境だが、AWS でゼロから構築するとなると、
    S3、IAM、EC2、ストレージ、DNS と幅広い知識が求められ、なかなか濃い一日になった。


    1. S3 バケットの作成とローカル → AWS へのファイル転送

    RSBASE 本体はフォルダ構造が重要で、そのまま EC2 に持っていく必要がある。
    当初は Windows から aws s3 sync を使って直接コピーしようとしたが、
    ディレクトリ構造が崩れてしまう問題が発生

    ▶ Synce失敗例(階層が壊れる)

    aws s3 sync E:\ s3://aws-yasuda-work-bucket-tokyo/installers/
    

    数万ファイルをコピーしたが、
    「リンク」「ショートカット」「一部のディレクトリ」などが乱れ、
    RSBASE のように “素の構造” が命のソフトでは致命的。


    2. 解決策:ZIP 化して S3 へアップロード

    最終的に取った方法はとてもシンプル:

    ✔ 圧縮(ZIP)

    → アップロード
    → EC2 で解凍して配置

    ZIP 化したところ約 3GB にまとまり、確実にコピーできた。

    ▶ アップロードコマンド

    aws s3 cp .\rsbase.zip s3://aws-yasuda-work-bucket-tokyo/installers/
    

    ▶ EC2 側でダウンロード

    aws s3 cp s3://aws-yasuda-work-bucket-tokyo/installers/rsbase.zip .
    

    この方式が一番安定し、S3 の PUT/GET の課金も最小に抑えられる。


    3. EC2 Windows Server のセットアップ

    ✔ IAM ロール(S3 アクセス権)を追加

    途中、Unable to locate credentials が出ることもあったが、
    EC2 の IAM ロールが正しく設定されていれば認証情報は不要。

    ▶ 反映確認コマンド

    aws sts get-caller-identity
    

    結果が以下になっていれば EC2 が IAM ロールを使っている状態:

    "Arn": "arn:aws:sts::<アカウントID>:assumed-role/EC2-SSM-Role/i-xxxxx"
    

    4. EBS 増設(Eドライブ)

    構築開始後に気づいたが、
    初期構成では C ドライブしかなく RSBASE を置くには狭い。
    そこで EBS を 20GB 追加し、Eドライブとして利用。

    手順:

    1. EC2 → ボリューム → 新規作成
    2. 「アタッチ」
    3. Windows でディスク管理 → 初期化 → NTFS でフォーマット

    5. RSBASE の配置と動作確認

    ZIP を解凍し、必要なパスへ配置。
    RSBASE の Apache を起動すると EC2 内では正常動作 を確認。


    6. ローカル PC からのアクセス:80番を開ける

    EC2 のセキュリティグループに Windows Server 用に HTTP(80) を追加。

    ただし、全世界に開放するのは危険なので
    MyIP(自身のグローバルIP限定) に設定。

    Windows Firewall も忘れずに

    GUI から

    受信の規則 → 新しい規則 → TCP 80 → 許可
    

    設定後、ローカルPCから

    http://<EC2のパブリックIP>
    

    でアクセス成功。


    7. Elastic IP(固定IP)を割り当てる

    一度アクセスできても、EC2 の再起動で IP が変わるので、
    Elastic IP を割り当てて固定化した。

    割り当て後、次のように表示されていれば OK。

    パブリック IPv4: 〇〇〇.〇〇〇.〇〇〇.〇〇〇(Elastic IP)
    

    8. DNS 設定(Route53 → お名前.com DNSへ切り替え)

    本命は Route53 に移すことだったが、
    お名前.com のドメインが「ネームサーバの変更不可状態」 になっており移行できなかった。

    理由:
    レンタルサーバ(WordPress)が同じドメインを使っており、
    ネームサーバ変更がロックされていたため。

    そのため、今回の方法:

    お名前.com の DNS に A レコードを追加する方式へ変更

    rsbase.medical-engineering.jp → <Elastic IP>
    TTL:600
    

    反映は最大 24 時間程度。


    9. バックアップ(AMI 作成)

    最後に EC2 の AMI を作成。
    説明文に日本語を入れるとエラー:

    Character sets beyond ASCII are not supported.
    

    対策:
    → 英字のみで AMI 名・説明文を入力
    → 再作成して成功。

    AMI 作成中はインスタンスが再起動される場合があるが問題なし。


    まとめ:今日の成果

    • S3 による RSBASE 配布方式の確立
    • EC2 Windows Server で RSBASE 動作確認
    • EBS 増設で十分なストレージ確保
    • HTTP 公開と Windows Firewall 設定
    • Elastic IP により固定アクセスが可能に
    • DNS は Route53 ではなく お名前.com DNS を継続使用
    • AMI を作成し、復元可能な状態になった

    AWS の基礎からネットワーク、バックアップまで
    一通りの構築作業を実践できた濃い日となった

    明日は DNS が浸透しているはずなので、
    http://rsbase.medical-engineering.jp/ でアクセスできるのを楽しみにしたい。

  • AWS CLI 構築から Session Manager 経由の安全なRDP接続、Windows Server 初期設定まで(個人開発環境の構築記録)

    クラウド上に安全な Windows 開発環境を作りたくて、AWS EC2・Session Manager(SSM)・RDP を組み合わせた構成を作りました。

    ローカルPCに負荷をかけず、いつでも起動・停止できる快適な開発環境です。

    この記事では次の内容をまとめています:

    AWS CLI のセットアップ Session Manager を使った “外部公開ゼロ” のRDP環境構築 Windows Server 2022 の初期設定(日本語化・時刻・安全設定) IAMユーザーとWindowsアカウントの整理(最小権限化)

    1. AWS CLI のセットアップ

    AWS上のEC2に安全にアクセスするため、CLI専用のIAMユーザーを作成しました。

    1-1. IAM ユーザー「cli-user」を作成

    今回は CLI専用アカウント として完全に分離。

    作成内容

    ユーザー名:cli-user アクセス方法:Access key(プログラムアクセス)

    付与ポリシー:

    AmazonSSMFullAccess

    AmazonEC2ReadOnlyAccess

    AdministratorAccess は不要(セキュリティ的にも排除)

    セキュリティ:

    後からグループを調整し、最低限の権限だけ付与する構成に変更。

    1-2. AWS CLI インストール

    ローカルPC(Windows)側でインストール:

    公式:

    https://aws.amazon.com/cli/

    インストール後

    aws –version

    1-3. 設定(aws configure)

    CLIにキーを登録:

    aws configure

    登録例:

    AWS Access Key ID: xxxxxxxxxxxxx
    AWS Secret Access Key: xxxxxxxxxxxxx
    Default region: ap-northeast-1
    Default output: json

    動作確認

    aws sts get-caller-identity

    出力に cli-user が表示されれば成功。

    2. Session Manager(SSM)経由でRDPする安全構成

    RDP の 3389ポートを完全に閉じたまま

    AWS Systems Manager (SSM) でトンネルを張り、

    安全にRDP接続する仕組みを構築しました。

    これで外部攻撃リスクはゼロになります。

    2-1. Windows Server 側:SSM Agent の更新

    EC2 上の Windows Server にログインし、PowerShellで実行。

    最新版のSSM Agentを取得

    Invoke-WebRequest https://github.com/aws/amazon-ssm-agent/releases/latest/download/AmazonSSMAgentSetup.exe
    -OutFile SSMSetup.exe

    インストール

    Start-Process .\SSMSetup.exe -ArgumentList “/S” -Wait

    サービス再起動

    Restart-Service AmazonSSMAgent

    2-2. ローカルPC→EC2 へポートフォワード(RDPトンネル作成)

    CLI で Session Manager のポートフォワードを開始。

    aws ssm start-session --target i-xxxxxxxxxxxxxxx
    –document-name AWS-StartPortForwardingSession `
    –parameters “localPortNumber=13389,portNumber=3389”

    これでローカルPCの:

    localhost:13389 → EC2の3389(RDP)

    という安全トンネルが確立します。

    ※ この PowerShell ウィンドウは閉じないこと

    (閉じたい場合は Ctrl + C)

    2-3. RDP接続(外部公開ゼロで接続)

    Windows の RDP クライアント(mstsc)で:

    localhost:13389

    ユーザー名:Administrator

    パスワード:EC2初回ログイン時に取得したもの

    2-4. セキュリティグループから RDP を完全削除

    トンネルRDPが動くのを確認した後、

    セキュリティグループのインバウンドルールから TCP 3389(RDP)を削除。

    結果:

    外部からの RDP → 完全遮断 Session Manager 経由だけ → 許可

    AWSが推奨する“最も安全なWindows運用”になります。

    3. Windows Server 2022 の初期設定

    Session Manager RDPで接続後、サーバの初期設定を実施。

    3-1. 日本語化(表示言語)

    Settings → Time & Language → Language & Region

    → Japanese を追加

    → Windows display language に設定

    → 再起動

    システムロケールも日本語へ

    Control Panel → Region → Administrative → Change system locale → 日本語

    3-2. タイムゾーン(日本時間)

    Set-TimeZone -Name “Tokyo Standard Time”

    3-3. Windows Update の適用

    最新の更新プログラムをすべて適用。

    IME のバージョン確認は不要。

    Windows Update が最新ならIMEも最新に更新される。

    3-4. Windows Firewall

    デフォルト設定のままでOK(推奨) 不要なルールを無効にするとSSMや内部通信が壊れる可能性があるためそのままにする

    ポイントは:

    外部からの攻撃は SecurityGroup で完全に遮断済み

    Windows Firewall はデフォルトでよい

    4. IAM と Windows アカウントの整理(セキュリティ強化)

    最後に、AWS/Windows のアカウントを最適化。

    4-1. cli-user の権限を必要最小限に変更

    最終構成:

    AmazonSSMFullAccess AmazonEC2ReadOnlyAccess

    → AdministratorAccess は削除

    → IAMグループも安全な状態に調整済み

    4-2. Windows Server側も“個人管理者アカウント”を作成

    セキュリティ向上のため:

    Administrator(デフォルト)

    自分専用の管理者アカウント

    この2つに変更。

    → Administratorを使い続けるより安全でログも明確。

    まとめ:今回構築した環境の特徴

    AWS CLI で SSM を安全に実行できる Session Manager のポートフォワードで RDP 接続 外部から3389を完全に閉じた“最強の安全構成” Windows Server を日本語化・最新化 IAM権限とWindowsアカウントを分離 低コスト(停止中は EBS のみ課金)

    ローカルPCに依存せず、

    必要な時だけEC2を起動して安全に作業できる開発環境が完成しました。

  • クラウドで開発環境を構築した日の記録(AWS EC2 / Windows Server / VPC構築)

    はじめに

    自分のPCマシンがスペック的にやや厳しく

    ローカルPCに無理して環境を入れるより、

    クラウド側に Windows Server を用意してそこで作業するほうが快適だと判断しました。

    今回は AWS 上に 専用 VPC → サブネット → EC2(Windows Server) を作成し、

    RDP 接続、SSM(Session Manager)準備、セキュリティ強化まで一通り実施したので、

    その作業記録を整理します。

    将来的には AWS CLI や Session Manager 経由の RDP に移行予定ですが、

    まずは GUI が使える環境までを構築した記録です。

    1. AWSで「空のVPC」を作成する

    まず行ったのは VPCの設計。

    AWS の VPCウィザードは色々テンプレートがありますが、

    今回は余計なリソースを避けるため 完全に空のVPC を作成しました。

    ✓ 作成内容

    VPC: CIDR:10.0.0.0/16 サブネット:作らず「空の状態」で作成 IGW(インターネットゲートウェイ):後でアタッチするため、最初は作らない

    この時点のポイント

    空のVPC から始めると、意図しない NAT Gateway などの 有料リソースが勝手に作成されない 結果的に 最安構成での構築ができる

    2. パブリック・サブネットを作る

    次に、手動で パブリックサブネット を作成。

    ✓ 設定内容

    サブネット名:public-subnet CIDR:10.0.1.0/24(※よくある構成)

    アベイラビリティゾーン:ap-northeast-1a IPv4 自動割り当て:有効

    パブリック扱いにするためにやったこと

    IGW を新規作成 VPC にアタッチ ルートテーブルを作成 0.0.0.0/0 → IGW を追加 public-subnet にアソシエイト

    3. EC2(Windows Server 2022)を作成

    ✓ スペック

    AMI:Windows Server 2022 Base

    インスタンスタイプ:t3.large ディスク:80GB(gp3)

    パブリックIP:自動割り当て セキュリティグループ: RDP(TCP 3389) → 一旦 0.0.0.0/0 後で「日本国内に限定」へ変更

    EC2 作成後、RDP を使ってサーバにログイン。

    4. Windows Server の初期設定(日本語化)

    インスタンスは英語版なので以下対応を実施。

    Settings → Time & Language → Language Japanese を追加

    Language Pack Install Display / Keyboard / Region を全部 Japanese に 再起動

    ロケールも変えるのを忘れないように

    これで Windows Server が完全に日本語化される。

    5. AWS Systems Manager(SSM)準備

    Session Manager は今後利用予定。

    EC2 に自動インストールされているはずの SSM Agent が

    「オンラインにならない」問題が発生したため、トラブルシューティングを実施。

    ✓ IAM ロール確認

    EC2 にアタッチされたロール → AmazonSSMManagedInstanceCore (これは問題なし)

    ✓ 最新の SSM Agent を手動インストール

    GitHub からダウンロードして直接修復:

    Invoke-WebRequest https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/amazon-ssm-agent/latest/windows_amd64/AmazonSSMAgentSetup.exe -OutFile SSMSetup.exe
    Start-Process .\SSMSetup.exe -ArgumentList “/S” -Wait
    Restart-Service AmazonSSMAgent

    エラーが多発したが、最終的に 地域リージョン直参照URLで成功。

    6. RDP のセキュリティ強化(国内IP限定)

    最終的に RDP の許可範囲を制限。

    ✓ 設定内容(Security Group)

    RDP(TCP 3389) → 133.0.0.0/8(日本国内のIP帯) ※ 0.0.0.0/0 から変更

    これにより、海外からのアタックをほぼ完全に遮断できる。

    ✓ 接続テスト

    自宅の Global IP(OCN光)から接続 問題なく接続できることを確認 「つながらない問題」は → 自宅IPが NTT/OCN帯の 153.xxx だったため。 → 日本国内帯に含まれるので問題なし

    7. セキュリティの最終方針

    今回の構築で明確にした方針:

    ✔ 現時点:

    GUI 操作は RDP(日本国内IP限定) 通信ログは最低限

    ✔ 将来:

    AWS CLI の導入 Session Manager + ポートフォワーディングで RDP Public IP を使わず Private RDP に移行する

    最終的には インスタンスを完全非公開で運用することが目標。

    8. クラウド料金の最適化

    今回の構成は非常に安価。

    ✓ インスタンス停止中 → 課金されるのは EBS のみ

    EBS(gp3 80GB) → 約 150円 / 月 → 年間 1,800円ほど

    ✓ Elastic IP は使用していない

    → 追加料金ゼロ

    ✓ NAT Gateway なし

    → 0円

    つまり 実質 月150円のクラウド Windows Server を手に入れた形。

    9. 今日学んだこと(まとめ)

    空のVPC作成 → サブネット → IGW → ルート設定 は手動でやると理解が進む

    EC2 自動割り当ての Public IP で十分運用可能

    SSM Agent は地域ごとのパスに注意

    RDP は「国内IP限定」にするだけでセキュリティが跳ね上がる。あとのリスクは許容する。

    インスタンス停止すれば月150円運用が成立する

    Session Manager を使えば将来的には RDP すら不要になる

    おわりに

    クラウドの Windows Server を「自分専用のデスクトップ環境」として使うのは

    実際にやってみると意外と簡単で、

    かつローカルPCよりも負荷が軽くて快適でした。

    今後は AWS CLI の導入、Session Manager による

    よりセキュアな無公開運用に切り替えていく予定です。

    また次のステップを進めたら記事にしていきます。