こんにちは、私は入社5年目の社員で、AWS利用の経験は少ないですが、様々なAWSサービスを使って環境構築を行いました。今回のプロジェクトでは、AWSの基本知識をみにつけ、セキュアなシステム構築をおこなうことが目的でした。この記事では、それぞれのサービスの概要とポイントについて説明します。また、作業中に直面した課題や学んだことについても触れていきますので、これからAWSを使って環境構築を行う方々の参考になれば幸いです。
今回作成するシステムの簡易構成図を以下に示します。
特徴としてマルチAZを利用し可用性の高い構成をとっており、セキュリティ面ではWAFや管理者限定でVPNを使用しています。
※図における知っておきたい用語
①リージョンとアベイラビリティゾーン(AZ)
リージョンはAWSがサービスを提供している拠点(図にはない)
AZはリージョン内の更に細かい拠点
②VPC
AWS内でプライベートな空間を作りたいときに使用する
③インターネットゲートウェイ
VPCとインターネットを接続するために使われる
④ALB(ELB)
サーバーへの負荷を分散させる
⑤EC2
AWSが提供する仮想コンピューター
環境構築の最初のステップとして、IAMを使用してユーザーとグループを作成し、権限を割り当てました。セキュリティの観点から、最小限の権限を選択して付与しました。また、多要素認証(MFA)の設定も行い、アカウントのセキュリティをさらに強化しました。
※権限選択画面、ここでユーザーの権限を選択可能
次に、インフラの管理と自動化のためにCloudFormationを使用しました。既存のテンプレートを活用し、インフラのセットアップを迅速かつ効率的に行いました。これにより、EC2インスタンスの作成やサブネットの設定などを自動化し、一貫性を保ちながら迅速にデプロイメントを行うことが可能になりました。
※対象ファイルアップロード画面、ここでjson形式で作成したファイルをアップロードすることによりEC2などを自動で作成可能
ドメイン名の登録とDNSの設定にはRoute 53を使用しました。Route 53を使うことで、EC2インスタンスや他のAWSリソースに対するトラフィックを効果的に管理することができます。また、メールサービスとの連携のためにレコードタイプCNAMEとTXTを追加で作成しました。
※手動で作成する場合はレコード名、レコードタイプと値を入力。
今回の場合、メールサーバーにて作成されたレコード情報を入力した。
データベースにはAmazon Auroraの8系バージョンを使用しました。Auroraを選択した理由は、高可用性とスケーラビリティを簡単に確保できるためです。マルチAZ配置を設定し、フェイルオーバーを設定することで、高い可用性を実現しました。また、バックアップとスナップショットの自動化を行うことで、データの耐障害性とリカバリ性を向上させました。
※様々なdbの選択が可能
EC2インスタンスの作成と設定も行いましたが、これには既存のCloudFormationテンプレートを使用しました。テンプレートを利用することで、インスタンスの設定やサブネットの配置を自動化し、手動設定によるミスを防ぎつつ効率的に環境を構築しました。適切なインスタンスタイプを選定し、セキュリティグループとネットワークACLを設定して、セキュリティを強化しました。
セキュリティと信頼性を確保するために、Certificate Managerを使用してSSL/TLS証明書を取得しました。この証明書をCloudFrontおよび他のリソースに適用することで、HTTPS通信を確保し、データの暗号化とセキュアな通信を実現しました。
※ドメインの所有権と暗号化アルゴリズムの選択が可能
コンテンツの配信にはCloudFrontを使用しました。CloudFrontを使うことで、エッジロケーションからの低レイテンシでのコンテンツ提供ができるようになりました。これにより、UXが向上し、サイトのパフォーマンスも大幅に改善されます。また、キャッシュポリシーを設定し、静的コンテンツのキャッシュを効率的に管理しました。上記設定によりサーバーが停止している際には、カスタマイズしたメンテナンスページを表示され、ユーザーに対して適切なメッセージを提供できるようになりました。
※サーバー停止時に自動で表示されるメンテナンス画面
Webアプリケーションのセキュリティを強化するために、WAFとShieldを設定しました。WAFを使用して、SQLインジェクションやXSSなどの一般的な攻撃からアプリケーションを保護しました。また、Shieldを利用することで、DDoS攻撃からアプリケーションを守り、高度なセキュリティを提供しました。
AutoScaleを使用して、トラフィックの変動に対応できるようにしました。AutoScalingグループの設定にはテンプレートのLambda関数を使用しました。これにより、特定の条件を満たすと、自動的にインスタンスを追加または削除するようになりました。また、リソースの自動スケーリングが可能になり、コスト効率が向上しました。
※lamdaの関数作成画面、記載したコードが実行可能
環境のセキュリティを監視するためにGuardDutyを使用しました。GuardDutyは、AWSアカウント内の不審な活動や異常な動きを検知し、リアルタイムでアラートを提供します。これにより、潜在的なセキュリティ脅威を迅速に特定し、対応することが可能になりました。
上記のAWSサービスを使用した設定とは別に、サーバー上でサーバー証明書の作成や権限設定などの基本的な設定をおこないました。また、ドメインを設定し、適切なDNS設定を反映させました。さらに、syslogの設定を行い、ログの一元管理と監視を強化しました。
データの保護とリカバリのために、AWS Backupを使用しました。定期的なデータのバックアップの自動化は意図しないデータ削除後のリカバリに対応するためです。また、Webアプリケーションに対してベーシック認証を設定し、アクセス制御を強化しました。
※サイトを開く際にベーシック認証ポップアップが表示され、ログインしなければ接続することができないようになっている
このようにして、AWSの様々なサービスを活用し、環境を構築しました。初めての経験が多く、試行錯誤もありましたが、最終的には効率的で堅牢なシステムを構築することができました。
特にサーバー上の設定は非常に時間がかかり、サーバー証明書の作成、権限設定に多くの時間を費やしました。これらの作業は非常に細かく、慎重さを要するため、学ぶことが多かったです。また、問題が発生した際にはトラブルシューティングが必要で、解決するまでに多くの時間と労力を要しました。
この記事が、これからAWSを使って環境構築を行う方々の参考になれば幸いです。
TOP > 初心者のAWS環境構築について