

# Amazon Aurora DSQL의 데이터 보호
<a name="data-protection"></a>

[공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 의 데이터 보호에 적용됩니다. 이 모델에서 설명하는 것처럼 은 모든 AWS 클라우드를 실행하는 글로벌 인프라를 보호할 책임이 있습니다. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 사용하는 의 보안 구성과 관리 태스크에 대한 책임도 사용자에게 있습니다. 데이터 프라이버시에 관한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 [ Security Blog](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)의 ** Shared Responsibility Model and GDPR 블로그 게시물을 참조하세요.

데이터를 보호하려면 자격 증명을 보호하고 AWS IAM Identity Center 또는 AWS Identity and Access Management를 통해 개별 사용자를 설정하는 것이 좋습니다. 이렇게 하면 개별 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ SSL/TLS를 사용하여 리소스와 통신하세요. TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ AWS CloudTrail으로 API 및 사용자 활동 로깅을 설정하세요. 활동 캡처에 추적을 사용하는 방법에 대한 자세한 내용은 *사용 설명서*의 [Working with trails](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)을 참조하세요.
+ 암호화 솔루션을 AWS 서비스 내의 모든 기본 보안 제어 기능과 함께 사용하세요.
+ Amazon S3에 저장된 민감한 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.

고객의 이메일 주소와 같은 기밀 정보나 중요한 정보는 태그나 **이름** 필드와 같은 자유 형식 텍스트 필드에 입력하지 않는 것이 좋습니다. 여기에는 콘솔, API, AWS CLI 또는 AWS SDK를 사용하여 작업하는 경우가 포함됩니다. 이름에 사용되는 태그 또는 자유 형식 텍스트 필드에 입력하는 모든 데이터는 청구 또는 진단 로그에 사용될 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명을 URL에 포함해서는 안 됩니다.



## 데이터 암호화
<a name="data-encryption"></a>

Amazon Aurora DSQL에서는 미션 크리티컬 및 기본 데이터 스토리지에 적합하게 설계된, 내구성이 뛰어난 스토리지 인프라를 제공합니다. 데이터는 Aurora DSQL 리전의 여러 시설에 걸쳐 여러 디바이스에 중복 저장됩니다.

### 전송 중 암호화
<a name="encryption-transit"></a>

기본적으로 전송 중 암호화가 구성됩니다. Aurora DSQL은 TLS를 사용하여 SQL 클라이언트와 Aurora DSQL 간의 모든 트래픽을 암호화합니다.

AWS CLI, SDK 또는 API 클라이언트와 Aurora DSQL 엔드포인트 간에 전송 중 데이터를 암호화하고 서명하는 방법은 다음과 같습니다.
+ Aurora DSQL이 전송 중 데이터를 암호화하기 위한 HTTPS 엔드포인트를 제공합니다.
+ Aurora DSQL에 대한 API 요청의 무결성을 보호하려면 호출자가 API 직접 호출에 서명해야 합니다. 호출은 서명 버전 4 서명 프로세스(Sigv4)에 따라 X.509 인증서 또는 고객의 AWS 비밀 액세스 키로 서명됩니다. 자세한 정보는 *AWS 일반 참조*의 [서명 버전 4 서명 프로세스](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 참조하세요.
+  AWS CLI 또는 AWS SDK 중 하나를 사용하여 AWS에 요청합니다. 이들 도구는 도구를 구성할 때 지정한 액세스 키를 사용하여 사용자의 요청에 자동으로 서명합니다.

#### FIPS 규정 준수
<a name="fips-compliance"></a>

Aurora DSQL 데이터 영역 엔드포인트(데이터베이스 연결에 사용되는 클러스터 엔드포인트)는 기본적으로 FIPS 140-2 검증 암호화 모듈을 사용합니다. 클러스터 연결에는 별도의 FIPS 엔드포인트가 필요하지 않습니다.

컨트롤 플레인 작업의 경우 Aurora DSQL은 지원되는 리전에 전용 FIPS 엔드포인트를 제공합니다. 컨트롤 플레인 FIPS 엔드포인트에 대한 자세한 내용은 *AWS 일반 참조*의 [Aurora DSQL 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/dsql.html)을 참조하세요.

저장 시 암호화는 [Aurora DSQL의 저장 시 암호화](data-encryption.md#encryption-at-rest) 섹션을 참조하세요.

### 인터네트워크 트래픽 개인 정보 보호
<a name="inter-network-traffic-privacy"></a>

Aurora DSQL과 온프레미스 애플리케이션 간의 연결 및 Aurora DSQL과 동일한 AWS 리전 내 다른 AWS 리소스 간의 연결은 둘 다 보호됩니다.

프라이빗 네트워크와 AWS 사이에 두 연결 옵션이 있습니다.
+ AWS Site-to-Site VPN 연결. 자세한 내용은 [AWS Site-to-Site VPN란 무엇입니까?](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)를 참조하십시오.
+ Direct Connect 연결. 자세한 내용은 [Direct Connect란 무엇인가요?](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)를 참조하세요.

AWS 게시 API 작업을 사용하면 네트워크를 통해 Aurora DSQL에 액세스할 수 있습니다. 클라이언트는 다음을 지원해야 합니다.
+ Transport Layer Security(TLS). TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ DHE(Ephemeral Diffie-Hellman) 또는 ECDHE(Elliptic Curve Ephemeral Diffie-Hellman)와 같은 완전 전송 보안(PFS)이 포함된 암호 제품군. Java 7 이상의 최신 시스템은 대부분 이러한 모드를 지원합니다.

## 감시 리전의 데이터 보호
<a name="witness-regions"></a>

다중 리전 클러스터를 생성할 때, 감시 리전을 통해 암호화된 트랜잭션의 동기식 복제에 참여함으로써 자동화된 장애 복구를 지원합니다. 피어링된 클러스터를 사용할 수 없게 되는 경우에도, 감시 리전은 데이터베이스 쓰기 작업을 검증하고 처리할 수 있는 상태를 유지하여 가용성 손실이 발생하지 않도록 보장합니다.

감시 리전은 다음과 같은 설계 특성으로 데이터를 보호하고 안전성을 보장합니다.
+ 감시 리전은 암호화된 트랜잭션 로그만 수신하고 저장합니다. 암호화 키를 호스팅하거나 저장하거나 전송하지 않습니다.
+ 감시 리전은 오로지 쓰기 트랜잭션 로깅과 쿼럼 기능에만 집중합니다. 데이터를 설계상 읽을 수 없습니다.
+ 감시 리전은 클러스터 연결 엔드포인트나 쿼리 프로세서 없이 작동합니다. 이는 사용자 데이터베이스에 대한 액세스를 차단합니다.

AWS 리전에 대한 자세한 내용은 [다중 리전 클러스터 구성](configuring-multi-region-clusters.md) 섹션을 참조하세요.

# Aurora DSQL 연결을 위한 SSL/TLS 인증서 구성
<a name="configure-root-certificates"></a><a name="ssl-certificate-overview"></a>

Aurora DSQL은 Transport Layer Security(TLS) 암호화를 사용하려면 모든 연결이 필요합니다. 보안 연결을 설정하려면 클라이언트 시스템이 Amazon Root Certificate Authority(Amazon Root CA 1)를 신뢰해야 합니다. 이 인증서는 많은 운영 체제에 사전 설치되어 있습니다. 이 섹션에서는 다양한 운영 체제에서 사전 설치된 Amazon Root CA 1 인증서를 확인하는 지침을 제공하고 인증서가 아직 없는 경우 수동으로 설치하는 프로세스를 안내합니다.

PostgreSQL 버전 17을 사용하는 것이 좋습니다.

**중요**  
프로덕션 환경의 경우 `verify-full` SSL 모드를 사용하여 최고 수준의 연결 보안을 보장하는 것이 좋습니다. 이 모드는 서버 인증서가 신뢰할 수 있는 인증 기관에서 서명되었고 서버 호스트 이름이 인증서와 일치하는지 확인합니다.

## 사전 설치된 인증서 확인
<a name="verify-installed-certificates"></a>

대부분의 운영 체제에서 **Amazon Root CA 1**은 이미 사전 설치되어 있습니다. 이를 검증하려면 아래 단계를 따르세요.

### Linux(RedHat/CentOS/Fedora)
<a name="verify-linux"></a>

터미널에서 다음 명령을 실행합니다.

```
trust list | grep "Amazon Root CA 1"
```

인증서가 설치된 경우 다음 출력이 표시됩니다.

```
label: Amazon Root CA 1
```

### macOS
<a name="verify-macos"></a>

1. Spotlight Search를 엽니다(**Command** \$1 **스페이스**).

1. **Keychain Access**를 검색합니다.

1. **System Keychains**에서 **System Roots**를 선택합니다.

1. 인증서 목록에서 **Amazon Root CA 1**을 찾습니다.

### Windows
<a name="verify-windows"></a>

**참고**  
psql Windows 클라이언트에서 알려진 문제로 인해 시스템 루트 인증서(`sslrootcert=system`)를 사용하면 `SSL error: unregistered scheme` 오류가 반환될 수 있습니다. SSL을 사용하여 클러스터에 연결하는 다른 방법으로 [Windows에서 연결](#connect-windows)를 따를 수 있습니다.

운영 체제에 **Amazon Root CA 1**이 설치되어 있지 않은 경우 아래 단계를 따릅니다.

## 인증서 설치
<a name="install-certificates"></a>

 운영 체제에 `Amazon Root CA 1` 인증서가 사전 설치되어 있지 않은 경우 Aurora DSQL 클러스터에 대한 보안 연결을 설정하려면 인증서를 수동으로 설치해야 합니다.

### Linux 인증서 설치
<a name="install-linux"></a>

다음 단계에 따라 Linux 시스템에 Amazon Root CA 인증서를 설치합니다.

1. 루트 인증서를 다운로드합니다.

   ```
   wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. 인증서를 트러스트 저장소에 추가합니다.

   ```
   sudo cp ./AmazonRootCA1.pem /etc/pki/ca-trust/source/anchors/
   ```

1. CA 트러스트 저장소를 업데이트합니다.

   ```
   sudo update-ca-trust
   ```

1. 설치를 확인합니다.

   ```
   trust list | grep "Amazon Root CA 1"
   ```

### macOS 인증서 설치
<a name="install-macos"></a>

이러한 인증서 설치 단계는 선택 사항입니다. macOS에서도 [Linux 인증서 설치](#install-linux)가 적용됩니다.

1. 루트 인증서를 다운로드합니다.

   ```
   wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. 시스템 키체인에 인증서를 추가합니다.

   ```
   sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain AmazonRootCA1.pem
   ```

1. 설치를 확인합니다.

   ```
   security find-certificate -a -c "Amazon Root CA 1" -p /Library/Keychains/System.keychain
   ```

## SSL/TLS 연결 확인
<a name="connect-using-certificates"></a>

 Aurora DSQL 클러스터에 대한 보안 연결을 위해 SSL/TLS 인증서를 구성하기 전에 다음 사전 조건을 충족하는지 확인합니다.
+ PostgreSQL 버전 17 설치됨
+ 적절한 자격 증명으로 AWS CLI가 구성됨
+ Aurora DSQL 클러스터 엔드포인트 정보

### Linux에서 연결
<a name="connect-linux"></a>

1. 인증 토큰을 생성하고 설정합니다.

   ```
   export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --region=your-cluster-region --hostname your-cluster-endpoint)
   ```

1. 시스템 인증서(미리 설치된 경우)를 사용하여 연결합니다.

   ```
   PGSSLROOTCERT=system \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host your-cluster-endpoint
   ```

1. 또는 다운로드한 인증서를 사용하여 연결합니다.

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host your-cluster-endpoint
   ```

**참고**  
 PGSSLMODE 설정에 대한 자세한 내용은 PostgresQL 17 [Database Connection Control Functions](https://www.postgresql.org/docs/current/libpq-connect.html) 설명서의 [sslmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE)를 참조하세요.

### macOS에서 연결
<a name="connect-macos"></a>

1. 인증 토큰을 생성하고 설정합니다.

   ```
   export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --region=your-cluster-region --hostname your-cluster-endpoint)
   ```

1. 시스템 인증서(미리 설치된 경우)를 사용하여 연결합니다.

   ```
   PGSSLROOTCERT=system \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host your-cluster-endpoint
   ```

1. 또는 루트 인증서를 다운로드하여 `root.pem`으로 저장합니다(인증서가 사전 설치되어 있지 않은 경우).

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql —dbname postgres \
   --username admin \
   --host your_cluster_endpoint
   ```

1. psql을 사용하여 연결합니다.

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql —dbname postgres \
   --username admin \
   --host your_cluster_endpoint
   ```

### Windows에서 연결
<a name="connect-windows"></a>

#### 명령 프롬프트 사용
<a name="windows-command-prompt"></a>

1. 인증 토큰을 생성합니다.

   ```
   aws dsql generate-db-connect-admin-auth-token ^
   --region=your-cluster-region ^
   --expires-in=3600 ^
   --hostname=your-cluster-endpoint
   ```

1. 암호 환경 변수를 설정합니다.

   ```
   set "PGPASSWORD=token-from-above"
   ```

1. SSL 구성을 설정합니다.

   ```
   set PGSSLROOTCERT=C:\full\path\to\root.pem
   set PGSSLMODE=verify-full
   ```

1. 데이터베이스에 연결합니다.

   ```
   "C:\Program Files\PostgreSQL\17\bin\psql.exe" --dbname postgres ^
   --username admin ^
   --host your-cluster-endpoint
   ```

#### PowerShell 사용
<a name="windows-powershell"></a>

1. 인증 토큰을 생성하고 설정합니다.

   ```
   $env:PGPASSWORD = (aws dsql generate-db-connect-admin-auth-token --region=your-cluster-region --expires-in=3600 --hostname=your-cluster-endpoint)
   ```

1. SSL 구성을 설정합니다.

   ```
   $env:PGSSLROOTCERT='C:\full\path\to\root.pem'
   $env:PGSSLMODE='verify-full'
   ```

1. 데이터베이스에 연결합니다.

   ```
    "C:\Program Files\PostgreSQL\17\bin\psql.exe" --dbname postgres `
   --username admin `
   --host your-cluster-endpoint
   ```

## 추가 리소스
<a name="additional-resources"></a>
+  [PostgreSQL SSL 설명서](https://www.postgresql.org/docs/current/libpq-ssl.html) 
+  [Amazon Trust Services](https://www.amazontrust.com/repository/) 