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 개발 환경이 있어야 합니다. 이 샘플에서는 Amazon Linux 또는 를 실행하는 Amazon EC2 인스턴스에 연결된 EC2 환경이 이미 있다고 가정합니다.Ubuntu 서버. 다른 환경 또는 운영 시스템이라면 이 샘플 지침을 관련 도구를 설치하는 데에 적용해야 합니다. 자세한 내용은 에서 환경 생성 AWS Cloud9 단원을 참조하십시오.
-
기존 환경의 AWS Cloud9 IDE가 이미 열려 있습니다. 환경을 열면 는 웹 브라우저에서 해당 환경에 IDE 대한 를 AWS Cloud9 엽니다. 자세한 내용은 AWS Cloud9에서 환경 열기 단원을 참조하십시오.
1단계: 도구 설치
이 단계에서는 다음 도구를 설치합니다.
-
Apache HTTP 서버, 웹 서버 호스트.
-
PHP웹 개발에 특히 적합한 스크립팅 언어인 를 에 포함할 수 있습니다HTML.
-
MySQL - 데이터베이스 관리 시스템.
그런 다음 Apache HTTP 서버 및 MySQL.
-
최신 보안 업데이트와 버그 수정이 인스턴스에 설치되어 있는지 확인합니다. 이렇게 하려면 의 터미널 세션에서 AWS Cloud9 IDE
yum update
(Amazon Linux) 또는apt update
(Ubuntu 서버) 명령. (터미널 세션을 새로 시작하려면 메뉴 모음에서 Window(창), New Terminal(새 터미널)을 선택합니다.)Amazon Linux의 경우:
sudo yum -y update
에 대해 Ubuntu 서버:
sudo apt -y update
-
확인 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
-
확인 PHP 는
php -v
명령을 실행하여 이미 설치되어 있습니다.성공하면 출력에 PHP 버전 번호가 포함됩니다.
오류가 표시되면
install
명령을 실행PHP하여 를 설치합니다.Amazon Linux의 경우:
sudo yum install -y php56
에 대해 Ubuntu 서버:
sudo apt install -y php libapache2-mod-php php-xml
-
확인 MySQL 는
mysql --version
명령을 실행하여 이미 설치되어 있습니다.성공하면 출력에 MySQL 버전 번호.
오류가 표시되면 를 설치합니다.MySQL
install
명령을 실행합니다.Amazon Linux의 경우:
sudo yum install -y mysql-server
에 대해 Ubuntu 서버:
sudo apt install -y mysql-server
-
설치 후 Apache HTTP 서버,PHP, 및 MySQL, 시작 Apache HTTP 다음 명령을 실행하여 서버가 시작되었는지 확인합니다.
Amazon Linux의 경우(이 명령을 두 번 실행해야 할 수 있음):
sudo service httpd start && sudo service httpd status
에 대해 Ubuntu 서버(명령 프롬프트로 돌아가려면 를 누름
q
):sudo service apache2 start && sudo service apache2 status
-
시작 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 명령줄 클라이언트.
-
구현 MySQL 에 대한 보안 모범 사례 MySQL 의 터미널 세션에서 다음 명령을 실행하여 를 설치합니다 AWS Cloud9 IDE.
sudo mysql_secure_installation
-
메시지가 표시되면 지정된 대로 다음 질문에 답합니다.
Amazon Linux의 경우:
-
루트의 현재 암호 입력(입력하지 않으려면 Enter) -
Enter
키를 누릅니다(암호가 없는 경우). -
루트 암호 설정 -
Y
를 입력한 후Enter
키를 누릅니다. -
새 암호 - 암호를 입력한 후
Enter
키를 누릅니다. -
새 암호 다시 입력 - 암호를 다시 입력한 후
Enter
키를 누릅니다. (나중에 사용할 수 있도록 암호를 안전한 위치에 저장해야 합니다.) -
익명 사용자 제거 -
Y
를 입력한 후Enter
키를 누릅니다. -
원격으로 루트 로그인 허용 안 함 -
Y
를 입력한 후Enter
키를 누릅니다. -
테스트 데이터베이스를 제거하고 액세스 -
Y
를 입력한 후Enter
키를 누릅니다. -
지금 권한 테이블 다시 로드 -
Y
를 입력한 후Enter
키를 누릅니다.
에 대해 Ubuntu 서버:
-
VALIDATE PASSWORD 플러그인을 설정하시겠습니까 - 를 입력한
y
다음 를 누릅니다Enter
. -
세 가지 수준의 암호 확인 정책이 있습니다 -
0
,1
또는2
를 입력한 후Enter
키를 누릅니다. -
새 암호 - 암호를 입력한 후
Enter
키를 누릅니다. -
새 암호 다시 입력 - 암호를 다시 입력한 후
Enter
키를 누릅니다. 나중에 사용할 수 있도록 암호를 안전한 위치에 저장해야 합니다. -
제공된 암호를 계속 사용하시겠습니까 -
y
를 입력한 후Enter
키를 누릅니다. -
익명 사용자 제거 -
y
를 입력한 후Enter
키를 누릅니다. -
원격으로 루트 로그인 허용 안 함 -
y
를 입력한 후Enter
키를 누릅니다. -
테스트 데이터베이스를 제거하고 액세스 -
y
를 입력한 후Enter
키를 누릅니다. -
지금 권한 테이블 다시 로드 -
y
를 입력한 후Enter
키를 누릅니다.
-
-
와 직접 상호 작용하려면 MySQL, 시작 MySQL 다음 명령을 실행하여 루트 사용자로 명령줄 클라이언트를 지정합니다. 메시지가 표시되면 앞서 설정한 루트 사용자의 암호를 입력한 후
Enter
를 누릅니다. 에 있는mysql>
동안 프롬프트가 로 변경됩니다.MySQL 명령줄 클라이언트.sudo mysql -uroot -p
-
를 종료하려면 MySQL 명령줄 클라이언트에서 다음 명령을 실행합니다. 프롬프트가
$
로 다시 바뀝니다.exit;
3단계: 웹 사이트 설정
이 단계에서는 에 대한 기본 웹 사이트 루트를 설정합니다.Apache HTTP 권장 소유자 및 액세스 권한이 있는 서버입니다. 그런 다음 PHP기본 웹 사이트 루트 내의 기반 웹 페이지입니다.
그런 다음 이 EC2 환경과 연결된 Amazon Virtual Private Cloud(Amazon ACL)에서 Amazon EC2 및 네트워크 액세스 제어 목록(네트워크 VPC)에 보안 그룹을 설정하여 수신 웹 트래픽이 해당 웹 페이지를 볼 수 있도록 합니다. 각 EC2 환경은 Amazon의 보안 그룹EC2과 Amazon ACL의 네트워크 모두에 연결되어야 합니다VPC. 그러나 ACL의 기본 네트워크가 환경에 대한 모든 수신 및 발신 트래픽을 AWS 계정 허용하더라도 기본 보안 그룹은 포트 22SSH를 통해 들어오는 트래픽만 허용합니다. 자세한 내용은 VPC AWS Cloud9 개발 환경 설정 단원을 참조하십시오.
그런 다음 외부에서 웹 페이지를 성공적으로 보고 이 단계를 완료합니다 AWS Cloud9 IDE.
-
에 대한 기본 웹 사이트 루트 설정 Apache HTTP 권장 소유자 및 액세스 권한이 있는 서버(
/var/www/html
). 이렇게 하려면 의 터미널 세션에서 다음 6개의 명령을 한 번에 하나씩 다음 순서로 실행합니다 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.
-
생성 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(); ?>
-
Amazon 및 이 EC2 환경VPC과 EC2 연결된 보안 그룹 AmazonACL에서 네트워크를 설정하여 포트 80을 통해 들어오는 웹 트래픽을 활성화하여 새 웹 페이지를 볼 수 있습니다. 이를 수행하려면 다음과 같은 여덟 가지 명령을 다음 순서로 한 번에 하나씩 실행합니다. 각 명령이 수행하는 작업을 이해하려면 각 명령의
#
문자 뒤의 정보를 읽습니다.중요
다음 명령을 실행하면 이 EC2 환경의 보안 그룹 및 네트워크와 연결된 모든 환경 및 Amazon EC2 인스턴스에 ACL 대해 포트 80을 통해 들어오는 웹 트래픽이 활성화됩니다. 이로 인해 이 이외의 EC2 환경 및 Amazon EC2 인스턴스에 대해 포트 80을 통해 들어오는 웹 트래픽이 예기치 않게 활성화될 수 있습니다.
참고
다음 두 번째부터 네 번째 명령은 보안 그룹이 포트 80을 통한 수신 웹 트래픽을 허용할 수 있게 합니다. 포트 22를 통한 수신 SSH 트래픽만 허용하는 기본 보안 그룹이 있는 경우 첫 번째 명령을 실행한 다음 두 번째부터 네 번째 명령까지 실행해야 합니다. 그러나 사용자 지정 보안 그룹이 이미 포트 80을 통한 수신 웹 트래픽을 허용하는 경우, 그러한 명령 실행을 건너뛸 수 있습니다.
다음 다섯 번째부터 여덟 번째 명령은 네트워크가 포트 80ACL을 통해 들어오는 웹 트래픽을 허용할 수 있도록 합니다. 모든 포트에서 모든 수신 트래픽을 ACL이미 허용하는 기본 네트워크 가 있는 경우 해당 명령 실행을 안전하게 건너뛸 수 있습니다. 그러나 포트 80을 통한 수신 웹 트래픽을 허용하지 ACL 않는 사용자 지정 네트워크가 있다고 가정해 보겠습니다. 그런 다음, 첫 번째 명령을 실행한 후 다섯 번째 명령부터 여덟 번째 명령까지 실행합니다.
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.
-
웹 서버 루트 내의
index.php
파일로 URL 를 가져옵니다. 이렇게 하려면 다음 명령을 실행하고 새 웹 브라우저 탭 또는 와 별도로 다른 웹 브라우저를 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개의 명령을 한 번에 하나씩 다음 순서로 실행하여 환경과 ACL 연결된 보안 그룹 및 네트워크에서 이전에 설정한 해당 수신 트래픽 규칙을 삭제합니다. 각 명령이 수행하는 작업을 이해하려면 각 명령의 #
문자 뒤의 정보를 읽습니다.
중요
다음 명령을 실행하면 이 EC2 환경의 보안 그룹 및 네트워크와 연결된 모든 환경 및 Amazon EC2 인스턴스에 ACL 대해 포트 80을 통해 들어오는 웹 트래픽이 비활성화됩니다. 이로 인해 이 이외의 EC2 환경 및 Amazon EC2 인스턴스에 대해 포트 80을 통해 들어오는 웹 트래픽이 예기치 않게 비활성화될 수 있습니다.
참고
다음 다섯 번째부터 여덟 번째 명령은 기존 규칙을 제거하여 네트워크ACL가 포트 80을 통해 들어오는 웹 트래픽을 허용하는 것을 차단합니다. 모든 포트에서 모든 수신 트래픽을 ACL이미 허용하는 기본 네트워크 가 있는 경우 해당 명령 실행을 건너뛸 수 있습니다. 그러나 포트 80을 통해 들어오는 웹 트래픽을 허용하는 기존 규칙ACL이 있는 사용자 지정 네트워크가 있고 해당 규칙을 삭제하려는 경우 그런 다음, 첫 번째 명령을 실행한 후 다섯 번째 명령부터 여덟 번째 명령까지 실행해야 합니다.
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에서 환경 삭제 단원을 참조하세요.