본문 바로가기

Rookies 9기/클라우드 보안 컨설팅 실무

클라우드 보안 컨설팅 실무 3일차

728x90

RDS

• RDS(Relational Database service, 관계형 데이터베이스)

AWS 클라우드에서 관계형 데이터베이스를 더 쉽게 설치, 운영 및 확장할 수 있는 웹 서비스

‣경제적이고 크기 조절이 가능한 용량을 제공하고 공통 데이터베이스 관리 작업을 관리

 

• 스토리지 유형

‣ 범용(SSD) : 일반적으로 사용하는 SSD(무난, 가격도 적당함)

‣ 프로비저닝된 IOPS(PIOPS) : 응답 시간이 빠르고 고성능 SSD    ex) 고객이 요구하는 경우, 금융(은행, 증권, 카드 등)

‣ Magnetic : 매우매우 느리고 저렴 ex) 테이프, 장기보관(병원 진료기록, 법정에서 의무 보유기간 등)

 

 

* 베포유형

‣ 단일 AZ(가용 영역)에 베포 : 가격은 저렴하지만, 가용성이 떨어짐

‣ 다중 AZ(가용영역)에 베포 : 가격은 비싸지만, 가용성이 높아짐

 

 

• 리전 및 가용 영역에 베포

‣ Local Zones를 통해 사용자에게 가까운 여러 위치에서 컴퓨팅, 스토리지 등의 리소스를 배치

‣ 모든 Amazon RDS 활동은 현재 기본 AWS 리전에서만 실행

‣ DB 인스턴스를 생성할 때 가용 영역을 선택하거나 Amazon RDS가 무작위로 가용 영역을 선택하도록 결정

‣ 다중 AZ DB 베포에서는 기본 및 세컨더리 DB 인스턴스의 가용 영역을 선택할 수 없음

 

• Local Zones

‣ 로컬 영역은 사용자와 지리적으로 가까운 AWS 리전의 확장 

‣ 현재는 오레곤 리전에서 LA에서만 RDS 로컬

 

 

RDS를 활용하여 웹 서버와 연결하기

실습 준비
1. Private Subnet 02을 하나 더 만들고, Private Subnet 01 과 다르게 해서 생성하기

‣ Web Server EC2 생성

더보기
ec2_webserver_amzn
Public Subnet에 설정
EC2 생성 확인
webserver 보안 그룹에 HTTPS 추가(모든 접근 허용)

‣ DB 서버 생성

더보기
RDS 생성 (MySQL 선택)
자격 증명 설정
Webserver EC2 선택
RDS 생성 확인
RDS 보안 그룹 수정 (webserer ec2만 접속 가능하도록 설정)

‣ Web Server 설정

더보기
web server EC2에 SSH로 접속
amazon-linux-extras install  명령을 사용하여 PHP 소프트웨어를 설치
Apache 웹 서버를 설치
웹 서버를 시작 및 부팅시 자동 시작
ec2-user  사용자를  apache  그룹에 추가
Apache 웹 서버에 대한 파일 권한 설정
Apache 웹 서버에 대한 파일 권한 설정 및 dbinfo.inc 파일 수정
dbinfo.inc 파일 수정
<?php

define('DB_SERVER', 'db_instance_endpoint');
define('DB_USERNAME', 'tutorial_user');
define('DB_PASSWORD', 'master password');
define('DB_DATABASE', 'sample');

?>
SamplePage.php 수정
SamplePage.php 수정 후

<?php include "../inc/dbinfo.inc"; ?>
<html>
<body>
<h1>Sample page</h1>
<?php

  /* Connect to MySQL and select the database. */
  $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);

  if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();

  $database = mysqli_select_db($connection, DB_DATABASE);

  /* Ensure that the EMPLOYEES table exists. */
  VerifyEmployeesTable($connection, DB_DATABASE);

  /* If input fields are populated, add a row to the EMPLOYEES table. */
  $employee_name = htmlentities($_POST['NAME']);
  $employee_address = htmlentities($_POST['ADDRESS']);

  if (strlen($employee_name) || strlen($employee_address)) {
    AddEmployee($connection, $employee_name, $employee_address);
  }
?>

<!-- Input form -->
<form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
  <table border="0">
    <tr>
      <td>NAME</td>
      <td>ADDRESS</td>
    </tr>
    <tr>
      <td>
        <input type="text" name="NAME" maxlength="45" size="30" />
      </td>
      <td>
        <input type="text" name="ADDRESS" maxlength="90" size="60" />
      </td>
      <td>
        <input type="submit" value="Add Data" />
      </td>
    </tr>
  </table>
</form>

<!-- Display table data. -->
<table border="1" cellpadding="2" cellspacing="2">
  <tr>
    <td>ID</td>
    <td>NAME</td>
    <td>ADDRESS</td>
  </tr>

<?php

$result = mysqli_query($connection, "SELECT * FROM EMPLOYEES");

while($query_data = mysqli_fetch_row($result)) {
  echo "<tr>";
  echo "<td>",$query_data[0], "</td>",
       "<td>",$query_data[1], "</td>",
       "<td>",$query_data[2], "</td>";
  echo "</tr>";
}
?>

</table>

<!-- Clean up. -->
<?php

  mysqli_free_result($result);
  mysqli_close($connection);

?>

</body>
</html>


<?php

/* Add an employee to the table. */
function AddEmployee($connection, $name, $address) {
   $n = mysqli_real_escape_string($connection, $name);
   $a = mysqli_real_escape_string($connection, $address);

   $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";

   if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>");
}

/* Check whether the table exists and, if not, create it. */
function VerifyEmployeesTable($connection, $dbName) {
  if(!TableExists("EMPLOYEES", $connection, $dbName))
  {
     $query = "CREATE TABLE EMPLOYEES (
         ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
         NAME VARCHAR(45),
         ADDRESS VARCHAR(90)
       )";

     if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>");
  }
}

/* Check for the existence of a table. */
function TableExists($tableName, $connection, $dbName) {
  $t = mysqli_real_escape_string($connection, $tableName);
  $d = mysqli_real_escape_string($connection, $dbName);

  $checktable = mysqli_query($connection,
      "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");

  if(mysqli_num_rows($checktable) > 0) return true;

  return false;
}
?>                                        

 

http://웹서버IP주소/SamplePage.php
sample 데이터베이스 만들기
DB 작동 확인
DB 작동 확인