

# コンプライアンスプログラムのための 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 DB インスタンスが Amazon RDS でホストされている場合、以下の事前定義された Oracle ユーザーの認証情報は 30 日ごとに自動的にローテーションされます。前述のユーザーの認証情報は AWS Secrets Manager にあります。


| データベースユーザー | Created by (作成者) | サポート対象エンジンバージョン | 注意事項 | 
| --- | --- | --- | --- | 
|  `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)」を参照してください。 | 

自動認証情報のローテーションの例外は、スタンバイデータベースとして手動で設定した RDS Custom for Oracle DB インスタンスです。RDS は、`create-db-instance-read-replica` CLI コマンドまたは `CreateDBInstanceReadReplica` API を使用して作成したリードレプリカの認証情報のみを更新します。

## ユーザー認証情報のローテーションに関するガイドライン
<a name="custom-security.cred-rotation.guidelines"></a>

コンプライアンスプログラムに従って資格情報が更新されるように、次のガイドラインに注意してください。
+ DB インスタンスが認証情報を自動的にローテーションする場合、「[事前定義された Oracle ユーザー](#auto-rotation)」にリストされているユーザーのシークレット、パスワードファイル、またはパスワードを手動で変更または削除しないでください。そうしないと、RDS Custom が DB インスタンスをサポート範囲外に配置し、自動ローテーションが停止する可能性があります。
+ 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)」にリストされているユーザーの認証情報を自動的に更新しません。
+ スタンバイデータベースとして機能するように手動で設定したデータベース。
+ オンプレミスのデータベース
+ サポート範囲外にある DB インスタンス、または RDS Custom オートメーションを実行できない状態にある DB インスタンス。この場合、RDS Custom はキーをローテーションしません。

データベースが上記のカテゴリのいずれかに該当する場合は、ユーザー認証情報を手動でローテーションする必要があります。

**DB インスタンスのユーザー認証情報を手動でローテーションするには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. **データベース**で、RDS が現在 DB インスタンスをバックアップしていないか、高可用性の設定などの操作を実行していないことを確認します。

1. データベースの詳細ページで、**[設定]** を選択し、DB インスタンスのリソース ID を書き留めます。または、AWS CLI コマンド `describe-db-instances` を使用できます。

1. [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) から Secrets Manager コンソールを開きます。

1. 検索ボックスにデータベースのリソース ID を入力し、次のいずれかの命名規則を使用してシークレットを検索します。

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

   このシークレットには、`RDSADMIN`、`SYS`、および `SYSTEM` のパスワードが保存されます。次のサンプルキーは、DB リソース ID `db-ABCDEFG12HIJKLNMNOPQRS3TUVWX` および UUID `123456` の DB インスタンス用です。

   ```
   do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
   rds-custom!oracle-do-not-delete-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
   ```
**重要**  
DB インスタンスがリードレプリカで `custom-oracle-ee-cdb` エンジンを使用する場合、サフィックス `db-resource_id-uuid` が付いた 2 つのシークレットが存在します。1 つはマスターユーザー用で、もう 1 つは `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. DB インスタンスが Oracle Data Guard 設定に存在する場合は、次のいずれかの命名規則を使用してシークレットを検索します。

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

   このシークレットには、`RDS_DATAGUARD` のパスワードが保存されます。次のサンプルキーは、DB リソース ID `db-ABCDEFG12HIJKLNMNOPQRS3TUVWX` および UUID **789012** の DB インスタンス用です。

   ```
   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;
      ```

      例えば、Secrets Manager に保存されている `RDSADMIN` の新しいパスワードが `pwd-123` の場合、次のステートメントを実行します。

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

1. DB インスタンスが Oracle Database 12c リリース 1 (12.1) を実行していて、Oracle Data Guard によって管理されている場合は、プライマリ DB インスタンスから各スタンバイ DB インスタンスにパスワードファイル (`orapw`) を手動でコピーします。

   DB インスタンスが Amazon RDS でホストされている場合、パスワードファイルの場所は `/rdsdbdata/config/orapw` です。Amazon RDS でホストされていないデータベースの場合、デフォルトの場所は、Linux と UNIX では `$ORACLE_HOME/dbs/orapw$ORACLE_SID`、Windows では `%ORACLE_HOME%\database\PWD%ORACLE_SID%.ora` です。