Kerberos 인증을 사용한 Amazon RDS Oracle을 이용한 데이터베이스 접근
Teleport v18.9Teleport는 Teleport Database Service를 통해 Amazon RDS for Oracle에 대한 보안 접근을 제공할 수 있습니다. Teleport 데이터베이스 서비스는 Oracle 데이터베이스와 동일한 Active Directory 도메인에 가입하고 Kerberos 프로토콜을 사용하여 Oracle에 인증합니다.
Teleport는 Teleport Database Service를 통해 Amazon RDS for Oracle에 대한 보안 접근을 제공할 수 있습니다. 이를 통해 Teleport의 RBAC를 사용한 세분화된 접근 제어가 가능합니다.
이 가이드에서는 다음을 수행합니다:
- Amazon RDS for Oracle 데이터베이스를 구성합니다 with Kerberos authentication.
- 데이터베이스를 Teleport 클러스터에 추가합니다.
- Teleport를 통해 데이터베이스에 연결합니다.
작동 방식#
Teleport 데이터베이스 서비스는 Oracle 데이터베이스와 동일한 Active Directory 도메인에 가입하고 Kerberos 프로토콜을 사용하여 Oracle에 인증합니다. 사용자가 Teleport를 통해 Oracle에 연결하면 데이터베이스 서비스는 Active Directory에서 서비스 티켓을 얻고, 데이터베이스 사용자의 장기 키를 사용하여 티켓을 복호화한 다음 Oracle에 연결합니다. 이 시점에서 데이터베이스 서비스는 사용자 트래픽을 데이터베이스로 전달합니다.
전제 조건#
-
실행 중인 Teleport (v17.4.0 or higher) 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
- Amazon RDS for Oracle 데이터베이스 인스턴스.
- AWS Directory Service 관리형 Microsoft AD.
- 데이터베이스와 동일한 Active Directory 도메인에 가입된 Linux 노드. 없는 경우 이 가이드에서 가입 단계를 안내합니다.
- Oracle 클라이언트. 기본 옵션은 SQLcl이지만, 대체 클라이언트는 아래에서 설명합니다.
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
1/9단계. Oracle RDS 인스턴스 준비#
Teleport를 구성하기 전에 Oracle RDS 인스턴스에 Kerberos 인증과 TLS가 올바르게 구성되어 있는지 확인합니다:
- Amazon RDS Oracle Kerberos 설정 가이드를 따라 인스턴스에서 Kerberos 인증을 활성화합니다.
- Amazon RDS Oracle SSL 설정 문서를 따라 Oracle RDS 인스턴스에서 TLS를 활성화합니다. 최적의 보안을 위해
SQLNET.SSL_VERSION이1.2로 설정되어 있는지 확인합니다. SSL 포트 선택을 기억해 두세요; 이 가이드의 나머지 부분에서는 포트가 2484라고 가정합니다. 또한SQLNET.CIPHER_SUITE파라미터에 지원되는 값(예:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)이 포함되어 있는지 확인합니다.
계속 진행하기 전에 Teleport 데이터베이스 서비스 호스트와 Oracle RDS 인스턴스 간의 연결을 확인하세요.
2/9단계. Oracle AD 사용자 생성#
Oracle 데이터베이스에 이미 Active Directory 로그인이 있는 경우 이 단계를 건너뛸 수 있습니다.
관리자 계정(예: admin)으로 Oracle 데이터베이스에 연결하고 Active Directory 인증을 사용할 사용자를 생성합니다:
CREATE USER "ALICE@EXAMPLE.COM" IDENTIFIED EXTERNALLY;
GRANT CREATE SESSION TO "ALICE@EXAMPLE.COM";
Oracle RDS에서 예상하는 사용자 이름은 영역 이름이 뒤따르는 대문자 형식입니다. 다른 표기 방법은 문제를 일으킬 수 있습니다.
3/9단계. Linux 노드를 Active Directory에 가입#
Oracle 인스턴스와 동일한 Active Directory 도메인에 가입된 Linux 노드가 이미 있는 경우 이 단계를 건너뛸 수 있습니다.
데이터베이스 서비스가 실행될 Linux 노드는 Oracle 데이터베이스와 동일한 Active Directory 도메인에 가입되어 있어야 합니다.
가입하려면 Linux 노드가 Active Directory 정규화된 도메인 이름을 확인할 수 있어야 합니다. 예를 들어, AWS 관리형 AD의 경우 디렉터리 개요 페이지의 "네트워킹 세부 정보"에 제공된 네임서버를 사용합니다.
필요한 패키지를 설치합니다:
$ sudo apt-get update
$ sudo apt-get -y install sssd realmd krb5-user samba-common packagekit adcli
$ sudo yum -y update
$ sudo yum -y install sssd realmd krb5-workstation samba-common-tools
/etc/krb5.conf를 편집하여 역방향 DNS 해석을 비활성화하고 기본 영역을 설정합니다. [realms] 섹션에 도메인 정의가 포함되어 있고 도메인 컨트롤러를 가리키는 admin_server 및 kdc 필드가 설정되어 있는지 확인합니다:
[libdefaults]
default_realm = EXAMPLE.COM
rdns = false
[realms]
EXAMPLE.COM = {
kdc = example.com
admin_server = example.com
}
영역에 가입합니다:
$ sudo realm join -v -U admin@EXAMPLE.COM example.com
...
* Successfully enrolled machine in realm
admin@EXAMPLE.COM의 영역 이름은 반드시 대문자여야 합니다. 그렇지 않으면 노드가 가입하지 못할 수 있습니다.
노드가 영역에 가입했는지 확인하려면 realm list 명령을 사용합니다:
$ sudo realm list
example.com
type: kerberos
realm-name: EXAMPLE.COM
domain-name: example.com
configured: kerberos-member
server-software: active-directory
client-software: sssd
...
4/9단계. keytab 파일 생성#
Teleport는 Active Directory에서 Oracle 데이터베이스 인증을 위한 Kerberos 서비스 티켓을 얻기 위해 keytab 파일이 필요합니다. 이를 생성하는 가장 쉬운 방법은 adutil Linux CLI 유틸리티를 사용하는 것입니다.
Active Directory 도메인에 가입한 Linux 노드에 adutil을 설치합니다:
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
$ curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
$ sudo apt-get update
$ sudo ACCEPT_EULA=Y apt-get install -y adutil
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
$ curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
$ sudo apt-get update
$ sudo ACCEPT_EULA=Y apt-get install -y adutil
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
$ curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
$ sudo apt-get update
$ sudo ACCEPT_EULA=Y apt-get install -y adutil
$ sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
$ sudo ACCEPT_EULA=Y yum install -y adutil
$ sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/9/prod.repo
$ sudo ACCEPT_EULA=Y yum install -y adutil
배포판에서 adutil을 사용할 수 없는 경우 대신 ktutil을 사용할 수 있습니다. 표준 Kerberos 유틸리티로 사용 가능해야 합니다.
해당 사용자의 사용자 이름과 kvno를 기반으로 사용법을 조정합니다.
$ ktutil
ktutil: addent -password -p alice@EXAMPLE.COM -k 1 -e aes256-cts-hmac-sha1-96
Password for alice@EXAMPLE.COM: [enter password here]
ktutil: wkt teleport.keytab
ktutil: quit
kinit 명령을 사용하여 Active Directory에 로그인합니다:
$ kinit admin@EXAMPLE.COM
adutil keytab create 명령을 사용하여 Oracle 데이터베이스에 연결할 각 Active Directory 사용자에 대한 keytab 항목을 생성합니다:
$ adutil keytab create teleport.keytab alice
$ adutil keytab create teleport.keytab bob
각 사용자의 암호를 입력하라는 메시지가 표시됩니다. 모든 keytab 항목이 동일한 teleport.keytab 파일에 병합됩니다.
adutil keytab create 명령이 작동하려면 각 사용자 계정에 서비스 주체 이름이 할당되어 있어야 합니다. 그렇지 않으면 명령이 kvno(키 버전 번호)를 확인할 수 없습니다.
사용자에게 할당된 SPN이 있는지 확인하려면 AWS 콘솔의 사용자 페이지로 이동하여 "계정 설정 - 선택사항" 섹션을 찾습니다.

또는 Active Directory 도메인에 가입된 Windows 컴퓨터에서 다음 명령을 실행합니다:
$ setspn -L alice
사용자 계정에 SPN을 할당하려면 다음 명령을 사용합니다:
$ setspn -s user/alice alice
klist 명령을 사용하여 keytab 파일의 항목을 확인할 수 있습니다:
$ klist -ke teleport.keytab
Keytab name: FILE:teleport.keytab
KVNO Principal
---- --------------------------------------------------------------------------
5 alice@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
2 bob@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
인증 실패를 방지하려면 사용자의 암호를 업데이트한 후 keytab 파일을 업데이트해야 합니다.
5/9단계. Teleport 데이터베이스 서비스 설정#
Database Service가 Teleport 클러스터에 조인하려면 유효한 조인 토큰이 필요합니다.
다음 tctl 명령을 실행하고 Database Service를 실행할 서버에서
토큰 출력을 /tmp/token에 저장합니다:
$ tctl tokens add --type=db --format=text
(=presets.tokens.first=)
Linux 서버에 Teleport Agent를 설치하려면:
권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.
-
teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오. -
클러스터의 설치 스크립트를 실행하십시오:
$ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
Teleport 데이터베이스 서비스는 Oracle 인스턴스와 동일한 Active Directory 도메인에 가입된 Linux 서버에서 실행되어야 합니다.
Teleport 데이터베이스 서비스를 구성합니다. --proxy를 Teleport 프록시 서비스 주소를 가리키도록, --uri를 Oracle 엔드포인트로 업데이트해야 합니다. 지정한 포트는 SSL 구성의 일부로 구성된 것이어야 하며 기본값은 2484입니다.
$ sudo teleport db configure create \
-o file \
--token=/tmp/token \
--proxy=teleport.example.com:443 \
--name=oracle \
--protocol=oracle \
--uri=oracle-instance.aabbccddeegg.eu-central-1.rds.amazonaws.com:2484 \
--ad-keytab-file=/etc/teleport/teleport.keytab \
--ad-domain=EXAMPLE.COM \
--labels=env=dev
Active Directory 매개변수를 제공합니다:
| 플래그 | 설명 |
|---|---|
--ad-keytab-file |
위에서 생성한 Kerberos keytab 파일의 경로. |
--ad-domain |
Oracle이 가입된 Active Directory 도메인(Kerberos 영역). |
6/9단계. 데이터베이스 서비스 시작#
systemd 서비스를 생성하여 호스트가 부팅될 때 the Teleport Database Service이 자동으로 시작되도록 구성합니다. 지침은 the Teleport Database Service을 어떻게 설치했는지에 따라 다릅니다.
Package Manager
the Teleport Database Service을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
$ sudo systemctl enable teleport
$ sudo systemctl start teleport
TAR Archive
the Teleport Database Service을 실행할 호스트에서 Teleport용 systemd 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
$ sudo teleport install systemd -o /etc/systemd/system/teleport.service
$ sudo systemctl enable teleport
$ sudo systemctl start teleport
systemctl status teleport로 the Teleport Database Service의 상태를 확인하고 journalctl -fu teleport로
로그를 볼 수 있습니다.
7/9단계. Teleport 사용자 생성#
기존 사용자를 수정하여 Database Service 접근 권한을 부여하려면 Database Access Controls를 참조하십시오.
Teleport Community Edition
내장 access 역할을 가진 로컬 Teleport 사용자를 생성합니다:
$ tctl users add \
--roles=access \
--db-users="*" \
--db-names="*" \
alice
Teleport Enterprise/Enterprise Cloud
내장 access 및 requester 역할을 가진 로컬 Teleport 사용자를 생성합니다:
$ tctl users add \
--roles=access,requester \
--db-users="*" \
--db-names="*" \
alice
| Flag | 설명 |
|---|---|
--roles |
사용자에게 할당할 역할 목록입니다. 내장 access 역할은 Teleport에 등록된 모든 데이터베이스 서버에 연결할 수 있게 합니다. |
--db-users |
사용자가 데이터베이스에 연결할 때 사용할 수 있는 데이터베이스 사용자명 목록입니다. 와일드카드는 모든 사용자를 허용합니다. |
--db-names |
사용자가 데이터베이스 서버 내에서 연결할 수 있는 논리적 데이터베이스(즉, 스키마) 목록입니다. 와일드카드는 모든 데이터베이스를 허용합니다. |
데이터베이스 이름은 PostgreSQL, MongoDB, Cloud Spanner 데이터베이스에서만 적용됩니다.
데이터베이스 접근 제어 및 접근 제한 방법에 대한 자세한 정보는 RBAC 문서를 참조하십시오.
8/9단계. (선택사항) Oracle 감사 추적에서 감사 로그를 가져오도록 Teleport 구성#
Teleport는 Oracle 감사 추적에서 감사 로그를 가져올 수 있습니다. 이 기능을 활성화하려면 Oracle 감사 추적을 구성하고 Oracle 감사 추적에서 감사 이벤트를 가져오는 데 사용할 전용 Teleport 사용자를 생성해야 합니다.
Oracle 감사 추적에서 감사 이벤트를 가져올 내부 Oracle TELEPORT@EXAMPLE.COM 사용자를 생성합니다:
CREATE USER "TELEPORT@EXAMPLE.COM" IDENTIFIED EXTERNALLY;
GRANT CREATE SESSION TO "TELEPORT@EXAMPLE.COM";
GRANT SELECT ON SYS.DBA_AUDIT_TRAIL TO "TELEPORT@EXAMPLE.COM";
GRANT SELECT ON SYS.V_$SESSION TO "TELEPORT@EXAMPLE.COM";
AD에서 해당 TELEPORT@EXAMPLE.COM 사용자를 생성합니다.
RDS Oracle 파라미터 그룹 audit_trail을 db,extended로 수정하여 표준 감사를 활성화합니다.
감사 추적 변경 사항을 적용하려면 Oracle 인스턴스를 재부팅합니다.
alice 사용자에 대한 Oracle 감사를 활성화합니다:
AUDIT ALL STATEMENTS by "ALICE@EXAMPLE.COM" BY access;
Oracle에 연결하는 데 사용할 각 Teleport 사용자에 대해 감사를 활성화해야 합니다. 또한 각 사용자에 대해 다른 감사 정책을 생성할 수 있습니다.
이전에 생성한 감사 사용자를 지정하도록 데이터베이스 서비스 구성을 편집합니다.
db_service:
enabled: true
databases:
- name: "oracle"
protocol: "oracle"
uri: "oracle-instance.aabbccddeegg.eu-central-1.rds.amazonaws.com:2484"
ad:
keytab_file: "/etc/teleport/teleport.keytab"
domain: "EXAMPLE.COM"
krb5_file: "/etc/krb5.conf"
+ oracle:
+ audit_user: "teleport"
Teleport는 Oracle 감사 추적에서 감사 추적 이벤트를 정리하지 않습니다. 디스크 공간 부족을 방지하기 위해 Oracle 감사 추적 정리 정책을 구성해야 합니다.
9/9단계. 연결#
Teleport 클러스터에 로그인합니다. Oracle 데이터베이스가 사용 가능한 데이터베이스 목록에 나타나야 합니다:
$ tsh login --proxy=teleport.example.com --user=alice
$ tsh db ls
# Name Description Labels
# ------ ------------------- -------
# oracle env=dev
데이터베이스에 연결합니다. 이를 위해 PATH에서 sql로 사용 가능한 SQLcl 클라이언트가 필요합니다.
$ tsh db connect --db-user=alice --db-name ORCL oracle
데이터베이스에서 로그아웃하고 자격 증명을 제거하려면:
# 특정 데이터베이스 인스턴스의 자격 증명을 제거합니다.
$ tsh db logout oracle
# 모든 데이터베이스 인스턴스의 자격 증명을 제거합니다.
$ tsh db logout
SQLcl 대신 tsh proxy db 명령과 함께 다른 클라이언트를 사용하여 다른 클라이언트가 사용할 터널을 열 수도 있습니다.
예를 들어:
$ tsh proxy db --db-user=alice --db-name ORCL oracle --port 12345 --tunnel
Started authenticated tunnel for the Oracle database "oracle" in cluster "teleport.example.com" on 127.0.0.1:12345.
Use the following command to connect to the Oracle database server using CLI:
$ sql -L /@localhost:12345/ORCL
Other clients can use:
- a direct connection to 127.0.0.1:12345 without a username and password
- a custom JDBC connection string: 'jdbc:oracle:thin:@tcps://localhost:12345/ORCL?TNS_ADMIN=/home/alice/.tsh/keys/teleport.example.com/alice-db/teleport.example.com/oracle-wallet'
이 방법은 Oracle 그래픽 클라이언트 섹션에서 설명한 대로 다양한 그래픽 클라이언트를 사용할 수 있게 합니다.
다음 단계#
-
특정 사용자 및 데이터베이스에 대한 접근을 제한하는 방법을 알아보십시오.
-
고가용성 (HA) 가이드를 확인하십시오.
-
YAML 구성 레퍼런스를 살펴보십시오.
-
전체 CLI 레퍼런스를 참조하십시오.
문제 해결#
연결이 멈추거나 거부됨#
Oracle 데이터베이스에 연결할 때 흔히 발생하는 문제는 연결 시간 초과 또는 거부입니다. 이는 일반적으로 Teleport Database Service가 Oracle 데이터베이스 엔드포인트에 도달할 수 없는 네트워킹 문제를 나타냅니다. 방화벽 및 VPC 보안 그룹과 같은 네트워크 라우팅 및 접근 제어가 Database Service 호스트에서 데이터베이스 엔드포인트로 트래픽이 흐르도록 허용하는지 확인하십시오.
네이티브 Oracle 클라이언트를 사용하여 연결을 검증할 수 있으며, 이는 문제가 Teleport에 있는지 아니면 기저의 네트워크 구성에 있는지 확인하는 데 도움이 됩니다. 예를 들어 Oracle SQLcl을 사용합니다:
# Example: Oracle SQLcl
sql -L myuser/mypassword@oracle-instance.example.com:2484
네트워크 연결 문제는 자동화된 상태 점검을 통해 감지되는 경우가 많습니다.
등록된 모든 데이터베이스의 상태를 확인하려면:
# All databases
tctl db ls --format=json | jq -r '.[] | [.metadata.name, .status.target_health]'
비정상 상태인 데이터베이스는 다음과 유사한 출력을 표시합니다:
...
"oracle",
{
"address": "11.22.33.44:2484",
"protocol": "TCP",
"status": "unhealthy",
"transition_timestamp": "2025-09-25T09:47:39.435973Z",
"transition_reason": "threshold_reached",
"transition_error": "dial tcp 11.22.33.44:2484: i/o timeout",
"message": "1 health check failed"
}
...
TLS 협상 실패#
Oracle 데이터베이스에서 TLS를 올바르게 구성하는 것은 까다로울 수 있습니다. 서로 다른 근본 원인이 다음과 같은 Teleport의 오류 메시지처럼 동일한 오류 메시지로 이어질 수 있습니다:
Original Error: *tls.permanentError remote error: tls: handshake failure
또는 Oracle 로그에서 다음을 볼 수도 있습니다:
ORA-00609: could not attach to incoming connection
ORA-28860: Fatal SSL error
근본 원인을 식별하려면 아래 섹션의 디버깅 단계를 따르십시오. 다음 openssl 명령의 출력은 많은 일반적인 TLS 문제를 진단하는 데 도움이 될 수 있습니다. 출력을 캡처하여 디버깅 단계를 따를 때 사용하십시오.
> openssl s_client -connect oracle.example.com:2484 -showcerts
잘못된 서버 인증서#
Teleport는 신뢰할 수 없는 서버 인증서를 가진 데이터베이스로의 연결을 거부합니다. Teleport를 사용하여 인증서를 발급하는 경우 서버 인증서가 Teleport Database CA에서 발급되었는지 확인하십시오. 유효하지 않은 서버 인증서는 Teleport가 보안 연결을 설정하지 못하게 합니다.
다음 명령으로 Teleport Database CA 인증서를 볼 수 있습니다:
tctl auth export --type=db | openssl x509 -issuer -noout
...
issuer=O=teleport.example.com, CN=teleport.example.com, serialNumber=200129862304303044762346177566738813560
서버 인증서의 issuer를 Teleport Database CA 인증서의 issuer와 비교하십시오. 이전 섹션의 openssl s_client 명령은 서버 인증서를 보여줍니다:
# openssl s_client output:
...
Server certificate
subject=CN=oracle.example.com
issuer=O=teleport.example.com, CN=teleport.example.com, serialNumber=200129862304303044762346177566738813560
...
또한 orapki 유틸리티를 사용하여 Oracle 지갑을 직접 검사해 서버 인증서를 확인할 수 있습니다.
# Prompt for wallet password
orapki wallet display -complete -wallet /path/to/wallet
출력의 "User Certificates" 섹션에는 서버의 인증서가 포함되어 있어야 합니다. 그 Issuer는 Teleport Database CA의 Subject와 일치해야 합니다.
User Certificates:
Subject: CN=oracle.example.com
Issuer: SERIALNUMBER=200129862304303044762346177566738813560,CN=teleport.example.com,O=teleport.example.com
Serial Number: ...
잘못된 클라이언트 인증서#
Oracle 서버가 Teleport Database Service가 제시한 클라이언트 인증서를 거부하는 경우 Oracle 데이터베이스가 Teleport Database User CA를 신뢰하는지 확인해야 합니다.
다음 명령으로 Teleport Database User CA를 볼 수 있습니다:
tctl auth export --type=db-client | openssl x509 -issuer -noout
issuer=O=teleport.example.com, CN=teleport.example.com, serialNumber=183359545647055551607366887578713393931
Teleport Database User CA를 Oracle 데이터베이스가 신뢰하는 CA 목록과 비교하십시오. 앞서 나온 openssl s_client 명령은 Oracle 데이터베이스가 신뢰하는 CA 목록을 보여줍니다:
# openssl s_client output:
...
---
Acceptable client certificate CA names
O=teleport.example.com, CN=teleport.example.com, serialNumber=183359545647055551607366887578713393931
Teleport Database User CA 인증서가 올바른 지갑에 추가되었고 Oracle 서버 구성이 이 지갑을 참조하는지 확인하십시오.
또한 orapki 유틸리티를 사용하여 Oracle 지갑을 직접 검사해 Teleport Database User CA가 신뢰되는지 확인할 수 있습니다.
# Prompt for wallet password
orapki wallet display -complete -wallet /path/to/wallet
출력의 "Trusted Certificates" 섹션에는 Teleport Database User CA가 포함되어 있어야 합니다. 그 Issuer는 Teleport Database User CA의 issuer와 일치해야 합니다.
Trusted Certificates:
Subject: SERIALNUMBER=183359545647055551607366887578713393931,CN=teleport.example.com,O=teleport.example.com
Issuer: SERIALNUMBER=183359545647055551607366887578713393931,CN=teleport.example.com,O=teleport.example.com
Serial Number: ...
잘못된 TLS 버전#
Teleport는 알려진 취약점으로 인해 TLS 1.0 또는 1.1을 사용하는 연결을 거부합니다. TLS 1.2 또는 그 이상 버전을 활성화하려면 Oracle 구성의 SSL_VERSION 매개변수가 1.2 이상으로 설정되어 있는지 확인하십시오.
공통 암호 스위트 없음#
Oracle 구성의 SQLNET.CIPHER_SUITE 매개변수에 구성된 TLS 버전과 일치하는 최신 TLS 암호 스위트가 포함되어 있는지 확인하십시오.
다음 암호 스위트는 안전하며 다양한 Oracle 버전에서 널리 지원됩니다.
TLS 1.2의 경우:
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS 1.3의 경우:
TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384
Must be logged on to the server 오류#
다음 오류는 로그인 절차가 실패했음을 나타냅니다:
ORA-17430: Must be logged on to the server.
이는 대부분 Oracle 데이터베이스가 TCPS 엔드포인트에서 네이티브 암호화 또는 데이터 무결성 체크섬을 강제하기 때문에 발생합니다. Teleport는 전송 보안을 위해 TLS를 사용하며 네이티브 Oracle 암호화를 지원하지 않습니다.
TCPS 엔드포인트에 대한 중복 암호화 요구 사항을 비활성화하려면 sqlnet.ora 파일에 다음 줄을 추가하십시오:
SQLNET.IGNORE_ANO_ENCRYPTION_FOR_TCPS=TRUE
최신 버전의 Oracle 데이터베이스를 사용하십시오. 이전 버전에서는 이 설정이 데이터 무결성 체크섬을 비활성화하지 않을 수 있으며, 이로 인해 계속 실패할 수 있습니다.
잘못된 사용자 이름#
잘못 지정된 사용자 이름은 다음 오류를 발생시킵니다:
ORA-01017: invalid username/password; logon denied
TLS 기반 인증을 사용할 때 Oracle은 클라이언트 인증서의 Common Name(CN)을 데이터베이스의 외부 사용자에 매핑합니다. dba_users 테이블에서 사용자의 EXTERNAL_NAME을 확인하십시오. 이는 cn=<name> 형식이어야 하며, 여기서 <name>은 tsh db login 명령에서 사용된 --db-user 플래그의 값과 일치합니다.
dba_users 테이블을 쿼리하여 사용자의 EXTERNAL_NAME을 확인할 수 있습니다:
SQL> SELECT username, authentication_type, external_name
2 FROM dba_users
3 WHERE authentication_type = 'EXTERNAL'
4 ORDER BY 1;
USERNAME AUTHENTICATION_TYPE EXTERNAL_NAME
_____________ ______________________ ________________
ALICE EXTERNAL cn=alice
사용자 이름 인식 불가#
로그인이 거부되면 사용 중인 사용자 이름을 확인하세요. 특정 사용자 이름을 참조할 때 소문자/대문자 관례를 따르는 데 특별히 주의하세요. 일반적인 설정에서는 다음을 볼 수 있습니다:
tsh명령에 전달되는 소문자, 도메인 없는 사용자(예:--db-user alice)- keytab 생성 시 소문자, 도메인 없는 사용자(예:
alice) - Oracle 데이터베이스에서 대문자, 도메인이 있는 사용자(예:
ALICE@EXAMPLE.COM)
설치별 구성 변형은 다른 값을 초래할 수 있습니다. 지침은 로컬 AD 관리자에게 문의하세요.
추가 정보#
- Amazon RDS Oracle Kerberos 설정.
- Amazon RDS Oracle SSL 설정.
- Amazon RDS Oracle 감사.
- AWS 문서의 Linux 인스턴스를 수동으로 가입.
- Microsoft 문서의
adutil소개.