Amazon Aurora MySQL를 사용한 보안 - Amazon Aurora

Amazon Aurora MySQL를 사용한 보안

Amazon Aurora MySQL 보안은 다음과 같이 세 가지 수준에서 관리됩니다.

  • Aurora MySQL DB 클러스터 및 DB 인스턴스에서 Amazon RDS 관리 작업을 수행할 수 있는 사용자를 제어하려면 AWS Identity and Access Management(IAM)를 사용합니다. IAM 자격 증명을 사용하여 AWS에 연결할 때, AWS 계정은 Amazon RDS 관리 작업을 수행하는 데 필요한 권한을 부여하는 IAM 정책을 보유하고 있어야 합니다. 자세한 정보는 Amazon Aurora의 자격 증명 및 액세스 관리을 참조하십시오.

    IAM을 사용하여 Amazon RDS 콘솔에 액세스하는 경우 먼저 IAM 사용자 자격 증명으로 AWS Management Console에 로그인합니다. 그런 다음 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔로 이동합니다.

  • Aurora MySQL DB 클러스터는 Amazon VPC 서비스를 기반으로 Virtual Private Cloud(VPC)에 생성해야 합니다. Aurora MySQL DB 클러스터에서 DB 인스턴스의 엔드포인트 및 포트에 연결할 수 있는 디바이스 또는 Amazon EC2 인스턴스를 제어하려면 VPC 보안 그룹을 사용합니다. 이 엔드포인트와 포트는 보안 소켓 계층(SSL) 방식으로 연결할 수 있습니다. 그 밖에도 기업의 방화벽 규칙을 통해 기업에서 이용하는 디바이스의 DB 인스턴스 연결 여부를 제어하는 것도 가능합니다. VPC에 대한 자세한 내용은 Amazon Virtual Private Cloud VPC 및 Amazon Aurora 단원을 참조하십시오.

    지원되는 VPC 테넌시는 Aurora MySQL DB 클러스터에서 사용하는 DB 인스턴스 클래스에 따라 다릅니다. default VPC 테넌시로 VPC가 공유된 하드웨어에서 실행됩니다. 하지만 dedicated VPC 테넌시일 때는 VPC는 전용 하드웨어 인스턴스에서 실행됩니다. 버스트 가능 성능 DB 인스턴스 클래스는 기본 VPC 테넌시만 지원합니다. 버스트 가능 성능 DB 인스턴스 클래스에는 db.t2, db.t3 및 db.t4g DB 인스턴스 클래스가 포함됩니다. 다른 모든 Aurora MySQL DB 인스턴스 클래스는 기본 및 전용 VPC 테넌시를 모두 지원합니다.

    인스턴스 클래스에 대한 자세한 내용은 Aurora DB 인스턴스 클래스 단원을 참조하십시오. defaultdedicated VPC 테넌시에 대한 자세한 정보는 Amazon Elastic Compute Cloud 사용 설명서전용 인스턴스를 참조하십시오.

  • Amazon Aurora MySQL DB 클러스터에 대한 로그인 및 권한을 인증하기 위해서는 다음 접근 방식 중 하나를 따르거나 두 방식을 조합할 수 있습니다.

    • 독립형 MySQL 인스턴스와 동일한 접근법을 사용할 수 있습니다.

      CREATE USER, RENAME USER, GRANT, REVOKESET PASSWORD 등의 명령은 온프레미스 데이터베이스에서 작동하는 것과 마찬가지로 작동하며, 데이터베이스 스키마 테이블을 직접 수정할 때도 동일합니다. 자세한 내용은 MySQL 설명서의 액세스 제어 및 계정 관리 단원을 참조하십시오.

    • 또한 IAM 데이터베이스 인증을 사용할 수도 있습니다.

      IAM 데이터베이스 인증의 경우, IAM 사용자 또는 IAM 역할 및 인증 토큰을 이용해 DB 클러스터에 인증합니다. 인증 토큰은 서명 버전 4 서명 프로세스를 통해 생성하는 고유 값입니다. IAM 데이터베이스 인증을 사용하면 동일한 자격 증명을 사용해 AWS 리소스 및 데이터베이스에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 을 위한 IAM 데이터베이스 인증 섹션을 참조하세요.

참고

자세한 내용은 Amazon Aurora의 보안 섹션을 참조하세요.

Amazon Aurora MySQL을 사용한 마스터 사용자 권한

Amazon Aurora MySQL DB 인스턴스를 생성할 때 마스터 사용자는 다음과 같은 기본 권한을 갖습니다.

  • ALTER

  • ALTER ROUTINE

  • CREATE

  • CREATE ROUTINE

  • CREATE TEMPORARY TABLES

  • CREATE USER

  • CREATE VIEW

  • DELETE

  • DROP

  • EVENT

  • EXECUTE

  • GRANT OPTION

  • INDEX

  • INSERT

  • LOAD FROM S3

  • LOCK TABLES

  • PROCESS

  • REFERENCES

  • RELOAD

  • REPLICATION CLIENT

  • REPLICATION SLAVE

  • SELECT

  • SHOW DATABASES

  • SHOW VIEW

  • TRIGGER

  • UPDATE

DB 클러스터를 생성할 때는 각 DB 클러스터의 관리 서비스를 위해 rdsadmin 사용자가 만들어집니다. rdsadmin 계정을 삭제하려고 하거나, 계정 이름 또는 암호를 변경하려고 하거나, 계정 권한을 변경하려고 하면 오류가 발생합니다.

Aurora MySQL DB 클러스터의 관리를 위해 기본 killkill_query 명령은 사용이 제한됩니다. 대신, Amazon RDS 명령으로 rds_killrds_kill_query를 사용하여 Aurora MySQL DB 인스턴스의 사용자 세션이나 쿼리를 종료할 수 있습니다.

참고

중국(닝샤) 리전에서는 데이터베이스 인스턴스와 스냅샷의 암호화가 지원되지 않습니다.

Aurora MySQL DB 클러스터에서 SSL/TLS 사용

Amazon Aurora MySQL DB 클러스터는 RDS for MySQL DB 인스턴스와 동일한 프로세스 및 퍼블릭 키를 사용하여 애플리케이션의 Secure Sockets Layer(SSL) 및 Transport Layer Security(TLS) 연결을 지원합니다.

Amazon RDS가 SSL/TLS 인증서를 생성한 후 Amazon RDS가 인스턴스를 프로비저닝할 때 DB 인스턴스에 인증서를 설치합니다. 인증 기관이 서명하는 SSL 인증서에는 SSL/TLS 인증서에는 스푸핑 공격으로부터 보호해주는 SSL/TLS 인증서를 위한 일반 이름(CN)으로 DB 인스턴스 엔드포인트가 포함되어 있습니다. 그 결과 클라이언트가 Subject Alternative Names(SAN)를 지원할 경우 SSL/TLS를 이용한 DB 클러스터 연결의 유일한 방법은 DB 클러스터 엔드포인트를 이용하는 것입니다. 그렇지 않으면 라이터 인스턴스의 인스턴스 엔드포인트를 사용해야 합니다.

인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 클러스터에 대한 연결 암호화 단원을 참조하십시오.

SSL/TLS가 포함된 SAN을 지원하는 클라이언트로 MySQL용 AWS JDBC Driver를 사용하는 것이 좋습니다. AWS JDBC Driver for MySQL 및 사용 방법에 대한 전체 지침에 관한 자세한 내용은 AWS JDBC Driver for MySQL GitHub 리포지토리를 참조하세요.

Aurora MySQL DB 클러스터에 대한 SSL/TLS 연결 필요

require_secure_transport DB 클러스터 파라미터를 사용하여 Aurora MySQL DB 클러스터에 대한 모든 사용자 연결에서 SSL/TLS를 사용하도록 요구할 수 있습니다. 기본적으로 require_secure_transport 파라미터는 OFF로 설정됩니다. require_secure_transport 파라미터를 ON으로 설정하면 해당 DB 클러스터에 대한 연결 시 SSL/TLS를 요구합니다.

require_secure_transport 파라미터 값은 DB 클러스터의 파라미터 그룹을 업데이트하여 설정할 수 있습니다. 변경 사항을 적용하기 위해 DB 클러스터를 재부팅할 필요가 없습니다. 파라미터 그룹에 대한 자세한 정보는 파라미터 그룹 작업 단원을 참조하십시오.

참고

require_secure_transport 파라미터는 Aurora MySQL 버전 5.7에서만 사용할 수 있습니다. 사용자 지정 DB 클러스터 파라미터 그룹에서 이 파라미터를 설정할 수 있습니다. DB 인스턴스 파라미터 그룹에서는 이 파라미터를 사용할 수 없습니다.

DB 클러스터에 대해 require_secure_transport 파라미터를 ON으로 설정하면 암호화된 연결을 설정할 수 있는 경우 데이터베이스 클라이언트가 인스턴스에 연결할 수 있습니다. 그렇지 않으면 다음과 유사한 오류 메시지가 클라이언트에 반환됩니다.

MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

Aurora MySQL에 지원되는 TLS 버전

Aurora MySQL은 TLS(전송 계층 보안) 버전 1.0, 1.1 및 1.2를 지원하지 않습니다. 다음 표는 Aurora MySQL 버전에 대한 TLS 지원을 보여줍니다.

Aurora MySQL version TLS 1.0 TLS 1.1 TLS 1.2

Aurora MySQL 버전 3

지원

지원

지원

Aurora MySQL 버전 2

지원

지원

지원

Aurora MySQL 버전 1

지원

Aurora MySQL 1.23.1 이상에서 지원

Aurora MySQL 1.23.1 이상에서 지원

MySQL 8.0의 커뮤니티 에디션은 TLS 1.3을 지원하지만 MySQL 8.0 호환 Aurora MySQL 버전 3은 현재 TLS 1.3을 지원하지 않습니다.

Aurora MySQL 5.7 DB 클러스터의 경우 tls_version DB 클러스터 파라미터를 사용하여 허용되는 프로토콜 버전을 나타낼 수 있습니다. 대부분의 클라이언트 도구 또는 데이터베이스 드라이버에 대해 유사한 클라이언트 파라미터가 있습니다. 일부 이전 클라이언트는 최신 TLS 버전을 지원하지 않을 수 있습니다. 기본적으로 DB 클러스터는 서버와 클라이언트 구성 모두에서 허용되는 가장 높은 TLS 프로토콜 버전을 사용하려고 합니다.

tls_version DB 클러스터 파라미터를 다음 값 중 하나로 설정합니다.

  • TLSv1.2 – 암호화된 연결에 TLS 버전 1.2 프로토콜만 허용됩니다.

  • TLSv1.1 – 암호화된 연결에 TLS 버전 1.1 및 1.2 프로토콜이 허용됩니다.

  • TLSv1 – 암호화된 연결에 TLS 버전 1.0, 1.1 및 1.2 프로토콜이 허용됩니다.

파라미터가 설정되지 않은 경우 암호화된 연결에 TLS 버전 1.0, 1.1 및 1.2 프로토콜이 허용됩니다.

DB 클러스터 파라미터 그룹에서 파라미터 수정에 대한 자세한 내용은 DB 클러스터 파라미터 그룹의 파라미터 수정 섹션을 참조하세요. AWS CLI를 클릭하여 tls_version DB 클러스터 파라미터를 수정하려면 ApplyMethodpending-reboot로 설정해야 합니다. 애플리케이션 메서드가 pending-reboot이면 파라미터 그룹과 연결된 DB 클러스터를 중지하고 다시 시작한 후에 파라미터 변경 내용이 적용됩니다.

참고

tls_version DB 클러스터 파라미터는 Aurora MySQL 5.6에서 사용할 수 없습니다.

Aurora MySQL DB 클러스터에 대한 연결 암호화

기본 mysql 클라이언트를 사용하여 연결을 암호화하려면 --ssl-ca 파라미터를 사용하여 mysql 클라이언트를 실행하고 다음과 같은 퍼블릭 키 등을 참조합니다.

MySQL 5.7 및 8.0의 경우:

mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com --ssl-ca=full_path_to_CA_certificate --ssl-mode=VERIFY_IDENTITY

MySQL 5.6의 경우:

mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com --ssl-ca=full_path_to_CA_certificate --ssl-verify-server-cert

full_path_to_CA_certificate를 인증 기관(CA) 인증서의 전체 경로로 바꿉니다. 인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 클러스터에 대한 연결 암호화 섹션을 참조하세요.

특정 사용자 계정에 대한 SSL/TLS 연결을 요구할 수 있습니다. 예를 들면 MySQL 버전에 따라 다음 문 중 하나를 사용하여 사용자 계정 encrypted_user에 대한 SSL/TLS 연결을 요구할 수 있습니다.

MySQL 5.7 및 8.0의 경우:

ALTER USER 'encrypted_user'@'%' REQUIRE SSL;

MySQL 5.6의 경우:

GRANT USAGE ON *.* TO 'encrypted_user'@'%' REQUIRE SSL;

RDS 프록시를 사용하는 경우 일반적인 클러스터 엔드포인트 대신 프록시 엔드포인트에 연결합니다. Aurora DB 클러스터에 직접 연결하는 것과 같은 방법으로 프록시 연결에 SSL/TLS를 필수 또는 선택 사항으로 지정할 수 있습니다. RDS Proxy 사용에 대한 자세한 내용은 Amazon RDS 프록시 사용 단원을 참조하십시오.

참고

MySQL과의 SSL/TLS 연결에 대한 자세한 정보는 MySQL 설명서를 참조하십시오.

Aurora MySQL DB 클러스터 연결을 위한 암호 그룹 구성

구성 가능한 암호 그룹을 사용하면 데이터베이스 연결의 보안을 더 잘 제어할 수 있습니다. 데이터베이스에 대한 클라이언트 SSL/TLS 연결을 보호하도록 허용할 암호 그룹 목록을 지정할 수 있습니다. 구성 가능한 암호 그룹을 사용하여 데이터베이스 서버가 허용하는 연결 암호화를 제어할 수 있습니다. 이렇게 하면 안전하지 않거나 사용되지 않는 암호의 사용을 방지할 수 있습니다.

구성 가능한 암호 모음은 Aurora MySQL 버전 3 및 Aurora MySQL 버전 2에서 지원됩니다.

연결을 암호화하는 데 허용되는 암호 목록을 지정하려면 ssl_cipher 클러스터 파라미터를 수정합니다. AWS Management Console, AWS CLI 또는 RDS API를 사용하는 클러스터 파라미터 그룹의 ssl_cipher 파라미터를 설정합니다.

DB 클러스터 파라미터 그룹에서 파라미터 수정에 대한 자세한 내용은 DB 클러스터 파라미터 그룹의 파라미터 수정 섹션을 참조하세요. CLI를 사용하여 ssl_cipher DB 클러스터 파라미터를 수정하려면 ApplyMethodpending-reboot로 설정해야 합니다. 애플리케이션 메서드가 pending-reboot이면 파라미터 그룹과 연결된 DB 클러스터를 중지하고 다시 시작한 후에 파라미터 변경 내용이 적용됩니다.

클라이언트 애플리케이션의 경우 데이터베이스에 연결할 때 --ssl-cipher 옵션을 사용하여 암호화된 연결에 사용할 암호를 지정할 수 있습니다. 데이터베이스 연결에 대한 자세한 내용은 Amazon Aurora MySQL DB 클러스터에 연결 섹션을 참조하세요.

ssl_cipher 파라미터를 쉼표로 구분된 암호 값의 문자열로 설정합니다. 다음 표에는 각 암호에 대해 TLS 암호화 프로토콜 및 유효한 Aurora MySQL 엔진 버전과 함께 지원되는 암호가 나와 있습니다.

암호암호화 프로토콜지원되는 Aurora MySQL 버전

DHE-RSA-AES128-SHA

TLS 1.03.01.0 이상, 2.10.2, 2.10.1, 2.09.3, 2.08.4, 2.07.7, 2.04.9

DHE-RSA-AES128-SHA256

TLS 1.23.01.0 이상, 2.10.2, 2.10.1, 2.09.3, 2.08.4, 2.07.7, 2.04.9

DHE-RSA-AES128-GCM-SHA256

TLS 1.23.01.0 이상, 2.10.2, 2.10.1, 2.09.3, 2.08.4, 2.07.7, 2.04.9

DHE-RSA-AES256-SHA

TLS 1.03.01.0 이상, 2.10.2, 2.10.1, 2.09.3, 2.08.4, 2.07.7, 2.04.9

DHE-RSA-AES256-SHA256

TLS 1.23.01.0 이상, 2.10.2, 2.10.1, 2.09.3, 2.08.4, 2.07.7, 2.04.9

DHE-RSA-AES256-GCM-SHA384

TLS 1.23.01.0 이상, 2.10.2, 2.10.1, 2.09.3, 2.08.4, 2.07.7, 2.04.9

ECDHE-RSA-AES128-SHA

TLS 1.03.01.0 이상, 2.10.2, 2.09.3

ECDHE-RSA-AES128-SHA256

TLS 1.23.01.0 이상, 2.10.2, 2.09.3

ECDHE-RSA-AES128-GCM-SHA256

TLS 1.23.01.0 이상, 2.10.2, 2.09.3

ECDHE-RSA-AES256-SHA

TLS 1.03.01.0 이상, 2.10.2, 2.09.3

ECDHE-RSA-AES256-SHA384

TLS 1.23.01.0 이상, 2.10.2, 2.09.3

ECDHE-RSA-AES256-GCM-SHA384

TLS 1.23.01.0 이상, 2.10.2, 2.09.3

describe-engine-default-cluster-parameters CLI 명령을 사용하여 특정 파라미터 그룹 제품군에 대해 현재 지원되는 암호 그룹을 결정할 수도 있습니다. 다음 예에서는 Aurora MySQL 5.7에 대한 ssl_cipher 클러스터 파라미터에 허용되는 값을 가져오는 방법을 보여줍니다.

aws rds describe-engine-default-cluster-parameters --db-parameter-group-family aurora-mysql5.7 ...some output truncated... { "ParameterName": "ssl_cipher", "ParameterValue": "DHE-RSA-AES128-SHA,DHE-RSA-AES128-SHA256,DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-SHA,DHE-RSA-AES256-SHA256,DHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-GCM-SHA384", "Description": "The list of permissible ciphers for connection encryption.", "Source": "system", "ApplyType": "static", "DataType": "list", "AllowedValues": "DHE-RSA-AES128-SHA,DHE-RSA-AES128-SHA256,DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-SHA,DHE-RSA-AES256-SHA256,DHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-GCM-SHA384", "IsModifiable": true, "SupportedEngineModes": [ "provisioned" ] }, ...some output truncated...

암호에 대한 자세한 내용은 MySQL 설명서의 ssl_cipher 변수를 참조하세요. 암호 그룹 형식에 대한 자세한 내용은 OpenSSL 웹사이트에서 openssl-ciphers 목록 형식openssl-ciphers 문자열 형식 문서를 참조하세요.