当サイトではIT・Web系技術、メタバースなどの情報提供を目的とします。
個人的な技術ブログなども投稿する予定です。

【AWS】LightSailへのWebアクセスをCloudFrontリクエスト以外を無効化する

こんにちは。ゆーろんです。 最近このWEBサイトへのアクセスログを見ると、CloudFront経由ではなく直接HTTPリクエストを送って見られることが多いです。 ログを見るとKali付属のツールを使ってスキャニングを行いセキュリティホールを探すようなリクエストばかりでした。 特に海外からのスキャニングが多い…。 セキュリティ強度を上げるため、HTTP/HTTPSリクエストはCloudFrontのみから受け付けるようにすることにしました。 というわけでその方法をメモしていきます。 目次 CloudFrontのみのアクセスにする仕組み 環境 実装手順 CloudFrontの設定 Webサーバの設定 動作確認 CloudFrontのみのアクセスにする仕組み 仕組みとしては以下の通りです。 CloudFrontからオリジンへリクエストを送る際に秘密の独自HTTPヘッダを付与 オリジン側では独自HTTPヘッダが付いていればCloudFrontからのリクエストと判断し、もし付いていなければ403を返してアクセス拒否する 結構、仕組みはシンプルです。 CloudFrontの機能で「カスタムヘッダーの追加」という設定項目で自由にヘッダーを付けることができるので使用します。 環境 環境は以下の通りです。 CDN: CloudFront Webサーバ: Apache Apache以外も大体似た感じに設定できると思うので適宜読み替えてください。 実装手順 CloudFrontの設定 CroudFrontのすでに展開しているディストリビューションを編集し以下画像のように任意のヘッダと任意の文字列を追加します。 なお文字列は推測されにくい文字列を設定することをお勧めします。 これで設定を反映したらステータスがDeployedになるまで待ちます。 Webサーバの設定 Lightsailの場合は/etc/apache2/apache2.confがApacheの設定ファイルになります。 設定ファイルに以下のように追加(<と>はとってください)。 <Directory /opt/bitnami/wordpress> Require all granted AllowOverride All SetEnvIf <任意のヘッダ名> \"^<任意の文字列>\" CDNValid Order deny,allow Deny from all Allow from env=CDNValid </Directory> 動作確認 curlコマンドでオリジンへ直接アクセスし以下のようにレスポンスがあれば成功。 curl <オリジンのIPアドレス>/wordpress <!DOCTYPE HTML> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don\'t have permission to access this resource.</p> </body></html> これでHTTPリクエストでオリジンへ直接アクセスすることを禁止にできました。

【AWS EC2】TeraTermでのAmazon Linux 2023の初期設定

こんにちはゆーろんです。 今回はAWSのEC2においてAmazon Linux 2023を設定した際にボトルネックになったポイントがあったのでその対策方法なども紹介します。 ゆーろん 久しぶりにEC2を立てたらいろいろ変わっていたので紹介します。 目次 Amazon Linux 2023の特徴 TeraTerm4.0以前でTeraTermでSSH接続するための設定 その他の基本設定 ホスト名の変更 タイムゾーンの変更 ロケールの設定 SELinuxの無効化 ユーザの作成 Amazon Linux 2023の特徴 Amazon Linux 2023は2023年3月15日にリリースされたEC2の新しいイメージです。 特徴としては以下の通りです。 ベースとなるOSがRedHatからFedoraへ変更 サポートは3年間(EOLは2028年3月15日まで) パッケージ管理ツールの変更(yumからdnf) SELinuxがデフォルトの無効状態からパーミッシブモードに変更 初期状態ではrsyslogやcronieがインストールされていない SSHサーバのデフォルト値が変更(デフォルトではssh-rsa署名が無効) クラウド向け Linux | Amazon Linux 2023 | Amazon Web Services Amazon Web Services, Inc. Amazon Linux 2023 では、クラウドアプリケーションを開発して実行するため、セキュリティに重点を置いた安定した高性能オペレーティングシステムを提供します。 特にTeraTermを使ってAL2023のインスタンスにアクセスする場合、Version5.0以上を使用する必要があります。 これはTeraterm 5.0 beta 1以上からrsa-sha2-256 および rsa-sha2-512プロトコルがサポートされているからです

AWS LightSailのApacheログをS3に転送する

こんにちは。ゆーろんです。 今回はAWS LightSailのWordPreess構成におけるApacheのログをS3に転送する方法を1つを紹介します。 目次 LightSailのログをS3に転送する方法 今回の目的 設定手順 Apacheのアクセスログを日付ベースで作成させる AWSにてS3転送用のIAMユーザを作成する aws cliにS3転送用IAMユーザ情報を登録する 任意のフォルダにShellScriptを作成する CrontabにShellScriptを登録する LightSailのログをS3に転送する方法 LightSailのログをS3に転送する方法はいくつかあります。 私の知る限りの具体例を2つ出してみます。 CloudWatch Agentを利用してCloudWatch logsにログ転送後Lambda+EventBridgeを用いてS3に転送 aws cliを利用したS3転送用のShellScriptを用意してCronやSystem-timerで回す 1の手法の特徴はログの様子をCloudWatchで観測できる点です。 ただ今回の場合、インスタンスはLightSailですから、AWSリソースも多く使用する必要があること、目的がS3に送ることなのに関して構成が回りくどいことから不採用にします。 2の手法はログをaws cli経由でS3に転送するといった単純なものです。 設定もS3転送用のIAMユーザの作成、aws cliのインストールやShellScriptの用意と定期実行系への登録で済みます。以上のことからこの手法を今回は採用します。 今回の目的 Apacheのaccess_logを日付毎に取得/生成し、それをS3に転送することを目的とします。 設定手順 Apacheのアクセスログを日付ベースで作成させる デフォルトではApacheのログはaccess_logに書き続けられます。 そのため日毎のaccess_log.日付などを生成しそこにログを書いてもらう必要があります。 LightSailのWordPress構成の場合Bitnami環境で構築されています。 設定ファイルは/opt/bitnami/apache/conf/httpd.confとなります。 このファイルをviやvimで開いてもらってCustomLog “logs/access_log” commmonの記述部分を以下のように変更します。 CustomLog "|/opt/bitnami/apache/bin/rotatelogs /opt/bitnami/apache/logs/access_log-%Y%m%d 864000 540" combined 上記記述はApacheの機能でログをローテーションさせています。 具体的には「access_log-20220314のようにログファイルを1日(864000秒)に1回、UTC+9時間(540分)のオフセットでcombined(commonにリファラやagent情報を含める)モードで作成/ログを保存する」という記述になります。 設定を保存後、以下コマンドでapacheを再起動します。 sudo /opt/bitnami/ctlscript.sh restart apache AWSにてS3転送用のIAMユーザを作成する AWS Console等でS3転送用のIAMユーザを作成します。 与える権限はS3に書き込みができるような権限(S3FullAccessなど)を与えます。 またIAMユーザ生成の際に作成したアクセスキー、シークレットキーはメモしておきます。 aws cliにS3転送用IAMユーザ情報を登録する Lightsailのbitnami環境ではaws cliはすでにインストールされています。 以下コマンドを入力してaws cliにS3転送用IAMユーザ情報を登録します。 aws configure その後、コンソールに表示される情報に従って、アクセスキー、シークレットキー、AWSのリージョン情報(例: ap-northeast-1)、デフォルトの保存形式(.txt, .logなど)を登録します。 任意のフォルダにShellScriptを作成する 任意のフォルダにtouchコマンド等でShellScriptを作成します。今の回例では“send_accesslog_s3.sh“と作成しました。 以下に記述例を示します。

LightSail上でメールアドレス配信をSESで有効化する

こんにちは。ゆーろんです。 今回はLighSail上のWordPress環境からAmazon SESを使用してメールを送信させる方法をまとめます。 お問い合わせフォームの設置にはGoogle Formを埋め込む、LightSailにメールサーバ機能を追加するなどの方法もありますが Amazon SESを使用したほうがセキュリティ的にも良いのでSESを採用します。 目次 AmazonSESとは 実装の目標と手順 Identifyの作成 ドメインの検証 メールアドレスの検証 SMTPクレデンシャルの作成 テストメールの送信 WP Mail SMTPの設定 AmazonSESとは Amazon SES(Amazon Simple Email Service)はAWSが提供する電子メールサービスの1つです。 既存ドメインまたは既存のメールアドレスを利用して、メール配信をすることができます。 特徴としては以下の通りです。 信頼性と高い配信性能 メールの監視と管理が可能 低価格 実装の目標と手順 WordPressからSESを利用して特定のメールアドレスにお問い合わせ内容を送信できるようにする。 なおメール受信は行わず送信専用とする。 手順は以下の1から4を実施。 Identifyの作成 AWS SESのダッシュボード右より「検証済み ID」を選択。 ドメインの検証 SESのダッシュボード右「IDの作成」にて以下パラメータでIdentityの作成を行う。 IDタイプ: ドメイン ドメイン: Route53またはLightSailで設定してあるドメインを記載 DKIMの詳細設計 IDタイプ: Easy DKIM DNSレコードのRoute53への発行: 有効化 DKIM署名: 有効化 上記設定でドメインのID作成を行う。 Route53で設定してあるドメインを設定する場合数分以内に検証済みになる。 メールアドレスの検証 ドメインの検証と同様に「IDの作成」にて以下パラメータでIdentityの作成を行う。 IDタイプ: Eメールアドレス Eメールアドレス: 送信先の存在する実際のメールアドレスを設定 上記設定でメールアドレスのID作成を行う。 SMTPクレデンシャルの作成 SESのダッシュボード右「SMTP設定」にて「SMTP認証情報の作成」を選択。 画面に従いSMTP認証用のIAMユーザを作成し、作成後最後に表示されるSMTPユーザ名とSMTPパスワードをメモする。 テストメールの送信 AWS SESのページより「検証済み ID」を選択。 ドメインにチェックを入れて「テストEメールの送信」でメールが送れるかテストを行う。

【AWS】WordPressをLightsail+CloudFrontに移行した話

こんにちは、ゆーろんです。 今回は今回はレンタルサーバで動いていた当ブログ(yuuronacademy.com)をAWSのLightSail上に移動(お引越し)させたので、そのことに関してお話ししようと思います。 目次 使用したAWSのサービス LightSail CloudFront Route53 ACM 構築したアーキテクチャ 構築にあたっての小話 使用サービス サービス システム 基盤環境 アクセス解析 今後に関して 使用したAWSのサービス まず、今回利用したAWSのサービスに関して簡単に説明します。 LightSail AWS LightSailはAWSが提供しているVPS(仮想プライベートサーバ)です。 仮想マシンのEC2と異なり、VPCやサブネット等の作成も不要で、月額料金なためコスト見積もりしやすい特徴があります。 CloudFront AWS CloudFrontはAWSが提供しているCDN(コンテンツデリバリネットワーク)です。 サイトコンテンツ(静的・動的なウェブコンテンツ、ビデオ、アプリケーションデータなど)をAWSの管理する世界中のエッジサーバに配置することで効率的にデータを配信することができます。 CDNとは キャッシュサーバなどで構成されたシステムを用いることによって、Webサイト上のコンテンツを迅速にユーザに届けるための仕組み。 通常のWebサイトでは、コンテンツを配信するためのサーバの処理能力やネットワークの帯域幅などの影響で、沢山のユーザーがWebサイトにアクセスするとレスポンスが低下する。 また、物理的に離れた場所からのアクセスに対してネットワーク遅延によりレスポンスが低下する場合がある。そういったものに対処するための仕組みといえる。 Route53 AWS Route53はAWSが提供しているDNS(Domain Name System)です。 Route53ではドメインの登録やDNS、ロードバランサの機能などサイトアクセスのための様々なDNS機能を提供しています。 ゆーろん Route53の名前の由来はDNSのポート番号が53だからなのかな? ACM AWS Certificate ManagerはAWSが提供しているSSL/TLS証明書のサービスです。 AWS上でホストされるウェブサイトやアプリケーションに対して、暗号化通信を実現するためのSSL/TLS証明書の取得、管理、自動更新を行うことができます。 構築したアーキテクチャ 今回AWSで構築したリソースのインフラ構成図は概ね以下の通りです。 見ての通りLIghtSail+CloudFrontの構成となっています。 HTTPS化にALBの利用などをする方法もありますが、料金を抑えるためにCloudFrontでSSL終端を行う構成にすることにしました。 SSL終端構成により「サーバへ直接クライアントのアクセスをさせない」、「CloudFrontによるキャッシュ/高速化」を実現しています。 またサイトへのアクセスステップは以下のようになっています。 HTTPSによるアクセス(:443) Route53 CloudFront(:80) Route53 Static IP(Lightsail) 構築にあたっての小話 サイトのインフラ基盤の管理にあたって当初Terraformを利用することを計画し、以下のように実行可能なコードを作成をしました。 GitHub - yuron3141/aws-lightsail-tf: This repo is to create the wp lightsail instance with the terraform. GitHub This repo is to create the wp lightsail instance with the terraform. - yuron3141/aws-lightsail-tf 上記コードをAWS Cloud9上で利用し.tfstateはS3で管理するというものです。

AWSで共用EC2を構築した話

こんにちは。ゆーろんです。 12/4に友人と共用で使用するAmazon EC2を作成しました。 苦労した部分や前回EC2を建てたときとの違いや新たな発見や実装内容を記録しておきます。 目次 インフラ構成図 今回の構築で新しく取り組めた内容 AWSに関して Linux(Amazon Linux)に関して まとめと反省点 インフラ構成図 今回作成したEC2のアーキテクチャ図は以下のような感じです。 以前EC2でマイクラサーバを構築した際はELBやCloudWatchは利用しませんでした。 今回の構築で新しく取り組めた内容 今回の構築ではNLBとFlow logを使用しました。 AWSに関して 私だけではなく友人もEC2を停止・起動、なお且つEC2に入れる必要があったため初めてIAMのユーザを作成しました。IAMユーザ(EC2と停止,起動のみの権限)の作成とセキュリティグループの設定は比較的スムーズにできました。 またNLBとFlow Logsをインフラ構築に導入した理由は、EC2へ入ってくる通信を監視するためです。これによりEC2にアクセスをAWSコンソール上で監視できるためです。 Linux(Amazon Linux)に関して EC2には当初「Ubuntu22.04LTS」を入れてましたが、このディストリビューションではssh-rsa がデフォルトで無効になっているためTeraTermでアクセスする際のRSA鍵がうまく認証されませんでした。 修正するにはPowershellからSSH接続で入り、ssh-rsaを有効にする必要がありましたが、それを知ったのは「Amazon Linux」に変えた後でした… 結局RSA鍵で詰まって、以前構成したEC2と同じくAmazon Linuxを入れました。 ちなみにAmazon LinuxはRedHat / CentOS7系のディストリビューションと言われています。そのためPackage管理コマンドはaptではなくyumになります。 また今回初めてLinuxOS内で他のユーザやRSA鍵を生成しました。これによりユーザごとのディレクトリにファイルやディレクトリが構築できるので個人性を持った開発ができると思います。 まとめと反省点 今回は以前EC2を建てたときよりも、インフラ構成やネットワークの知識、Linuxの操作を以前より意識して組むことができたと思います。 ただ構築とLinux内の設定に5,6時間かかってしまったので、もっとAWSやネットワークを理解そしてAWSコンソールに慣れていきたいと思います。 ここまでご覧くださり、ありがとうございました。