

# Oracle ネイティブネットワーク暗号化
<a name="Appendix.Oracle.Options.NetworkEncryption"></a>

Amazon RDS は、Oracle ネイティブネットワーク暗号化 (NNE) をサポートしています。`NATIVE_NETWORK_ENCRYPTION` オプションを使用すると、DB インスタンスとの間でデータを移動するときにデータを暗号化できます。Amazon RDS では、Oracle Database のすべてのエディションの NNE がサポートされています。

Oracle ネイティブネットワーク暗号化の詳細な説明はこのガイドでは取り上げませんが、配置で使用するソリューションを決定する前に各アルゴリズムおよびキーの長所と短所を理解する必要があります。Oracle ネイティブネットワークの暗号化で使用できるアルゴリズムとキーについては、Oracle ドキュメントの「[Configuring Network Data Encryption](http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/11g/r2/prod/security/network_encrypt/ntwrkencrypt.htm)」を参照してください。AWS セキュリティの詳細については、[AWS セキュリティセンター](https://aws.amazon.com/security)を参照してください。

**注記**  
ネイティブネットワーク暗号化または Secure Sockets Layer を使用できますが、両方を使用することはできません。詳細については、「[Oracle Secure Sockets Layer](Appendix.Oracle.Options.SSL.md)」を参照してください。

**Topics**
+ [NATIVE\$1NETWORK\$1ENCRYPTION オプション設定](Oracle.Options.NNE.Options.md)
+ [NATIVE\$1NETWORK\$1ENCRYPTION オプションの追加](Oracle.Options.NNE.Add.md)
+ [sqlnet.ora で NNE 値を設定する](Oracle.Options.NNE.Using.md)
+ [NATIVE\$1NETWORK\$1ENCRYPTION オプション設定](Oracle.Options.NNE.ModifySettings.md)
+ [NATIVE\$1NETWORK\$1ENCRYPTION オプションの削除](Oracle.Options.NNE.Remove.md)

# NATIVE\$1NETWORK\$1ENCRYPTION オプション設定
<a name="Oracle.Options.NNE.Options"></a>

暗号化要件は、サーバーとクライアントの両方で指定できます。DB インスタンスは、データベースリンクを使用して別のデータベースに接続する場合などに、クライアントとして機能します。サーバー側で暗号化の強制を回避できます。例えば、サーバーで必要としているからといって、すべてのクライアント通信で暗号化の使用を強制することはありません。この場合、`SQLNET.*CLIENT` オプションを使用してクライアント側で暗号化を強制できます。

Amazon RDS は、`NATIVE_NETWORK_ENCRYPTION` オプションの次の設定をサポートします。

**注記**  
オプション設定の値をコンマで区切る場合は、コンマの後にスペースを挿入しないでください。


****  

| オプション設定 | 有効な値 | デフォルト値 | 説明 | 
| --- | --- | --- | --- | 
|  `SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS`  |  `TRUE`, `FALSE`  |  `TRUE`  |  非セキュア暗号を使用しているクライアントでデータベースへの接続を試行したときのサーバーの動作。`TRUE` の場合、2021 年 7 月 PSU パッチが適用されていなくても、クライアントでの接続が可能です。 設定を `FALSE` にすると、クライアントで 2021 年 7 月 PSU パッチが適用された場合にだけ、データベースへの接続が可能です。`SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS` を `FALSE` に設定する前に、次の条件が満たされていることを確認してください。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html)  | 
|  `SQLNET.ALLOW_WEAK_CRYPTO`  |  `TRUE`, `FALSE`  |  `TRUE`  |  非セキュア暗号を使用しているクライアントでデータベースへの接続を試行したときのサーバーの動作。次の暗号はセキュアではないと見なされます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html) 設定を `TRUE` にすると、クライアントで前述の非セキュア暗号を使用した場合に接続できます。 設定を `FALSE` にすると、クライアントで前述の非セキュア暗号を使用した場合にデータベースが接続を阻止します。`SQLNET.ALLOW_WEAK_CRYPTO` を `FALSE` に設定する前に、次の条件が満たされていることを確認してください。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html)  | 
|  `SQLNET.CRYPTO_CHECKSUM_CLIENT`  |  `Accepted`, `Rejected`, `Requested`, `Required`   |  `Requested`  |  クライアント、またはクライアントとして機能しているサーバーが DB インスタンスに接続する場合のデータ整合性動作。DB インスタンスでデータベースリンクが使用されている場合、そのインスタンスはクライアントとして機能します。 `Requested` は、DB インスタンスによるチェックサムの実行をクライアントで必要としないことを示しています。  | 
|  `SQLNET.CRYPTO_CHECKSUM_SERVER`  |  `Accepted`, `Rejected`, `Requested`, `Required`   |  `Requested`  |  クライアント、またはクライアントとして機能しているサーバーが DB インスタンスに接続する場合のデータ整合性動作。DB インスタンスでデータベースリンクが使用されている場合、そのインスタンスはクライアントとして機能します。 `Requested` は、クライアントによるチェックサムの実行を DB インスタンスで必要としないことを示しています。  | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`  |  `SHA256`, `SHA384`, `SHA512`, `SHA1`, `MD5`  |  `SHA256`, `SHA384`, `SHA512`  |  チェックサムアルゴリズムのリスト。 1 つの値を指定することも、カンマで区切られた値リストを指定することもできます。コンマを使用する場合は、コンマの後にスペースを挿入しないでください。スペースを挿入すると、`InvalidParameterValue` エラーが発生します。 このパラメータと `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER ` には、共通の暗号が必要です。  | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER`  |  `SHA256`, `SHA384`, `SHA512`, `SHA1`, `MD5`  |  `SHA256`, `SHA384`, `SHA512`, `SHA1`, `MD5`  |  チェックサムアルゴリズムのリスト。 1 つの値を指定することも、カンマで区切られた値リストを指定することもできます。コンマを使用する場合は、コンマの後にスペースを挿入しないでください。スペースを挿入すると、`InvalidParameterValue` エラーが発生します。 このパラメータと `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT` には、共通の暗号が必要です。  | 
|  `SQLNET.ENCRYPTION_CLIENT`  |  `Accepted`, `Rejected`, `Requested`, `Required`   |  `Requested`  |  クライアント、またはクライアントとして機能しているサーバーが DB インスタンスに接続する場合のクライアントの暗号化動作。DB インスタンスでデータベースリンクが使用されている場合、そのインスタンスはクライアントとして機能します。 `Requested` は、クライアントでサーバーからのトラフィックを暗号化する必要がないことを示しています。  | 
|  `SQLNET.ENCRYPTION_SERVER`  |  `Accepted`, `Rejected`, `Requested`, `Required`   |  `Requested`  |  クライアント、またはクライアントとして機能しているサーバーが DB インスタンスに接続する場合のサーバーの暗号化動作。DB インスタンスでデータベースリンクが使用されている場合、そのインスタンスはクライアントとして機能します。 `Requested` は、DB インスタンスでクライアントからのトラフィックを暗号化する必要がないことを示します。  | 
|  `SQLNET.ENCRYPTION_TYPES_CLIENT`  |  `RC4_256`, `AES256`, `AES192`, `3DES168`, `RC4_128`, `AES128`, `3DES112`, `RC4_56`, `DES`, `RC4_40`, `DES40`  |  `RC4_256`, `AES256`, `AES192`, `3DES168`, `RC4_128`, `AES128`, `3DES112`, `RC4_56`, `DES`, `RC4_40`, `DES40`  |  クライアントによって使用される暗号化アルゴリズムのリスト。クライアントは、各アルゴリズムが順序どおりに使用され、アルゴリズムが成功するか、リストの末尾に到達するまでサーバー入力の復号を試みます。 Amazon RDS は、Oracle による次のデフォルトリストを使用します。RDS は `RC4_256` で始まり、リストの下の方へ順番に進みます。順序を変更したり、DB インスタンスで受け入れられるアルゴリズムを制限したりすることができます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html) 1 つの値を指定することも、カンマで区切られた値リストを指定することもできます。コンマの場合は、コンマの後にスペースを挿入しないでください。スペースを挿入しないと、`InvalidParameterValue` エラーが発生します。 このパラメータと `SQLNET.SQLNET.ENCRYPTION_TYPES_SERVER` には、共通の暗号が必要です。  | 
|  `SQLNET.ENCRYPTION_TYPES_SERVER`  |  `RC4_256`, `AES256`, `AES192`, `3DES168`, `RC4_128`, `AES128`, `3DES112`, `RC4_56`, `DES`, `RC4_40`, `DES40`  |  `RC4_256`, `AES256`, `AES192`, `3DES168`, `RC4_128`, `AES128`, `3DES112`, `RC4_56`, `DES`, `RC4_40`, `DES40`  |  DB インスタンスによって使用された暗号化アルゴリズムのリスト。DB インスタンスは、各アルゴリズムを順序どおりに使用し、アルゴリズムが成功するか、リストの末尾に到達するまでクライアントの復号を試みます。 Amazon RDS は、Oracle による次のデフォルトリストを使用します。順序を変更したり、クライアントで受け入れられるアルゴリズムを制限したりすることができます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html) 1 つの値を指定することも、カンマで区切られた値リストを指定することもできます。コンマの場合は、コンマの後にスペースを挿入しないでください。スペースを挿入しないと、`InvalidParameterValue` エラーが発生します。 このパラメータと `SQLNET.SQLNET.ENCRYPTION_TYPES_SERVER` には、共通の暗号が必要です。  | 

# NATIVE\$1NETWORK\$1ENCRYPTION オプションの追加
<a name="Oracle.Options.NNE.Add"></a>

DB インスタンスに `NATIVE_NETWORK_ENCRYPTION` オプションを追加する一般的なプロセスは以下のとおりです。

1. 新しいオプショングループを作成するか、既存のオプショングループをコピーまたは変更します。

1. オプショングループに [] オプションを追加します。

1. オプショングループを DB インスタンスに関連付けます。

オプショングループがアクティブになると、NNE がアクティブになります。

**AWS マネジメントコンソール を使用して DB インスタンスに NATIVE\$1NETWORK\$1ENCRYPTION オプションを追加するには**

1. [**Engine**] で、使用する Oracle のエディションを選択します。NNE はすべてのエディションでサポートされます。

1. [**メジャーエンジンのバージョン**] で、DB インスタンスのバージョンを選択します。

   詳細については、「[オプショングループを作成する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)」を参照してください。

1. **NATIVE\$1NETWORK\$1ENCRYPTION** オプションをオプショングループに追加します。オプションの追加方法の詳細については、「[オプショングループにオプションを追加する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)」を参照してください。
**注記**  
**NATIVE\$1NETWORK\$1ENCRYPTION** オプションを追加した後に DB インスタンスを再起動する必要はありません。オプショングループがアクティブになると、すぐに NNE がアクティブになります。

1. 新規または既存の DB インスタンスに、DB オプショングループを適用します。
   + 新規 DB インスタンスの場合は、インスタンスを起動するときにオプショングループを適用します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
   + 既存の DB インスタンスの場合は、インスタンスを修正し、新しいオプショングループを添付することで、オプショングループを適用します。**NATIVE\$1NETWORK\$1ENCRYPTION** オプションを追加した後に DB インスタンスを再起動する必要はありません。オプショングループがアクティブになると、すぐに NNE がアクティブになります。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

# sqlnet.ora で NNE 値を設定する
<a name="Oracle.Options.NNE.Using"></a>

Oracle ネイティブネットワーク暗号化を使用すると、サーバー側とクライアント側でネットワーク暗号化を設定できます。クライアントとは DB インスタンスへの接続に使用されるコンピュータです。slqnet.ora では、次のクライアント設定を指定できます。
+ `SQLNET.ALLOW_WEAK_CRYPTO`
+ `SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS`
+ `SQLNET.CRYPTO_CHECKSUM_CLIENT`
+ `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`
+ `SQLNET.ENCRYPTION_CLIENT`
+ `SQLNET.ENCRYPTION_TYPES_CLIENT`

詳細については、Oracle ドキュメントの「[Oracle サーバーおよびクライアントのネットワークデータ暗号化と整合性の設定](http://docs.oracle.com/cd/E11882_01/network.112/e40393/asoconfg.htm)」を参照してください。

DB インスタンスでアプリケーションからの接続リクエストが拒否される場合があります。例えば、クライアント側の暗号化アルゴリズムとサーバー側の暗号化アルゴリズムが一致しない場合、拒否される可能性があります。Oracle ネイティブネットワーク暗号化をテストするには、クライアントの sqlnet.ora ファイルに次の行を追加します。

```
DIAG_ADR_ENABLED=off
TRACE_DIRECTORY_CLIENT=/tmp
TRACE_FILE_CLIENT=nettrace
TRACE_LEVEL_CLIENT=16
```

接続が試行されると、前の行により `/tmp/nettrace*` というトレースファイルがクライアントに生成されます。トレースファイルには、接続に関する情報が含まれています。Oracle ネイティブネットワーク暗号化を使用した場合の接続に関連する問題の詳細については、「Oracle Database ドキュメント」の「[暗号化と整合性のネゴシエーションについて](http://docs.oracle.com/cd/E11882_01/network.112/e40393/asoconfg.htm#autoId12)」を参照してください。

# NATIVE\$1NETWORK\$1ENCRYPTION オプション設定
<a name="Oracle.Options.NNE.ModifySettings"></a>

`NATIVE_NETWORK_ENCRYPTION` オプションを有効にすると、その設定を変更できます。現在、`NATIVE_NETWORK_ENCRYPTION` オプション設定は、AWS CLI または RDS API でのみ変更できます。 コンソールは使用できません。次の例では、オプションで 2 つの設定を変更します。

```
aws rds add-option-to-option-group \
    --option-group-name my-option-group \
    --options "OptionName=NATIVE_NETWORK_ENCRYPTION,OptionSettings=[{Name=SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER,Value=SHA256},{Name=SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER,Value=SHA256}]" \
    --apply-immediately
```

CLI を使用したオプション設定の変更方法の詳細については、「[AWS CLI](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption.CLI)」を参照してください。各設定の詳細については、「[NATIVE\$1NETWORK\$1ENCRYPTION オプション設定](Oracle.Options.NNE.Options.md)」を参照してください。

**Topics**
+ [CRYPTO\$1CHECKSUM\$1\$1 値の変更](#Oracle.Options.NNE.ModifySettings.checksum)
+ [ALLOW\$1WEAK\$1CRYPTO\$1 設定の変更](#Oracle.Options.NNE.ModifySettings.encryption)

## CRYPTO\$1CHECKSUM\$1\$1 値の変更
<a name="Oracle.Options.NNE.ModifySettings.checksum"></a>

**NATIVE\$1NETWORK\$1ENCRYPTION** オプション設定を変更する場合は、次のオプション設定に共通の暗号が少なくとも 1 つあることを確認してください。
+ `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER`
+ `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`

次の例は、`SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER` を変更するシナリオを示しています。`CRYPTO_CHECKSUM_TYPES_CLIENT`、`CRYPTO_CHECKSUM_TYPES_SERVER` の両方が `SHA256` を使用するため、設定は有効です。


| オプション設定 | 変更前の値 | 変更後の値 | 
| --- | --- | --- | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`  |  `SHA256`, `SHA384`, `SHA512`  |  変更なし  | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER`  |  `SHA256`, `SHA384`, `SHA512`, `SHA1`, `MD5`  | SHA1,MD5,SHA256 | 

別の例では、`SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER` をデフォルト設定から `SHA1,MD5` に変更するとします。この場合、`SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT` を 必ず `SHA1` または `MD5` に設定してください。これらのアルゴリズムは `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT` のデフォルト値に含まれていません。

## ALLOW\$1WEAK\$1CRYPTO\$1 設定の変更
<a name="Oracle.Options.NNE.ModifySettings.encryption"></a>

`SQLNET.ALLOW_WEAK_CRYPTO*` オプションをデフォルト値から `FALSE` に設定する場合は、次の条件が満たされていることを確認してください。
+ `SQLNET.ENCRYPTION_TYPES_SERVER` と `SQLNET.ENCRYPTION_TYPES_CLIENT` には、一致するセキュアな暗号化方式が 1 つあります。方式が `DES`、`3DES`、または `RC4` (すべてのキーの長さ) ではない場合、セキュアと見なされます。
+ `SQLNET.CHECKSUM_TYPES_SERVER` と `SQLNET.CHECKSUM_TYPES_CLIENT` には、一致するセキュアなチェックサム方式が 1 つあります。方式が `MD5` ではない場合、セキュアと見なされます。
+ クライアントで 2021 年 7 月 PSU パッチが適用されます。クライアントにパッチが適用されていない場合、クライアントでの接続が失われ、`ORA-12269` エラーを受け取ります。

次の例は サンプル NNE 設定を示しています。`SQLNET.ENCRYPTION_TYPES_SERVER` と `SQLNET.ENCRYPTION_TYPES_CLIENT` をFALSE に設定して、非セキュア接続をブロックすると仮定します。チェックサムオプションの設定は、どちらにも `SHA256` が含まれているため、前提条件を満たしています。ただし、`SQLNET.ENCRYPTION_TYPES_CLIENT` と `SQLNET.ENCRYPTION_TYPES_SERVER` では、非セキュアな暗号化方式である `DES`、`3DES`、および `RC4` が使用されます。したがって、`SQLNET.ALLOW_WEAK_CRYPTO*` オプションを `FALSE` に設定する場合は、まず `SQLNET.ENCRYPTION_TYPES_SERVER` と `SQLNET.ENCRYPTION_TYPES_CLIENT` をセキュアな暗号化方式 (`AES256` など) に設定します。


| オプション設定 | 値 | 
| --- | --- | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`  |  `SHA256`, `SHA384`, `SHA512`  | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER`  | SHA1,MD5,SHA256 | 
|  `SQLNET.ENCRYPTION_TYPES_CLIENT`  |  `RC4_256`, `3DES168`, `DES40`  | 
|  `SQLNET.ENCRYPTION_TYPES_SERVER`  |  `RC4_256`, `3DES168`, `DES40`  | 

# NATIVE\$1NETWORK\$1ENCRYPTION オプションの削除
<a name="Oracle.Options.NNE.Remove"></a>

DB インスタンスから NNE を削除できます。

`NATIVE_NETWORK_ENCRYPTION` オプションを DB インスタンスから削除するには、次のいずれかを実行します。
+ 複数の DB インスタンスからオプションを削除するには、それらが属しているオプショングループから `NATIVE_NETWORK_ENCRYPTION` オプションを削除します。この変更はそのオプショングループを使用するすべての DB インスタンスに影響します。`NATIVE_NETWORK_ENCRYPTION` オプションを削除した後に DB インスタンスを再起動する必要はありません。詳細については、「[オプショングループからオプションを削除する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)」を参照してください。
+ 1 つの DB インスタンスからオプションを削除するには、DB インスタンスを変更し、`NATIVE_NETWORK_ENCRYPTION` オプションを含まない別のオプショングループを指定します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。`NATIVE_NETWORK_ENCRYPTION` オプションを削除した後に DB インスタンスを再起動する必要はありません。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。