

# Amazon RDS Custom for Oracle용 DB 인스턴스 구성
<a name="custom-creating"></a>

RDS Custom DB 인스턴스를 생성한 다음 Secure Shell(SSH) 또는 AWS Systems Manager를 사용하여 연결할 수 있습니다.

RDS Custom for Oracle DB 인스턴스에 연결하고 로그인하는 방법에 대한 자세한 내용은 다음 주제를 참조하세요.
+ [세션 관리자를 사용하여 RDS Custom DB 인스턴스에 연결](custom-creating.ssm.md)
+ [SSH를 사용하여 RDS Custom DB 인스턴스에 연결](#custom-creating.ssh)
+ [RDS Custom for Oracle 데이터베이스에 SYS로 로그인](custom-creating.sysdba.md)

## RDS Custom for Oracle DB 인스턴스 생성
<a name="custom-creating.create"></a>

AWS Management Console 또는 AWS CLI를 사용하여 Oracle DB 인스턴스용 Amazon RDS Custom을 생성할 수 있습니다. 생성 절차는 Amazon RDS DB 인스턴스를 생성하는 절차와 유사합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

CEV 매니페스트에 설치 파라미터를 포함시킨 경우 DB 인스턴스는 지정한 Oracle base, Oracle home, UNIX/Linux 사용자 및 그룹의 ID와 이름을 사용합니다. 설치 중에 Oracle Database에서 생성되는 `oratab` 파일은 심볼 링크가 아닌 실제 설치 위치를 가리킵니다. RDS Custom for Oracle은 명령을 실행할 때 기본 사용자 `rdsdb`가 아닌 구성된 OS 사용자로 실행합니다. 자세한 내용은 [5단계: CEV 매니페스트 준비](custom-cev.preparing.md#custom-cev.preparing.manifest) 섹션을 참조하세요.

RDS Custom DB 인스턴스를 생성하거나 RDS Custom DB 인스턴스에 연결하려면 먼저 [Amazon RDS Custom for Oracle을 위한 환경 설정](custom-setup-orcl.md) 섹션에 나와 있는 작업을 완료하세요.

### 콘솔
<a name="custom-creating.console"></a>

**RDS Custom for Oracle DB 인스턴스를 생성하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

1. **데이터베이스 생성**을 선택합니다.

1. **데이터베이스 생성 방법 선택(Choose a database creation method)**에서 **표준 생성(Standard Create)**을 선택합니다.

1. **엔진 옵션**) 섹션에서 다음과 같이 실행합니다.

   1. **엔진 유형(Engine type)**으로 **Oracle**을 선택합니다.

   1. **데이터베이스 관리 유형(Database management type)**에서 **Amazon RDS Custom**을 선택합니다.

   1. **아키텍처 설정**에서 다음 중 하나를 수행합니다.
      + **멀티테넌트 아키텍처**를 선택하여 컨테이너 데이터베이스(CDB)를 생성합니다. 생성 시 CDB에는 PDB 시드와 초기 PDB가 하나씩 포함됩니다.
**참고**  
**멀티테넌트 아키텍처** 설정은 Oracle Database 19c에만 지원됩니다.
      + 비 CDB를 생성하려면 **멀티테넌트 아키텍처**를 지웁니다. 비 CDB에는 PDB가 포함될 수 없습니다.

   1. **에디션**에서 **Oracle Enterprise Edition** 또는 **Oracle Standard Edition 2**를 선택합니다.

   1. **사용자 지정 엔진 버전**의 경우 RDS Custom의 기존 사용자 지정 엔진 버전(CEV)을 선택합니다. CEV의 형식은 `major-engine-version.customized_string`입니다. 예제 식별자는 `19.cdb_cev1`입니다.

      이전 단계에서 **멀티테넌트 아키텍처**를 선택한 경우 `custom-oracle-ee-cdb` 또는 `custom-oracle-se2-cdb` 엔진 유형을 사용하는 CEV만 지정할 수 있습니다. 콘솔은 다른 엔진 유형으로 생성된 CEV를 필터링합니다.

1. **템플릿(Templates)**에서 **프로덕션(Production)**을 선택합니다.

1. **설정** 섹션에서 다음을 수행합니다.

   1. **DB 인스턴스 식별자**에서 DB 인스턴스의 이름을 입력합니다.

   1. **마스터 사용자 이름**에 사용자 이름을 입력합니다. 나중에 콘솔에서 이 값을 검색할 수 있습니다.

      비 CDB에 연결하는 경우 마스터 사용자는 비 CDB의 사용자입니다. CDB에 연결하는 경우 마스터 사용자는 PDB의 사용자입니다. CDB 루트에 연결하려면 호스트에 로그인하고 SQL 클라이언트를 시작한 다음 SQL 명령을 사용하여 관리자를 생성합니다.  

   1. **암호 자동 생성**을 지웁니다.

1. **DB 인스턴스 클래스**를 선택합니다.

   지원되는 클래스는 [RDS Custom for Oracle에 대한 DB 인스턴스 클래스 지원](custom-oracle-feature-support.md#custom-reqs-limits.instances) 섹션을 참조하세요.

1. **스토리지(Storage)** 섹션에서 다음을 수행합니다.

   1. **스토리지 유형**에서 SSD 유형(io1, io2, gp2 또는 gp3)을 선택합니다. 다음과 같은 추가 옵션이 있습니다.
      + io1, io2 또는 gp3의 경우 **프로비저닝된 IOPS**의 속도를 선택합니다. 기본값은 io1 및 io2의 경우 1,000이고 gp3의 경우 12,000입니다.
      + gp3에서 **스토리지 처리량** 속도를 선택합니다. 기본값은 500MiBps입니다.

   1. **할당된 스토리지**에서 스토리지 크기를 선택합니다. 기본값은 40GiB입니다.

1. **연결**에서 **Virtual Private Cloud(VPC)**, **DB 서브넷 그룹**, **VPC 보안 그룹(방화벽)**을 지정합니다.

1. **RDS Custom 보안**을 위해서는 다음을 수행합니다.

   1. **IAM 인스턴스 프로파일(IAM instance profile)**에서 RDS Custom for Oracle DB 인스턴스의 인스턴스 프로파일을 선택합니다.

      IAM 인스턴스 프로파일은 `AWSRDSCustom`으로 시작해야 합니다(예: *AWSRDSCustomInstanceProfileForRdsCustomInstance*).

   1. **암호화(Encryption)**의 경우 **키 ARN 입력(Enter a key ARN)**을 선택하여 사용 가능한 AWS KMS 키를 나열합니다. 그런 다음 목록에서 키를 선택합니다.

      AWS KMS 키는 RDS Custom에 필수입니다. 자세한 내용은 [1단계: 대칭 암호화 AWS KMS 키 생성 또는 재사용](custom-setup-orcl.md#custom-setup-orcl.cmk) 섹션을 참조하세요.

1. **데이터베이스 옵션**에서 다음을 수행합니다.

   1. (선택 사항) **시스템 ID(SID)**에 Oracle SID의 값을 입력합니다. 이 값은 CDB의 이름이기도 합니다. SID는 데이터베이스 파일을 관리하는 Oracle 데이터베이스 인스턴스의 이름입니다. 이 맥락에서 ‘Oracle 데이터베이스 인스턴스’라는 용어는 SGA(시스템 글로벌 영역) 및 Oracle 백그라운드 프로세스만을 지칭합니다. SID를 지정하지 않으면 기본값 **RDSCDB**가 사용됩니다.

   1. (선택 사항) **초기 데이터베이스 이름**에 이름을 입력합니다. 기본값은 **ORCL**입니다. 멀티테넌트 아키텍처에서 초기 데이터베이스 이름은 PDB 이름입니다.
**참고**  
SID와 PDB 이름은 달라야 합니다.

   1. **옵션 그룹**의 경우 옵션 그룹을 선택하거나 기본값을 그대로 사용합니다.
**참고**  
RDS Custom for Oracle에 지원되는 유일한 옵션은 `Timezone`입니다. 자세한 내용은 [Oracle 시간대](custom-managing.timezone.md) 섹션을 참조하세요.

   1. **백업 보존 기간**에서 값일을 선택합니다. **0일**은 선택할 수 없습니다.

   1. 나머지 섹션에서 원하는 대로 RDS Custom DB 인스턴스 설정을 지정합니다. 각 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_CreateDBInstance.Settings.md) 섹션을 참조하세요. 다음 설정은 콘솔에 표시되지 않으며 지원되지 않습니다.
      + **프로세서 기능**
      + **Storage autoscaling(스토리지 Autoscaling**
      + **데이터베이스 인증(Database authentication)**의 **암호 및 Kerberos 인증(Password and Kerberos authentication)** 옵션(**암호 인증(Password authentication)**만 지원)
      + **성능 개선 도우미** 
      + **로그 내보내기**
      + **마이너 버전 자동 업그레이드 활성화**
      + **삭제 방지**

1. **Create database**(데이터베이스 생성)를 선택합니다.
**중요**  
RDS Custom for Oracle DB 인스턴스를 생성할 때 다음 오류가 표시될 수 있습니다. 서비스 연결 역할이 생성되고 있습니다. 나중에 다시 시도해 주세요. 이 경우에는 몇 분 정도 기다렸다가 다시 DB 인스턴스를 생성하면 됩니다.

   **View credential details**(보안 인증 세부 정보 보기) 버튼이 **Databases**(데이터베이스) 페이지에 표시됩니다.

   RDS Custom DB 인스턴스의 마스터 사용자 이름 및 암호를 보려면 **자격 증명 세부 정보 보기(View credential details)**를 선택합니다.

   DB 인스턴스를 마스터 사용자로 연결하려면 화면에 나타난 사용자 이름과 암호를 사용합니다.
**중요**  
콘솔에서 마스터 사용자 암호를 다시 볼 수 없습니다. 따라서 기록을 해두지 않으면 이를 변경해야 합니다. RDS Custom DB 인스턴스를 사용할 수 있게 된 후에 마스터 사용자 암호를 변경하려면 데이터베이스에 로그인하여 `ALTER USER` 명령을 실행합니다. 콘솔에서 **수정** 옵션을 사용하여 암호를 재설정할 수 없습니다.

1. **데이터베이스(Databases)**를 선택하여 RDS Custom DB 인스턴스 목록을 확인합니다.

1. 방금 생성한 RDS Custom DB 인스턴스를 선택합니다.

   RDS 콘솔에 새로운 RDS Custom DB 인스턴스의 세부 정보가 표시됩니다.
   + RDS Custom DB 인스턴스를 만들고 사용할 준비가 될 때까지 DB 인스턴스의 상태는 **생성 중(creating)**입니다. 상태가 **available**로 변경되면 DB 인스턴스에 연결할 수 있습니다. 할당된 인스턴스 클래스 및 스토리지에 따라 새 DB 인스턴스를 사용할 수 있게 되기까지 몇 분 정도 걸릴 수 있습니다.
   + **역할(Role)**에는 **인스턴스(RDS Custom)(Instance (RDS Custom))** 값이 있습니다.
   + **RDS Custom 자동화 모드(RDS Custom automation mode)**에는 **완전 자동화(Full automation)** 값이 있습니다. 이 설정은 DB 인스턴스가 자동 모니터링 및 인스턴스 복구를 제공함을 의미합니다.

### AWS CLI
<a name="custom-creating.CLI"></a>

[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 명령을 사용하여 RDS Custom DB 인스턴스를 생성합니다.

다음 옵션이 필요합니다.
+ `--db-instance-identifier`
+ `--db-instance-class`(지원되는 인스턴스 클래스 목록은 섹션 참조)[RDS Custom for Oracle에 대한 DB 인스턴스 클래스 지원](custom-oracle-feature-support.md#custom-reqs-limits.instances)
+ `--engine engine-type`(*엔진 유형*은 `custom-oracle-ee`, `custom-oracle-se2`, `custom-oracle-ee-cdb`, `custom-oracle-se2-cdb`)
+ `--engine-version cev`(여기서 *`cev`*는 [CEV 생성](custom-cev.create.md)에서 지정한 사용자 지정 엔진 버전의 이름)
+ `--kms-key-id my-kms-key`
+ `--backup-retention-period days`(여기서 *`days`*는 `0`보다 큰 값)
+ `--no-auto-minor-version-upgrade`
+ `--custom-iam-instance-profile AWSRDSCustomInstanceProfile-us-east-1`(여기서 *`region`*은 DB 인스턴스를 생성하는 AWS 리전)

다음 예제에서는 `my-cfo-cdb-instance`라는 RDS Custom DB 인스턴스를 생성합니다. 데이터베이스는 기본값이 아닌 이름 *MYCDB*가 지정된 CDB입니다. 기본값이 아닌 PDB 이름은 *MYPDB*입니다. 백업 보존 기간은 3일로 설정합니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
 1. aws rds create-db-instance \
 2.     --engine custom-oracle-ee-cdb \
 3.     --db-instance-identifier my-cfo-cdb-instance \
 4.     --engine-version 19.cdb_cev1 \
 5.     --db-name MYPDB \
 6.     --db-system-id MYCDB \
 7.     --allocated-storage 250 \
 8.     --db-instance-class db.m5.xlarge \
 9.     --db-subnet-group mydbsubnetgroup \
10.     --master-username myuser \
11.     --master-user-password mypassword \
12.     --backup-retention-period 3 \
13.     --port 8200 \
14.     --kms-key-id my-kms-key \
15.     --no-auto-minor-version-upgrade \
16.     --custom-iam-instance-profile AWSRDSCustomInstanceProfile-us-east-1
```
Windows의 경우:  

```
 1. aws rds create-db-instance ^
 2.     --engine custom-oracle-ee-cdb ^
 3.     --db-instance-identifier my-cfo-cdb-instance ^
 4.     --engine-version 19.cdb_cev1 ^
 5.     --db-name MYPDB ^
 6.     --db-system-id MYCDB ^
 7.     --allocated-storage 250 ^
 8.     --db-instance-class db.m5.xlarge ^
 9.     --db-subnet-group mydbsubnetgroup ^
10.     --master-username myuser ^
11.     --master-user-password mypassword ^
12.     --backup-retention-period 3 ^
13.     --port 8200 ^
14.     --kms-key-id my-kms-key ^
15.     --no-auto-minor-version-upgrade ^
16.     --custom-iam-instance-profile AWSRDSCustomInstanceProfile-us-east-1
```
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

`describe-db-instances` 명령을 사용하여 인스턴스에 대한 세부 정보를 가져옵니다.

**Example**  

```
1. aws rds describe-db-instances --db-instance-identifier my-cfo-cdb-instance
```
다음 부분 출력은 엔진, 파라미터 그룹 및 기타 정보를 보여줍니다.  

```
 1.         {   
 2.             "DBInstanceIdentifier": "my-cfo-cdb-instance",
 3.             "DBInstanceClass": "db.m5.xlarge",
 4.             "Engine": "custom-oracle-ee-cdb",
 5.             "DBInstanceStatus": "available",
 6.             "MasterUsername": "admin",
 7.             "DBName": "MYPDB",
 8.             "DBSystemID": "MYCDB",
 9.             "Endpoint": {
10.                 "Address": "my-cfo-cdb-instance.abcdefghijkl.us-east-1.rds.amazonaws.com",
11.                 "Port": 1521,
12.                 "HostedZoneId": "A1B2CDEFGH34IJ"
13.             },
14.             "AllocatedStorage": 100,
15.             "InstanceCreateTime": "2023-04-12T18:52:16.353000+00:00",
16.             "PreferredBackupWindow": "08:46-09:16",
17.             "BackupRetentionPeriod": 7,
18.             "DBSecurityGroups": [],
19.             "VpcSecurityGroups": [
20.                 {
21.                     "VpcSecurityGroupId": "sg-0a1bcd2e",
22.                     "Status": "active"
23.                 }
24.             ],
25.             "DBParameterGroups": [
26.                 {
27.                     "DBParameterGroupName": "default.custom-oracle-ee-cdb-19",
28.                     "ParameterApplyStatus": "in-sync"
29.                 }
30.             ],
31. ...
```

## 멀티테넌트 아키텍처 고려 사항
<a name="custom-creating.overview"></a>

Oracle 멀티테넌트 아키텍처(`custom-oracle-ee-cdb` 또는 `custom-oracle-se2-cdb` 엔진 유형)를 사용하여 Amazon RDS Custom for Oracle DB 인스턴스를 생성하는 경우 데이터베이스는 컨테이너 데이터베이스(CDB)입니다. Oracle 멀티테넌트 아키텍처를 지정하지 않는 경우 데이터베이스는 `custom-oracle-ee` 또는 `custom-oracle-se2` 엔진 유형을 사용하는 기존의 비CDB입니다. 비 CDB에는 플러그형 데이터베이스(PDB)가 포함될 수 없습니다. 자세한 내용은 [Amazon RDS Custom for Oracle 데이터베이스 아키텍처](custom-oracle.db-architecture.md) 섹션을 참조하세요.

RDS Custom for Oracle CDB 인스턴스를 생성할 때는 다음 사항을 고려하세요.
+ Oracle Database 19c CEV에서만 멀티테넌트 데이터베이스를 생성할 수 있습니다.
+ CEV가 `custom-oracle-ee-cdb` 또는 `custom-oracle-se2-cdb` 엔진 유형을 사용하는 경우에만 CDB 인스턴스를 만들 수 있습니다.
+ Standard Edition 2를 사용하여 CDB 인스턴스를 생성하는 경우 CDB에는 최대 3개의 PDB를 포함할 수 있습니다.
+ 기본적으로 CDB의 이름은 `RDSCDB`이며, 이는 Oracle 시스템 ID(Oracle SID)의 이름이기도 합니다. 다른 이름으로 변경할 수 있습니다.
+ CDB에는 초기 PDB가 하나만 있습니다. PDB 이름의 기본값은 `ORCL`입니다. 첫 PDB에 다른 이름을 선택할 수도 있지만, Oracle SID와 PDB 이름은 같으면 안 됩니다.
+ RDS Custom for Oracle은 PDB용 API를 제공하지 않습니다. 추가 PDB를 생성하려면 Oracle SQL 명령 `CREATE PLUGGABLE DATABASE`를 사용합니다. RDS Custom for Oracle은 생성할 수 있는 PDB 수를 제한하지 않습니다. 일반적으로 온프레미스 배포에서와 마찬가지로 PDB를 생성하고 관리하는 것은 사용자의 책임입니다.
+ RDS API를 사용하여 PDB를 생성, 수정 및 삭제할 수 없습니다. Oracle SQL 문을 사용해야 합니다. Oracle SQL로 PDB를 생성할 때 시점 복구(PITR)를 수행해야 하는 경우에 대비하여 나중에 수동 스냅샷을 생성하는 것이 좋습니다.
+ 기존 PDB의 이름은 Amazon RDS API를 사용하여 변경할 수 없습니다. `modify-db-instance` 명령을 사용하여 CDB의 이름을 바꿀 수도 없습니다.
+ CDB 루트의 열기 모드는 기본 데이터베이스에서는 `READ WRITE`이고 탑재된 대기 데이터베이스에서는 `MOUNTED`입니다. RDS Custom for Oracle은 CDB를 열 때 모든 PDB를 열려고 시도합니다. RDS Custom for Oracle이 일부 PDB를 열 수 없는 경우 `tenant database shutdown` 이벤트가 발생합니다.

## RDS Custom 서비스 연결 역할
<a name="custom-creating.slr"></a>

*서비스 연결 역할*을 사용하여 AWS 계정의 리소스에 대한 Amazon RDS Custom 액세스 권한을 부여합니다. 필요한 권한을 수동으로 추가할 필요가 없어 RDS Custom을 보다 쉽게 사용할 수 있습니다. RDS Custom은 서비스 연결 역할의 권한을 정의하므로, 달리 정의하지 않으면 RDS Custom만 해당 역할을 맡을 수 있습니다. 정의된 권한에는 신뢰 정책과 권한 정책이 포함되며, 이 권한 정책은 다른 IAM 엔터티에 연결할 수 없습니다.

RDS Custom DB 인스턴스를 생성하면 Amazon RDS 및 RDS Custom 서비스 연결 역할이 모두 생성되어(존재하지 않았던 경우) 사용됩니다. 자세한 내용은 [Amazon RDS에 서비스 연결 역할 사용](UsingWithRDS.IAM.ServiceLinkedRoles.md) 섹션을 참조하세요.

RDS Custom for Oracle DB 인스턴스를 처음 생성할 때 다음 오류가 표시될 수 있습니다. 서비스 연결 역할이 생성되고 있습니다. 나중에 다시 시도해 주세요. 이 경우에는 몇 분 정도 기다렸다가 다시 DB 인스턴스를 생성하면 됩니다.

## RDS Custom for Oracle DB 인스턴스에 추가 소프트웨어 구성 요소 설치
<a name="custom-install-add-software"></a>

새로 만든 DB 인스턴스의 데이터베이스 환경에는 Oracle 바이너리, 데이터베이스 및 데이터베이스 리스너가 포함됩니다. DB 인스턴스의 호스트 운영 체제에 추가 소프트웨어를 설치해야 할 수 있습니다. 예를 들어 Oracle Application Express(APEX), Oracle Enterprise Manager(OEM) 에이전트 또는 Guardium S-TAP 에이전트를 설치할 수 있습니다. 가이드 및 개괄적인 지침이 자세히 나와 있는 AWS 블로그 게시물 [Amazon RDS Custom for Oracle에 추가 소프트웨어 구성 요소 설치](https://aws.amazon.com//blogs/database/install-additional-software-components-on-amazon-rds-custom-for-oracle/)를 참조하세요.

# 세션 관리자를 사용하여 RDS Custom DB 인스턴스에 연결
<a name="custom-creating.ssm"></a>

RDS Custom DB 인스턴스를 생성한 후 AWS Systems Manager Session Manager를 사용하여 연결할 수 있습니다. 이는 DB 인스턴스에 공개적으로 액세스할 수 없을 때 우선적으로 사용되는 기술입니다.

Session Manager를 사용하면 브라우저 기반 쉘 또는 AWS CLI를 통해 Amazon EC2 인스턴스에 액세스할 수 있습니다. 자세한 내용은 [AWS Systems Manager 세션 관리자](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)를 참조하세요.

## 콘솔
<a name="custom-managing.ssm.console"></a>

**세션 관리자를 사용하여 DB 인스턴스에 연결하는 방법**

1. [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 AWS Management Console에 로그인한 후 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스(Databases)**를 선택한 후 연결하려는 RDS Custom DB 인스턴스를 선택합니다.

1. **Configuration**(구성)을 선택합니다.

1. DB 인스턴스의 **리소스 ID(Resource ID)**를 기록해 둡니다. 예를 들어, 리소스 ID는 `db-ABCDEFGHIJKLMNOPQRS0123456`일 수 있습니다.

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **Instances**(인스턴스)를 선택합니다.

1. EC2 인스턴스의 이름을 찾은 다음 연결된 인스턴스 ID를 클릭합니다. 예를 들어, 인스턴스 ID는 `i-abcdefghijklm01234`일 수 있습니다.

1. **연결**을 선택합니다.

1. **세션 관리자(Session Manager)**를 선택합니다.

1. **Connect**(연결)를 선택합니다.

   세션에 대한 창이 열립니다.

## AWS CLI
<a name="custom-managing.ssm.CLI"></a>

AWS CLI를 사용하여 RDS Custom DB 인스턴스에 연결할 수 있습니다. 이 기술을 사용하려면 AWS CLI용 세션 관리자 플러그인이 필요합니다. 플러그인 설치 방법은 [AWS CLI용 세션 관리자 플러그인 설치](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html)를 참조하세요.

RDS Custom DB 인스턴스의 DB 리소스 ID를 찾으려면 `aws rds [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html)`를 사용합니다.

```
aws rds describe-db-instances \
    --query 'DBInstances[*].[DBInstanceIdentifier,DbiResourceId]' \
    --output text
```

다음 샘플 출력은 RDS Custom 인스턴스의 리소스 ID를 보여줍니다. 접두사는 `db-`입니다.

```
db-ABCDEFGHIJKLMNOPQRS0123456
```

DB 인스턴스의 EC2 인스턴스 ID를 찾으려면 `aws ec2 describe-instances`를 사용합니다. 다음 예제에는 리소스 ID로 `db-ABCDEFGHIJKLMNOPQRS0123456`이 사용됩니다.

```
aws ec2 describe-instances \
    --filters "Name=tag:Name,Values=db-ABCDEFGHIJKLMNOPQRS0123456" \
    --output text \
    --query 'Reservations[*].Instances[*].InstanceId'
```

다음 샘플 출력에는 EC2 인스턴스 ID가 나와 있습니다.

```
i-abcdefghijklm01234
```

`--target` 파라미터의 EC2 인스턴스 ID를 제공하는 `aws ssm start-session` 명령을 사용합니다.

```
aws ssm start-session --target "i-abcdefghijklm01234"
```

성공적으로 연결되면 다음과 같이 표시됩니다.

```
Starting session with SessionId: yourid-abcdefghijklm1234
[ssm-user@ip-123-45-67-89 bin]$
```

## SSH를 사용하여 RDS Custom DB 인스턴스에 연결
<a name="custom-creating.ssh"></a>

SSH(Secure Shell Protocol)는 보안이 되지 않은 네트워크를 통한 암호화된 통신을 지원하는 네트워크 프로토콜입니다. RDS Custom DB 인스턴스를 생성한 후 ssh 클라이언트를 사용하여 이 인스턴스에 연결할 수 있습니다. 자세한 내용은 [SSH를 사용하여 Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)을 참조하세요.

SSH 연결 기술은 DB 인스턴스가 프라이빗 인스턴스인지에 따라 좌우됩니다. 즉, 이 기술은 퍼블릭 인터넷 연결을 허용하지 않습니다. 이 경우 SSH 터널링을 사용하여 ssh 유틸리티를 인스턴스에 연결해야 합니다. 이 기술은 기존 SSH 세션 내에서 전용 데이터 스트림(터널)을 사용하여 데이터를 전송합니다. AWS Systems Manager를 사용하여 SSH 터널링을 구성할 수 있습니다.

**참고**  
프라이빗 인스턴스에 액세스할 수 있는 다양한 전략이 지원됩니다. Bastion 호스트를 사용하여 ssh 클라이언트를 프라이빗 인스턴스에 연결하는 방법을 알아보려면 [Linux Bastion Hosts on AWS](https://aws.amazon.com/solutions/implementations/linux-bastion/)을 참조하세요. 포트 전달을 구성하는 방법을 알아보려면 [AWS Systems Manager Session Manager를 사용하여 포트 전달](https://aws.amazon.com/blogs/aws/new-port-forwarding-using-aws-system-manager-sessions-manager/)을 참조하세요.

DB 인스턴스가 퍼블릭 서브넷에 있고 공개적으로 사용 가능한 설정이 있는 경우 SSH 터널링이 필요하지 않습니다. 퍼블릭 Amazon EC2 인스턴스와 마찬가지로 SSH를 사용하여 연결할 수 있습니다.

ssh 클라이언트를 DB 인스턴스에 연결하려면 다음 단계를 완료하세요.

1. [1단계: SSH 연결을 허용하도록 DB 인스턴스 구성](#custom-managing.ssh.port-22)

1. [2단계: SSH 비밀 키 및 EC2 인스턴스 ID 검색](#custom-managing.ssh.obtaining-key)

1. [3단계: ssh 유틸리티를 사용하여 EC2 인스턴스에 연결](#custom-managing.ssh.connecting)

### 1단계: SSH 연결을 허용하도록 DB 인스턴스 구성
<a name="custom-managing.ssh.port-22"></a>

DB 인스턴스가 SSH 연결을 허용할 수 있는지 확인하려면 다음을 수행합니다.
+ DB 인스턴스 보안 그룹이 TCP용 포트 22에서 인바운드 연결을 허용하는지 확인해야 합니다.

  DB 인스턴스의 보안 그룹을 구성하는 방법을 알아보려면 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 섹션을 참조하세요.
+ SSH 터널링을 사용할 계획이 없는 경우 DB 인스턴스가 퍼블릭 서브넷에 있고 퍼블릭 액세스가 가능한지 확인합니다.

  콘솔의 관련 필드는 데이터베이스 세부 정보 페이지의 **연결 및 보안** 탭에 있는 **퍼블릭 액세스 가능**입니다. CLI에서 설정을 확인하려면 다음 명령을 실행합니다.

  ```
  aws rds describe-db-instances \
  --query 'DBInstances[*].{DBInstanceIdentifier:DBInstanceIdentifier,PubliclyAccessible:PubliclyAccessible}' \
  --output table
  ```

  DB 인스턴스의 접근성 설정을 변경하려면 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

### 2단계: SSH 비밀 키 및 EC2 인스턴스 ID 검색
<a name="custom-managing.ssh.obtaining-key"></a>

SSH를 사용하여 DB 인스턴스에 연결하려면 인스턴스와 연결된 SSH 키 페어가 필요합니다. RDS Custom은 SSH 키 페어를 자동으로 만드는데, 이때 이름 지정 규칙 `do-not-delete-rds-custom-ssh-privatekey-resource_id-uuid` 또는 `rds-custom!oracle-do-not-delete-resource_id-uuid-ssh-privatekey`를 사용하여 이름을 지정합니다. AWS Secrets Manager는 SSH 프라이빗 키를 보안 암호로 저장합니다.

AWS Management Console 또는 AWS CLI 중 하나를 사용하여 SSH 비밀 키를 검색할 수 있습니다. 인스턴스에 퍼블릭 DNS가 있고 SSH 터널링을 사용하지 않으려는 경우 DNS 이름도 검색하세요. 퍼블릭 연결의 DNS 이름을 지정합니다.

#### 콘솔
<a name="custom-managing.ssh.obtaining-key.console"></a>

**SSH 비밀 키를 검색하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스(Databases)**를 선택한 후 연결하려는 RDS Custom DB 인스턴스를 선택합니다.

1. **Configuration**(구성)을 선택합니다.

1. **리소스 ID(Resource ID)** 값을 기록해 둡니다. 예를 들어 DB 인스턴스 리소스 ID는 `db-ABCDEFGHIJKLMNOPQRS0123456`일 수 있습니다.

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. EC2 인스턴스의 이름을 찾고 연결된 인스턴스 ID를 선택합니다. 예를 들어, EC2 인스턴스 ID는 `i-abcdefghijklm01234`일 수 있습니다.

1. **세부 정보(Details)**에서 **키 페어 이름(Key pair name)**을 찾습니다. 페어 이름에는 DB 인스턴스 리소스 ID가 포함됩니다. 예를 들어, 페어 이름은 `do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c` 또는 `rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey`일 수 있습니다.

1. EC2 인스턴스가 퍼블릭인 경우 **퍼블릭 IPv4 DNS**를 기록해 둡니다. 예를 들어, 퍼블릭 도메인 이름 시스템(DNS) 주소는 `ec2-12-345-678-901.us-east-2.compute.amazonaws.com`일 수 있습니다.

1. [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)에서 AWS Secrets Manager 콘솔을 엽니다.

1. 키 페어와 이름이 같은 비밀 키를 선택합니다.

1. **Retrieve secret value**(보안 암호 값 검색)를 선택합니다.

1. SSH 프라이빗 키를 텍스트 파일로 복사한 다음 `.pem` 확장자로 파일을 저장합니다. 예를 들어, 파일을 `/tmp/do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem` 또는 `/tmp/rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem`으로 저장합니다.

#### AWS CLI
<a name="custom-managing.ssh.obtaining-key.CLI"></a>

SSH 프라이빗 키를 검색하고 .pem 파일에 저장하려면 AWS CLI를 사용하면 됩니다.

1. `aws rds [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html)`를 사용하여 RDS Custom DB 인스턴스의 DB 리소스 ID를 찾습니다.

   ```
   aws rds describe-db-instances \
       --query 'DBInstances[*].[DBInstanceIdentifier,DbiResourceId]' \
       --output text
   ```

   다음 샘플 출력은 RDS Custom 인스턴스의 리소스 ID를 보여줍니다. 접두사는 `db-`입니다.

   ```
   db-ABCDEFGHIJKLMNOPQRS0123456
   ```

1. `aws ec2 describe-instances`를 사용하여 DB 인스턴스의 EC2 인스턴스 ID를 찾습니다. 다음 예제에는 리소스 ID로 `db-ABCDEFGHIJKLMNOPQRS0123456`이 사용됩니다.

   ```
   aws ec2 describe-instances \
       --filters "Name=tag:Name,Values=db-ABCDEFGHIJKLMNOPQRS0123456" \
       --output text \
       --query 'Reservations[*].Instances[*].InstanceId'
   ```

   다음 샘플 출력에는 EC2 인스턴스 ID가 나와 있습니다.

   ```
   i-abcdefghijklm01234
   ```

1. 키 이름을 찾으려면 EC2 인스턴스 ID를 지정합니다. 다음 예제에서는 EC2 인스턴스 `i-0bdc4219e66944afa`에 대해 설명합니다.

   ```
   aws ec2 describe-instances \
       --instance-ids i-0bdc4219e66944afa \
       --output text \
       --query 'Reservations[*].Instances[*].KeyName'
   ```

   다음 샘플 출력은 이름 지정 형식 `do-not-delete-rds-custom-ssh-privatekey-resource_id-uuid` 또는 `rds-custom!oracle-do-not-delete-resource_id-uuid-ssh-privatekey`를 사용하는 키 이름을 보여줍니다.

   ```
   do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c
   rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey
   ```

1. `aws secretsmanager`를 사용하여 키의 이름을 따라 명명된 .pem 파일로 프라이빗 키를 저장합니다.

   다음 예제에서는 `/tmp` 디렉터리의 파일에 `do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c` 키를 저장합니다.

   ```
   aws secretsmanager get-secret-value \
       --secret-id do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c \
       --query SecretString \
       --output text >/tmp/do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem
   ```

   다음 예제에서는 `/tmp` 디렉터리의 파일에 `rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey` 키를 저장합니다.

   ```
   aws secretsmanager get-secret-value \
       --secret-id rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey \
       --query SecretString \
       --output text >/tmp/rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem
   ```

### 3단계: ssh 유틸리티를 사용하여 EC2 인스턴스에 연결
<a name="custom-managing.ssh.connecting"></a>

연결 방법은 프라이빗 DB 인스턴스에 연결하는지 또는 퍼블릭 인스턴스에 연결하는지에 따라 달라집니다. 프라이빗 연결을 위해서는 AWS Systems Manager를 통해 SSH 터널링을 구성해야 합니다.

**ssh 유틸리티를 사용하여 EC2 인스턴스에 연결하려면**

1. 프라이빗 연결의 경우 SSH 구성 파일을 수정하여 명령을 AWS Systems Manager Session Manager로 프록시합니다. 퍼블릭 연결의 경우 2단계로 건너뜁니다.

   다음 행을 `~/.ssh/config`에 추가합니다. 이러한 행은 이름이 `i-` 또는 `mi-`로 시작하는 호스트에 대한 SSH 명령을 프록시합니다.

   ```
   Host i-* mi-*
       ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
   ```

1. .pem 파일이 들어 있는 디렉터리로 변경하고, `chmod`를 사용하여 권한을 `400`으로 설정합니다.

   다음 예제에서는 `/tmp` 디렉터리를 변경하고 .pem 파일 `do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem`에 대한 권한을 설정합니다.

   ```
   cd /tmp
   chmod 400 do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem
   ```

   다음 예제에서는 `/tmp` 디렉터리를 변경하고 .pem 파일 `rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem`에 대한 권한을 설정합니다.

   ```
   cd /tmp
   chmod 400 rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem
   ```

1. ssh 유틸리티를 실행하여.pem 파일과 퍼블릭 DNS 이름(퍼블릭 연결용) 또는 EC2 인스턴스 ID(프라이빗 연결용)를 지정합니다. `ec2-user` 사용자로 로그인합니다.

   다음 예제에서는 DNS 이름 `ec2-12-345-678-901.us-east-2.compute.amazonaws.com`을 사용하여 퍼블릭 인스턴스에 연결합니다.

   ```
   # .pem file using naming prefix do-not-delete
   ssh -i \
     "do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem" \
     ec2-user@ec2-12-345-678-901.us-east-2.compute.amazonaws.com
   
   # .pem file using naming prefix rds-custom!oracle-do-not-delete
   ssh -i \
     "rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem" \
     ec2-user@ec2-12-345-678-901.us-east-2.compute.amazonaws.com
   ```

   다음 예제에서는 EC2 인스턴스 ID `i-0bdc4219e66944afa`를 사용하여 프라이빗 인스턴스에 연결합니다.

   ```
   # .pem file using naming prefix do-not-delete
   ssh -i \
     "do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem" \
     ec2-user@i-0bdc4219e66944afa
   
   # .pem file using naming prefix rds-custom!oracle-do-not-delete
   ssh -i \
     "rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem" \
     ec2-user@i-0bdc4219e66944afa
   ```

# RDS Custom for Oracle 데이터베이스에 SYS로 로그인
<a name="custom-creating.sysdba"></a>

RDS Custom DB 인스턴스를 생성한 후 Oracle 데이터베이스에 `SYS` 사용자로 로그인할 수 있으며, 이 경우 `SYSDBA` 권한이 부여됩니다. 로그인 옵션은 다음과 같습니다.
+ Secrets Manager에서 `SYS` 암호를 가져오고, SQL 클라이언트에서 이 암호를 지정합니다.
+ OS 인증을 사용하여 데이터베이스에 로그인합니다. 이 경우 암호가 필요하지 않습니다.

## RDS Custom for Oracle 데이터베이스의 SYS 암호 찾기
<a name="custom-creating.sysdba.pwd"></a>

Oracle 데이터베이스에 `SYS` 또는 `SYSTEM`로 로그인하거나, API 호출에 마스터 사용자 이름을 지정하여 로그인할 수 있습니다. `SYS` 및 `SYSTEM`의 암호는 Secrets Manager에 저장됩니다.

보안 암호는 이름 지정 형식 `do-not-delete-rds-custom-resource_id-uuid` 또는 `rds-custom!oracle-do-not-delete-resource_id-uuid`를 사용합니다. AWS Management Console을 사용하여 암호를 찾을 수 있습니다.

### 콘솔
<a name="custom-creating.sysdba.pwd.console"></a>

**Secrets Manager에서 데이터베이스의 SYS 암호를 찾으려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 콘솔에서 다음 단계를 완료합니다.

   1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

   1. RDS Custom for Oracle DB 인스턴스의 이름을 선택합니다.

   1. **구성**을 선택합니다.

   1. **리소스 ID** 아래의 값을 복사합니다. 예를 들어, 리소스 ID는 **db-ABC12CDE3FGH4I5JKLMNO6PQR7**일 수 있습니다.

1. [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)에서 Secrets Manager 콘솔을 엽니다.

1. Secrets Manager 콘솔에서 다음 단계를 완료합니다.

   1. 왼쪽 탐색 창에서 **보안 암호**를 선택합니다.

   1. 2.d단계에서 복사한 리소스 ID를 기준으로 보안 암호를 필터링합니다.

   1. 이름 지정 형식 **do-not-delete-rds-custom-*resource\$1id*-*uuid*** 또는 **rds-custom\$1oracle-do-not-delete-*resource\$1id*-*uuid***를 사용하는 보안 암호를 선택합니다. *resource\$1id*는 2.d단계에서 복사한 리소스 ID입니다.

      예를 들어 리소스 ID가 **db-ABC12CDE3FGH4I5JKLMNO6PQR7**이고 UUID가 **1234ab**인 경우 보안 암호의 이름은 **do-not-delete-rds-custom-db-ABC12CDE3FGH4I5JKLMNO6PQR7-1234ab** 또는 **rds-custom\$1oracle-do-not-delete-db-ABC12CDE3FGH4I5JKLMNO6PQR7-1234ab**입니다.

   1. **보안 암호 값** 섹션에서 **보안 암호 값 검색**을 선택합니다.

   1. **키/값**에서 **암호** 값을 복사합니다.

1. DB 인스턴스에 SQL\$1Plus를 설치하고 데이터베이스에 `SYS`로 로그인합니다. 자세한 내용은 [3단계: SQL 클라이언트를 Oracle DB 인스턴스에 연결](CHAP_GettingStarted.CreatingConnecting.Oracle.md#CHAP_GettingStarted.Connecting.Oracle) 섹션을 참조하세요.

## OS 인증을 사용하여 RDS Custom for Oracle 데이터베이스에 로그인
<a name="custom-creating.sysdba.pwd"></a>

OS 사용자 `rdsdb`는 Oracle 데이터베이스 바이너리를 소유합니다. `rdsdb` 사용자로 전환하여 암호 없이 RDS Custom for Oracle 데이터베이스에 로그인할 수 있습니다.

1. AWS Systems Manager를 사용하여 DB 인스턴스에 연결합니다. 자세한 내용은 [세션 관리자를 사용하여 RDS Custom DB 인스턴스에 연결](custom-creating.ssm.md) 섹션을 참조하세요.

1. `rdsdb` 사용자로 전환합니다.

   ```
   sudo su - rdsdb
   ```

1. OS 인증을 사용하여 데이터베이스에 로그인합니다. `sqlplus / as sysdba` 또는 `sql` 별칭을 사용할 수 있습니다.

   ```
   $ sqlplus / as sysdba
   
   SQL*Plus: Release 21.0.0.0.0 - Production on Wed Apr 12 20:11:08 2023
   Version 21.9.0.0.0
   
   Copyright (c) 1982, 2020, Oracle.  All rights reserved.
   
   
   Connected to:
   Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
   Version 19.10.0.0.0
   ```

   또는 `sql` 별칭을 사용할 수 있습니다.

   ```
   $ sql
   ```