

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon RDS Custom 的安全性
<a name="custom-security"></a>

熟悉 RDS Custom 的安全考量。

如需 RDS Custom 安全性的詳細資訊，請參閱下列主題。
+ [保護您的 Amazon S3 儲存貯體，避免混淆代理人問題](custom-security.confused-deputy.md)
+ [輪換 RDS Custom for Oracle 憑證以符合合規計畫](custom-security.cred-rotation.md)

## RDS Custom 如何安全地代表您管理任務
<a name="custom-security.security-tools"></a>

RDS Custom 使用下列工具和技術代表您安全地執行操作：

**AWSServiceRoleForRDSCustom 服務連結角色**  
*服務連結角色*是由服務預先定義，內含該服務代您呼叫其他  AWS 服務  所需的所有許可。對於 RDS Custom，`AWSServiceRoleForRDSCustom` 是根據最低權限原則定義的服務連結角色。RDS Custom 會使用 `AmazonRDSCustomServiceRolePolicy` 中的權限 (連接此角色的政策) 來執行大部分的佈建和所有非主機的管理任務。如需詳細資訊，請參閱 [AmazonRDSCustomServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSCustomServiceRolePolicy.html)。  
在主機上執行任務時，RDS Custom 自動化會使用服務連結角色的登入資料來執行 命令 AWS Systems Manager。您可以透過系統管理員指令歷程記錄和  AWS CloudTrail 來稽核命令歷史記錄。系統管理員會使用您的網路設定連線到 RDS Custom 資料庫執行個體。如需詳細資訊，請參閱[步驟 4：設定 RDS Custom for Oracle 的 IAM](custom-setup-orcl.md#custom-setup-orcl.iam-vpc)。

**暫時性 IAM 憑證**  
佈建或刪除資源時，RDS Custom 有時會使用暫時性憑證，其是由呼叫 IAM 主體憑證衍生而來。這些 IAM 憑證受到該主體所連接的 IAM 政策限制，並在操作完成後隨即過期。如需了解使用 RDS Custom 的 IAM 主體所需許可，請參閱 [步驟 5：將所需的許可授予您的 IAM 使用者或角色](custom-setup-orcl.md#custom-setup-orcl.iam-user)。

**Amazon EC2 執行個體設定檔**  
EC2 執行個體設定檔是適用於 IAM 角色的容器，可讓您將角色資訊傳遞至 EC2 執行個體。EC2 執行個體位於 RDS Custom 資料庫執行個體的底層。建立 RDS Custom 資料庫執行個體時，您可以提供執行個體設定檔。在執行以主機為基礎的管理任務 (例如備份) 時，RDS Custom 會使用 EC2 執行個體設定檔憑證。如需詳細資訊，請參閱[手動建立 IAM 角色和執行個體設定檔](custom-setup-orcl.md#custom-setup-orcl.iam)。

**SSH 金鑰對**  
當 RDS Custom 建立資料庫執行個體底層的 EC2 執行個體時，它會代表您建立 SSH 金鑰對。金鑰使用命名前綴 `do-not-delete-rds-custom-ssh-privatekey-db-` 或 `rds-custom!oracle-do-not-delete-db_resource_id-uuid-ssh-privatekey`。 AWS Secrets Manager 會將此 SSH 私有金鑰作為秘密儲存於 AWS 帳戶。Amazon RDS 不會儲存、存取或使用這些憑證。如需詳細資訊，請參閱 [Amazon EC2 金鑰對與 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

## SSL 憑證
<a name="custom-security.ssl"></a>

RDS Custom 資料庫執行個體不支援受管 SSL 憑證。如果您要部署 SSL，可以在自己的錢包中自行管理 SSL 憑證，並建立 SSL 接聽程式，以保護用戶端資料庫之間或資料庫複寫的連線。如需詳細資訊，請參閱 Oracle Database 文件中的[設定 Transport Layer Security 身分驗證](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-secure-sockets-layer-authentication.html#GUID-6AD89576-526F-4D6B-A539-ADF4B840819F)。

# 保護您的 Amazon S3 儲存貯體，避免混淆代理人問題
<a name="custom-security.confused-deputy"></a>

建立 Amazon RDS Custom for Oracle 的自訂引擎版本 (CEV) 或 RDS Custom for Oracle 的資料庫執行個體時，RDS Custom 會建立 Amazon S3 儲存貯體。S3 儲存貯體儲存如 CEV 成品、重做 (交易) 日誌、支援範圍的組態項目等檔案，以及 AWS CloudTrail 日誌。

您可以使用全域條件內容金鑰來防止全*混淆代理人問題*，使 S3 儲存貯體貯體更加安全。如需詳細資訊，請參閱[防止跨服務混淆代理人問題](cross-service-confused-deputy-prevention.md)。

下列 RDS Custom for Oracle 範例，顯示 S3 儲存貯體政策中使用 `aws:SourceArn` 和 `aws:SourceAccount` 全域條件內容金鑰。對於 RDS Custom for Oracl，請確保包含 CEV 的 Amazon Resource Name (ARN) 和資料庫執行個體。對於 RDS Custom for SQL Server，請確保包含資料庫執行個體的 ARN。

```
...
{
  "Sid": "AWSRDSCustomForOracleInstancesObjectLevelAccess",
  "Effect": "Allow",
  "Principal": {
     "Service": "custom.rds.amazonaws.com"
  },
  "Action": [
     "s3:GetObject",
     "s3:GetObjectVersion",
     "s3:DeleteObject",
     "s3:DeleteObjectVersion",
     "s3:GetObjectRetention",
     "s3:BypassGovernanceRetention"
  ],
  "Resource": "arn:aws:s3:::do-not-delete-rds-custom-123456789012-us-east-2-c8a6f7/RDSCustomForOracle/Instances/*",
  "Condition": {
     "ArnLike": {
        "aws:SourceArn": [
            "arn:aws:rds:us-east-2:123456789012:db:*",
            "arn:aws:rds:us-east-2:123456789012:cev:*/*"
        ]
     },
     "StringEquals": {
        "aws:SourceAccount": "123456789012"
    }
  }
},
...
```

# 輪換 RDS Custom for Oracle 憑證以符合合規計畫
<a name="custom-security.cred-rotation"></a>

有些合規計畫需要定期變更資料庫使用者憑證，例如每 90 天變更一次。RDS Custom for Oracle 會自動輪換部分預先定義資料庫使用者的憑證。

**Topics**
+ [為預先定義使用者自動輪換憑證](#custom-security.cred-rotation.auto)
+ [輪換使用者憑證的指南](#custom-security.cred-rotation.guidelines)
+ [手動輪換使用者憑證](#custom-security.cred-rotation.manual)

## 為預先定義使用者自動輪換憑證
<a name="custom-security.cred-rotation.auto"></a>

如果您的 RDS Custom for Oracle 資料庫執行個體是在 Amazon RDS 中託管，下列預先定義 Oracle 使用者的憑證會每 30 天自動輪換一次。先前使用者的登入資料位於 中 AWS Secrets Manager。


| 資料庫使用者 | 建立者 | 支援的引擎版本 | 備註 | 
| --- | --- | --- | --- | 
|  `SYS`  |  Oracle  |  custom-oracle-ee custom-oracle-ee-cdb custom-oracle-se2 custom-oracle-se2-cdb  |  | 
|  `SYSTEM`  |  Oracle  |  custom-oracle-ee custom-oracle-ee-cdb custom-oracle-se2 custom-oracle-se2-cdb  |  | 
|  `RDSADMIN`  |  RDS  |  custom-oracle-ee custom-oracle-se2  |  | 
|  `C##RDSADMIN`  |  RDS  |  custom-oracle-ee-cdb custom-oracle-se2-cdb  | 帶有 C\$1\$1 字首的使用者名稱僅存在於 CDB 中。如需有關 CDB 的詳細資訊，請參閱 [Amazon RDS Custom for Oracle 架構的概觀](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-creating.html#custom-creating.overview)。 | 
|  `RDS_DATAGUARD`  |  RDS  |  custom-oracle-ee  | 此使用者僅存在於僅供讀取複本、僅供讀取複本的來源資料庫，以及您以 Oracle Data Guard 實際移轉至 RDS Custom 的資料庫。 | 
|  `C##RDS_DATAGUARD`  |  RDS  |  custom-oracle-ee-cdb  | 此使用者僅存在於僅供讀取複本、僅供讀取複本的來源資料庫，以及您以 Oracle Data Guard 實際移轉至 RDS Custom 的資料庫。帶有 C\$1\$1 字首的使用者名稱僅存在於 CDB 中。如需有關 CDB 的詳細資訊，請參閱 [Amazon RDS Custom for Oracle 架構的概觀](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-creating.html#custom-creating.overview)。 | 

自動憑證輪換的例外狀況是您已手動設為待命資料庫的 Oracle 資料庫執行個體之 RDS Custom。RDS 只會輪換您使用 `create-db-instance-read-replica` CLI 命令或 `CreateDBInstanceReadReplica` API 建立的僅供讀取複本憑證。

## 輪換使用者憑證的指南
<a name="custom-security.cred-rotation.guidelines"></a>

為了確保您的憑證會根據合規計畫進行輪換，請注意下列事項：
+ 如果您的資料庫執行個體會自動輪換憑證，請勿手動變更或刪除[預先定義 Oracle 使用者](#auto-rotation)列出之使用者秘密、密碼檔案或密碼。否則，RDS Custom 可能會將您的資料庫執行個體置於支援範圍之外，從而暫停自動輪換。
+ RDS 主要使用者並未預先定義，因此您必須手動變更密碼或在 Secrets Manager 中設定自動輪換。如需詳細資訊，請參閱[輪換 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)。

## 手動輪換使用者憑證
<a name="custom-security.cred-rotation.manual"></a>

針對以下資料庫類別，RDS 不會自動輪換[預先定義 Oracle 使用者](#auto-rotation)列出的使用者憑證：
+ 您手動設定為待命資料庫的資料庫。
+ 內部部署資料庫。
+ 位於支援範圍以外的資料庫執行個體，或處於 RDS Custom 自動化無法執行的狀態。在此情況下，RDS Custom 也不會輪換金鑰。

若您的資料庫屬於上述任何類別，您必須手動輪換使用者憑證。

**手動輪換資料庫執行個體的使用者憑證**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 請確認**資料庫**中，RDS 目前未備份您的資料庫執行個體，或執行高可用性設定等操作。

1. 在資料庫詳細資訊頁面中，選擇**組態**並記下資料庫執行個體的資源 ID。或者，您可以使用 AWS CLI 命令 `describe-db-instances`。

1. 前往以下位置開啟機密管理員控制台：[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 在搜尋方塊中，輸入資料庫的資源 ID，並使用下列任一命名慣例來搜尋秘密：

   ```
   do-not-delete-rds-custom-resource_id-uuid
   rds-custom!oracle-do-not-delete-resource_id-uuid
   ```

   此秘密會儲存 `RDSADMIN`、`SYS` 和 `SYSTEM` 的密碼。下列範例金鑰適用於具有資源 ID `db-ABCDEFG12HIJKLNMNOPQRS3TUVWX` 和 UUID `123456` 的資料庫執行個體：

   ```
   do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
   rds-custom!oracle-do-not-delete-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
   ```
**重要**  
若您的資料庫執行個體是僅供讀取複本並使用 `custom-oracle-ee-cdb` 引擎，則會有兩個具字尾 `db-resource_id-uuid` 的秘密，一個用於主要使用者，另一個用於 `RDSADMIN`、`SYS` 和 `SYSTEM`。若要尋找正確的秘密，請在主機執行下列命令：  

   ```
   cat /opt/aws/rdscustomagent/config/database_metadata.json | python3 -c "import sys,json; print(json.load(sys.stdin)['dbMonitoringUserPassword'])"
   ```
`dbMonitoringUserPassword` 屬性顯示 `RDSADMIN`、`SYS` 和 `SYSTEM` 的秘密。

1. 如果您的資料庫執行個體存在於 Oracle Data Guard 組態中，請使用下列任一命名慣例來搜尋秘密：

   ```
   do-not-delete-rds-custom-resource_id-uuid-dg
   rds-custom!oracle-do-not-delete-resource_id-uuid-dg
   ```

   此秘密會儲存 `RDS_DATAGUARD` 的密碼。下列範例金鑰適用於具有資源 ID `db-ABCDEFG12HIJKLNMNOPQRS3TUVWX` 和 UUID **789012** 的資料庫執行個體：

   ```
   do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-789012-dg
   rds-custom!oracle-do-not-delete-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-789012-dg
   ```

1. 對於[預先定義 Oracle 使用者中列出的所有資料庫使用者](#auto-rotation)，請依照[修改 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html)中的指示更新密碼。

1. 如果您的資料庫是獨立資料庫或 Oracle Data Guard 組態中的來源資料庫：

   1. 啟動您的 Oracle SQL 用戶端並以 `SYS` 登入。

   1. 針對[預先定義 Oracle 使用者](#auto-rotation)列出的每個資料庫使用者，以下列格式執行 SQL 陳述式：

      ```
      ALTER USER user-name IDENTIFIED BY pwd-from-secrets-manager ACCOUNT UNLOCK;
      ```

      例如，如果 `RDSADMIN` 儲存在 Secrets Manager 的密碼是 `pwd-123`，請執行下列陳述式：

      ```
      ALTER USER RDSADMIN IDENTIFIED BY pwd-123 ACCOUNT UNLOCK;
      ```

1. 若您的資料庫執行個體執行 Oracle 資料庫 12c 版本 1 (12.1)，且由 Oracle Data Guard 管理，請手動將密碼檔案 (`orapw`) 從主要資料庫執行個體複製到每個待命資料庫執行個體。

   若您的資料庫執行個體託管在 Amazon RDS，則密碼檔案位置為 `/rdsdbdata/config/orapw`。對於不在 Amazon RDS 託管的資料庫，在 Linux 和 UNIX 的預設位置是 `$ORACLE_HOME/dbs/orapw$ORACLE_SID`，在 Windows 的預設位置是 `%ORACLE_HOME%\database\PWD%ORACLE_SID%.ora`。