LAMP のチュートリアル AWS Cloud9 - AWS Cloud9

AWS Cloud9 は、新しいお客様では利用できなくなりました。 AWS Cloud9 の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

LAMP のチュートリアル AWS Cloud9

このチュートリアルでは、LAMP (Linux, Apache HTTP サーバー、MySQL および PHP) が AWS Cloud9 開発環境内にあります。

このチュートリアルに従い、このサンプルを作成すると、 に料金が発生する可能性があります AWS アカウント。これには、Amazon Elastic Compute Cloud (Amazon ) AWS のサービス などの の料金が含まれますEC2。詳細については、「Amazon EC2料金」を参照してください。

前提条件

このサンプルを使用する前に、設定が次の要件を満たしていることを確認します。

  • 既存の AWS Cloud9 EC2開発環境が必要です。このサンプルは、EC2Amazon EC2 Linux または Ubuntu サーバー。別のタイプの環境またはオペレーティングシステムがある場合、このサンプルの指示を関連ツールを設定する必要がある場合があります。詳細については、「での環境の作成 AWS Cloud9」を参照してください。

  • 既存の環境の AWS Cloud9 IDEは既に開いています。環境を開くと、 はウェブブラウザでその環境IDEの AWS Cloud9 を開きます。詳細については、「AWS Cloud9 で環境を開く」を参照してください。

ステップ 1: ツールのインストール

このステップでは、以下のツールをインストールします。

  • Apache HTTP サーバー、ウェブサーバーホスト。

  • PHPは、ウェブ開発に特に適したスクリプト言語であり、 に埋め込むことができますHTML。

  • MySQL: データベース管理システム。

次に、このステップを終了します。Apache HTTP サーバーと の順に MySQL.

  1. インスタンスに最新のセキュリティ更新プログラムとバグ修正が適用されていることを確認します。これを行うには、 のターミナルセッションで AWS Cloud9 IDE、 yum update for (Amazon Linux) または apt update for (Ubuntu サーバー) コマンド。(新しいターミナルセッションを開始するには、メニューバーで、[Window (ウィンドウ)]、[New Terminal (新しいターミナル)]の順に選択します。)

    Amazon Linux の場合:

    sudo yum -y update

    [ Ubuntu サーバー:

    sudo apt -y update
  2. 以下を確認する Apache HTTP サーバーは既にインストールされています。これを行うには、 httpd -v (Amazon Linux の場合) または apache2 -v ( の場合) を実行します。Ubuntu サーバー) コマンド。

    成功すると、出力には が含まれます。Apache HTTP サーバーバージョン番号。

    エラーが表示された場合は、 をインストールします。Apache HTTP install コマンドを実行してサーバー。

    Amazon Linux の場合:

    sudo yum install -y httpd24

    [ Ubuntu サーバー:

    sudo apt install -y apache2
  3. 以下を確認する PHP は、 php -v コマンドを実行して既にインストールされています。

    成功した場合、出力にはPHPバージョン番号が含まれます。

    エラーが表示された場合は、 install コマンドPHPを実行して をインストールします。

    Amazon Linux の場合:

    sudo yum install -y php56

    [ Ubuntu サーバー:

    sudo apt install -y php libapache2-mod-php php-xml
  4. 以下を確認する MySQL は、 mysql --version コマンドを実行して既にインストールされています。

    成功すると、出力には が含まれます。MySQL バージョン番号。

    エラーが表示された場合は、 をインストールします。MySQL install コマンドを実行します。

    Amazon Linux の場合:

    sudo yum install -y mysql-server

    [ Ubuntu サーバー:

    sudo apt install -y mysql-server
  5. をインストールした後 Apache HTTP サーバー、PHP および MySQL、開始 Apache HTTP 次のコマンドを実行して、サーバーを起動し、起動したことを確認します。

    Amazon Linux の場合 (このコマンドを 2 回実行する必要がある場合があります):

    sudo service httpd start && sudo service httpd status

    [ Ubuntu サーバー (コマンドプロンプトに戻るには、 を押しますq)。

    sudo service apache2 start && sudo service apache2 status
  6. スタート MySQL、次のコマンドを実行して、起動したことを確認します。

    Amazon Linux の場合:

    sudo service mysqld start && sudo service mysqld status

    [ Ubuntu サーバー (コマンドプロンプトに戻るには、 を押しますq)。

    sudo service mysql start && sudo service mysql status

ステップ 2: セットアップ MySQL

このステップでは、MySQL フォローする MySQL セキュリティのベストプラクティス。これらのセキュリティのベストプラクティスには、ルートアカウントのパスワードの設定や、ローカルホストの外部からアクセス可能なルートアカウントの削除が含まれます。他に注意すべきベストプラクティスとしては、匿名ユーザーの削除、テスト用データベースの削除、test_ で始まる名前のデータベースに誰でもアクセスできる権限の削除があります。

次に、 の開始と終了を練習して、このステップを終了します。MySQL コマンドラインクライアント。

  1. を実装する MySQL のセキュリティのベストプラクティス MySQL のターミナルセッションで次のコマンドを実行してインストールします AWS Cloud9 IDE。

    sudo mysql_secure_installation
  2. プロンプトが表示されたら、指定されたとおりに次の質問に回答します。

    Amazon Linux の場合:

    1. root の現在のパスワードを入力 (ない場合は Enter キー)Enterを押してください (パスワードがない場合)。

    2. root のパスワードの設定Y と入力し、Enter を押してください。

    3. 新しいパスワード – パスワードを入力し、Enter を押してください。

    4. 新しいパスワードの再入力 – パスワードを再入力し、Enter を押してください。(後に使用できるように、パスワードは安全な場所に保存してください。)

    5. 匿名ユーザーの削除Y と入力し、Enter を押してください。

    6. root のリモートログインを禁止Y と入力し、Enter を押してください。

    7. テストデータベースを削除し、アクセスするY と入力し、Enter を押してください。

    8. 権限テーブルを再ロードY と入力し、Enter を押してください。

    [ Ubuntu サーバー:

    1. VALIDATE PASSWORD プラグインをセットアップしますか – と入力しy、 を押しますEnter

    2. パスワード検証ポリシーには 3 つのレベルがあります01、または 2 と入力し、Enter を押します。

    3. 新しいパスワード – パスワードを入力し、Enter を押します。

    4. 新しいパスワードの再入力 – パスワードを再入力し、Enter を押します。後に使用できるように、パスワードは安全な場所に保存してください。

    5. 提供されたパスワードを続行しますか?y と入力し、Enter を押します。

    6. 匿名ユーザーの削除y と入力し、Enter を押します。

    7. ルートのリモートログインを禁止y と入力し、Enter を押します。

    8. テストデータベースを削除し、アクセスするy と入力し、Enter を押します。

    9. 権限テーブルを再ロードy と入力し、Enter を押します。

  3. と直接やり取りするには MySQL、 を起動します。MySQL 次のコマンドを実行して、ルートユーザーとしてのコマンドラインクライアント。プロンプトが表示されたら、先ほど設定した root ユーザーのパスワードを入力し、Enter を押します。プロンプトは、 にいるmysql>間に に変わります。MySQL コマンドラインクライアント。

    sudo mysql -uroot -p
  4. を終了するには MySQL コマンドラインクライアントで、次のコマンドを実行します。プロンプトは $ に戻ります。

    exit;

ステップ 3: ウェブサイトの設定

このステップでは、 のデフォルトのウェブサイトルートを設定します。Apache HTTP 推奨所有者とアクセス許可を持つサーバー。次に、PHPの ベースのウェブページがそのデフォルトのウェブサイトルート内にあります。

次に、Amazon のセキュリティグループEC2と、このEC2環境に関連付けられている Amazon Virtual Private Cloud (Amazon ACL) のネットワークアクセスコントロールリスト (ネットワークVPC) を設定することで、受信ウェブトラフィックがそのウェブページを表示できるようにします。各EC2環境は、Amazon のセキュリティグループEC2と Amazon ACLのネットワークの両方に関連付ける必要がありますVPC。ただし、 ACLのデフォルトのネットワークでは、環境のすべての送受信トラフィック AWS アカウント が許可されていますが、デフォルトのセキュリティグループでは、ポート 22 SSH経由の を使用した受信トラフィックのみが許可されます。詳細については、「VPC AWS Cloud9 開発環境の設定」を参照してください。

次に、 の外部からウェブページを正常に表示して、このステップを終了します AWS Cloud9 IDE。

  1. のデフォルトのウェブサイトルートを設定する Apache HTTP 推奨所有者とアクセス許可を持つサーバー (/var/www/html)。これを行うには、 のターミナルセッションで、次の 6 つのコマンドを一度に 1 つずつ次の順序で実行します AWS Cloud9 IDE。各コマンドの動作を理解するには、各コマンドの後の # の情報をお読みください。

    Amazon Linux の場合:

    sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ec2-user # Add the user ec2-user (your default user for this environment) to the group web-content. sudo usermod -G web-content -a apache # Add the user apache (Apache HTTP Server) to the group web-content. sudo chown -R ec2-user:web-content /var/www/html # Change the owner of /var/www/html and its files to user ec2-user and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.

    [ Ubuntu サーバー:

    sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ubuntu # Add the user ubuntu (your default user for this environment) to the group web-content. sudo usermod -G web-content -a www-data # Add the user www-data (Apache HTTP Server) to the group web-content. sudo chown -R ubuntu:web-content /var/www/html # Change the owner of /var/www/html and its files to user ubuntu and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.
  2. を作成する PHPのデフォルトウェブサイトルートフォルダindex.phpに という名前の ベースのウェブページ Apache HTTP 次のコマンド/var/www/htmlを実行してサーバー ( ) を実行します。

    Amazon Linux の場合:

    sudo touch /var/www/html/index.php && sudo chown -R ec2-user:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php

    Amazon Linux の前述のコマンドでは、ファイルの所有者を に変更しec2-user、ファイルのグループを に変更しweb-content、グループのファイルアクセス許可を read/write for the user, and read/execute に変更します。

    [ Ubuntu サーバー:

    sudo touch /var/www/html/index.php && sudo chown -R ubuntu:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php

    の前述のコマンド Ubuntu また、サーバーはファイルの所有者を に変更しubuntu、ファイルのグループを に変更しweb-content、ファイルのアクセス許可を に変更read/write for the user, and read/executeします。

    上記コマンドが正常に実行されると、次の内容で index.php ファイルが作成されます。

    <?php phpinfo(); ?>
  3. Amazon ACLのネットワークVPCと、このEC2環境に関連付けられているセキュリティグループ Amazon を設定することで、ポート 80 EC2 経由で受信ウェブトラフィックを有効にして新しいウェブページを表示します。そのためには、次の 8 個のコマンドを一度に 1 つずつ次の順序で実行します。各コマンドの動作を理解するには、各コマンドの # の後に表示される情報をお読みください。

    重要

    次のコマンドを実行すると、このEC2環境のセキュリティグループとネットワークに関連付けられているすべての環境と Amazon EC2インスタンスで、ポート 80 ACL 経由で受信ウェブトラフィックが有効になります。これにより、これ以外のEC2環境や Amazon EC2インスタンスに対して、ポート 80 経由で受信ウェブトラフィックが予期せず有効になる可能性があります。

    注記

    次の 2 番目から 4 番目のコマンドでは、セキュリティグループのポート 80 経由の着信ウェブトラフィックが有効になります。ポート 22 経由の受信SSHトラフィックのみを許可するデフォルトのセキュリティグループがある場合は、最初のコマンドを実行してから、2 番目から 4 番目のコマンドを実行する必要があります。ただし、カスタムセキュリティグループで、既にポート 80 経由の着信ウェブトラフィックが許可されている場合は、これらのコマンドの実行をスキップすることができます。

    次の 5 番目から 8 番目のコマンドによりACL、ネットワークはポート 80 を介した受信ウェブトラフィックを許可できます。すべてのポートですべての着信トラフィックを既に許可ACLするデフォルトのネットワーク がある場合は、これらのコマンドの実行を安全にスキップできます。ただし、ポート 80 を介した受信ウェブトラフィックを許可ACLしないカスタムネットワークがあるとします。その場合、最初のコマンドを実行してから、5 番目から 8 番目のコマンドを実行します。

    MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Add an inbound rule to the security group to allow all incoming IPv4-based traffic over port 80. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Add an inbound rule to the security group to allow all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10000 --cidr-block 0.0.0.0/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv4-based traffic over port 80. Advanced users: change this suggested rule number as desired. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10100 --ipv6-cidr-block ::/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv6-based traffic over port 80. Advanced users: change this suggested rule number as desired.
  4. URL をウェブサーバールート内の index.php ファイルに移動します。これを行うには、次のコマンドを実行し、新しいウェブブラウザタブを使用するか、 とは AWS Cloud9 IDE別のウェブブラウザを使用してURL、表示される に移動します。成功すると、ウェブページに に関する情報が表示されます。Apache HTTP サーバー、MySQL, PHP、およびその他の関連設定。

    MY_PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) && echo http://$MY_PUBLIC_IP/index.php # Get the URL to the index.php file within the web server root.

ステップ 4: クリーンアップする

この環境を引き続き使用するものの、ポート 80 経由の着信ウェブトラフィックを無効にしたいとします。次に、次の 8 つのコマンドを 1 つずつ、次の順序で実行して、セキュリティグループと環境ACLに関連付けられているネットワークで以前に設定した対応する受信トラフィックルールを削除します。各コマンドの動作を理解するには、各コマンドの # の後に表示される情報をお読みください。

重要

次のコマンドを実行すると、このEC2環境のセキュリティグループとネットワークに関連付けられているすべての環境と Amazon EC2インスタンスのポート 80 ACL 経由の受信ウェブトラフィックが無効になります。これにより、これ以外のEC2環境や Amazon EC2インスタンスでは、ポート 80 経由で受信ウェブトラフィックが予期せず無効化される可能性があります。

注記

次の 5 番目から 8 番目のコマンドは、既存のルールを削除して、ネットワークがポート 80 経由で受信ウェブトラフィックを許可ACLしないようにします。すべてのポートですべての着信トラフィックを既に許可ACLしているデフォルトのネットワーク がある場合は、これらのコマンドの実行をスキップできます。ただし、ポート 80 経由で受信ウェブトラフィックを許可する既存のルールACLを持つカスタムネットワークがあり、それらのルールを削除するとします。その場合、最初のコマンドとそれに続く 5 番目から 8 番目のコマンドを実行する必要があります。

MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Delete the existing inbound rule from the security group to block all incoming IPv4-based traffic over port 80. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Delete the existing inbound rule from the security group to block all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10000 # Delete the existing inbound rule from the network ACL to block all IPv4-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10100 # Delete the existing inbound rule from the network ACL to block all IPv6-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match.

この環境を使用し終わったら、今後、 AWS アカウントに料金が請求されないように、その環境を削除します。手順については、AWS Cloud9 で環境を削除する を参照してください。