

AWS 大型机现代化服务（托管运行时环境体验）不再向新客户开放。有关类似于 AWS 大型机现代化服务（托管运行时环境体验）的功能，请浏览 AWS 大型机现代化服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅[AWS 大型机现代化可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS 针对大型机运行时机密进行转换
<a name="ba-runtime-config-app-secrets"></a>

某些包含凭证的资源配置可以通过使用 AWS 密钥来获得进一步保护。这个想法是将关键数据存储在 AWS 机密中，并在YAML配置中引用该密钥，以便在Apache Tomcat启动时即时获取秘密内容。

## 适用于 Aurora 的密钥
<a name="ba-runtime-config-app-secrets-aur"></a>

Aurora 数据库配置（用于 JICS Blusam、、customer db 等）将使用内置的[数据库密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html)，该密钥将自动填充相应数据库中的所有相关字段。

**注意**  
`dbname` 密钥是可选的，可以包含在或不包含在密钥中，具体取决于您的数据库配置。您可以将其手动添加到密钥中，也可以通过向 YAML 文件提供名称来添加。

## 其他密钥
<a name="ba-runtime-config-app-secrets-other"></a>

其他密钥用于具有单一密码的资源（尤其是受密码保护的 redis 缓存）。在这种情况下，必须使用[其他类型的密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。

### YAML 对密钥的引用
<a name="ba-runtime-config-app-secrets-reference"></a>

`application-main.yml` 可以引用各种资源的密钥 ARN。

### JICS 数据库
<a name="jics-database"></a>

JICS 数据库凭证（`spring.aws.jics.db.secret`）

```
spring:
   aws:
     jics:
       db:
         dbname: jics
         secret: arn:aws:secretsmanager:XXXX
```

支持的 JICS 数据库密钥：


| 密钥 | 密钥说明 | 
| --- | --- | 
| host | 主机名 | 
| 端口 | 端口 | 
| dbname | 数据库名称 | 
| username | 用户名 | 
| password | 密码 | 
| engine | 数据库引擎：Postgres、Oracle、Db2、Microsoft SQL Server | 
| currentSchema | 要使用的特定架构（仅支持 Db2） | 
| sslConnection | 是否使用 SSL 连接（仅支持 Db2） | 
| sslTrustStoreLocation | 信任库在客户端上的位置（仅支持 Db2） | 
| sslTrustStore密码 | 客户端上信任库的密码（仅支持 Db2） | 

**注意**  
数据库的名称要么在密钥中提供，要么在 yaml 引用 `spring.aws.jics.db.dbname` 中提供。

### Blusam 数据库
<a name="blusam-database"></a>

Blusam数据库凭据 `spring.aws.client.bluesam.db.secret`

```
spring:
   aws:
     client:
       bluesam:
         db:
           dbname: bluesam 
           secret: arn:aws:secretsmanager:XXXX
```

支持的Blusam数据库密钥：


| 密钥 | 密钥说明 | 
| --- | --- | 
| host | 主机名 | 
| 端口 | 端口 | 
| dbname | 数据库名称 | 
| username | 用户名 | 
| password | 密码 | 
| engine | 数据库引擎：Postgres | 

**注意**  
数据库的名称要么在密钥中提供，要么在 yaml 引用 `spring.aws.client.bluesam.db.dbname` 中提供。

### 客户端数据库
<a name="client-database"></a>

客户端 `application-profile.yml` 可以引用客户端数据库的密钥 ARN。这需要一个额外的属性来列出数据源名称 `spring.aws.client.datasources.names`。对于每个数据源名称 `ds_name`，请在 `spring.aws.client.datasources.ds_name.secret` 属性中指定密钥 ARN。示例：

```
spring:
   aws:
     client:
       datasources:
         names: primary,host 
         primary:
           secret: arn:aws:secretsmanager:XXXX
         host:
           dbname: hostdb 
           secret: arn:aws:secretsmanager:XXXX
```

*names: primary,host*:

本例中包含名为 primary 和 host 的两个客户端数据源，每个数据源都有各自的数据库和凭证。

*dbname: hostdb*:

在此示例中，“host"”数据库的名称不在密钥中，因此在此处提供，而“primary”数据库在密钥中。

支持的客户端数据库密钥：


| 密钥 | 密钥说明 | 
| --- | --- | 
| host | 主机名 | 
| 端口 | 端口 | 
| dbname | 数据库名称 | 
| username | 用户名 | 
| password | 密码 | 
| engine | 数据库引擎：Postgres、Oracle、Db2、Microsoft SQL Server | 
| currentSchema | 要使用的特定架构（仅支持 Db2） | 
| sslConnection | 是否使用 SSL 连接（仅支持 Db2） | 
| sslTrustStoreLocation | 信任库在客户端上的位置（仅支持 Db2） | 
| sslTrustStore密码 | 客户端上信任库的密码（仅支持 Db2） | 

### PGM 实用程序数据库
<a name="pgm-utility-database"></a>

`application-utility-pgm.yml` 可以引用各种资源的密钥 ARN。
+  `spring.aws.client.datasources.primary` 
  + `secret`

     应用程序数据库的密钥 ARN。

类型：字符串
+ `type`

要使用的连接池实现的完全限定名称。

类型：字符串

默认：`com.zaxxer.hikari.HikariDataSource`
+ `spring.aws.client.utility.pgm.datasources` 
  + `names`

数据来源名称列表。

类型：字符串
+ `dsname` 
  + `dbname`

主机名称。

类型：字符串
+ `secret`

主机数据库的密钥 ARN。

类型：字符串
+ `type`

要使用的连接池实现的完全限定名称。

类型：字符串

默认：`com.zaxxer.hikari.HikariDataSource`

对于多数据源密钥：

```
spring:
   aws:
     client:
       primary:
         secret: arn:aws:secretsmanager:XXXX
         type: dataSourceType
       utility:
         pgm:
           datasources:
             names: dsname1,dsname2,dsname3
               dsname1:
                 dbname: dbname1
                 secret: arn:aws:secretsmanager:XXXX
                 type: dataSourceType
               dsname2:
                 dbname: dbname2
                 secret: arn:aws:secretsmanager:XXXX
                 type: dataSourceType
               dsname3:
                 dbname: dbname3
                 secret: arn:aws:secretsmanager:XXXX
                 type: dataSourceType
```

### 不支持 XA 的密钥
<a name="no-xa"></a>
+ 发动机 (postgres/oracle/db2/mssql)
+ 端口
+ dbname
+ currentSchema
+ username
+ password
+ url
+ sslConnection
+ sslTrustStoreLocation
+ sslTrustStore密码

对于 `postgres`，只有 `sslMode` 密钥值（`disable/allow/prefer/require/verify-ca/verify-full`）和 `spring.aws.rds.ssl.cert-path` YAML 属性才能使 SSL 连接成为可能。

### 支持 XA 的密钥
<a name="xa"></a>

如果客户端数据库使用 XA，则通过密钥值支持子 xa 属性。
+ host
+ 端口
+ dbname
+ currentSchema
+ username
+ password
+ url
+ sslConnection (true/false)
+ sslTrustStoreLocation
+ sslTrustStore密码

但是，对于其他 xa 属性（例如 `maxPoolSize` 或 `driverType`），则仍必须提供常规 YAML 密钥 `spring.jta.atomikos.datasource.XXXX.unique-resource-name`。

密钥值会覆盖 YAML 属性。

### 默认超级管理员 BAC 和 JAC
<a name="bac-and-jac"></a>

您还可以通过指定 ARN 将 application-main.yml 配置为从 AWS Secrets Manager 检索密钥中的默认超级管理员用户的用户名和密码。以下示例说明如何在 YAML 文件中声明该密钥。

```
spring:
   aws:
     client:
       defaultSuperAdmin:
         secret: arn:aws:secretsmanager:XXXX
```

支持的默认超级管理员数据库密钥：


| 密钥 | 密钥说明 | 
| --- | --- | 
| username | 用户名。 | 
| password | 密码。 | 

### OAuth2
<a name="oauth2"></a>

您还可以通过指定提供程序和 ARN 将 “application-main.yml” 配置为从中检索 OAuth2 客户端密钥。 AWS Secrets Manager 提供者属性的默认值为 Amazon Cognito。以下是 OAuth2 提供商 Keycloak 的配置示例：

```
spring:
   aws:
     client:
       provider: keycloak
       keycloak:
         secret: arn:aws:secretsmanager:XXXX
```

在此示例中， OAuth2 提供商 Keycloak 的客户端密钥是从 AWS Secrets Manager 中指定的 ARN 中检索的。此配置通过动态解析提供者名称和相应的密钥 ARN 来支持多个提供者。

支持的 OAuth2 密钥：


| 密钥 | 密钥说明 | 
| --- | --- | 
| client-secret | 授权服务器在应用程序注册过程中生成的密钥。 | 

### 用于 Redis 缓存的密钥管理器
<a name="ba-runtime-redis-secrets-properties"></a>

`application-main.yml` 文件可以引用 Redis 缓存的密钥 ARN。支持以下各项：
+ Gapwalk Redis 凭证（`spring.aws.client.gapwalk.redis.secret`）
+ Bluesam Redis 凭证（`spring.aws.client.bluesam.redis.secret`）
+ Bluesam 锁 Redis 凭证（`spring.aws.client.bluesam.locks.redis.secret`）
+ 数据集目录 Redis 凭证（`spring.aws.client.dataset.catalog.redis.secret`）
+ JICS Redis 凭证（`spring.aws.client.jics.redis.secret`）
+ 会话 Redis 凭证（`spring.aws.client.jics.redis.secret`）
+ 会话跟踪器 Redis 凭证（`spring.aws.client.session.tracker.redis.secret`）
+ JICS TS 队列 Redis 凭证（`spring.aws.client.jics.queues.ts.redis.secret`）
+ JCL 检查点 Redis 凭证（`spring.aws.client.jcl.checkpoint.redis.secret`）
+ Gapwalk 文件锁 Redis 凭证（`spring.aws.client.gapwalk.files.locks.redis.secret`）
+ Blu4IV 锁 Redis 凭证（`spring.aws.client.blu4iv.locks.redis.secret`）

 以下示例说明如何在 YAML 文件中声明这些密钥。

```
spring:
   aws:
     client:
       gapwalk:
         redis:
           secret: arn:aws:secretsmanager:XXXX
       bluesam:
         locks:
           redis:
             secret: arn:aws:secretsmanager:XXXX
         redis:
           secret: arn:aws:secretsmanager:XXXX
       dataset:
         catalog:
           redis:
             secret: arn:aws:secretsmanager:XXXX
       jics:
         redis:
           secret: arn:aws:secretsmanager:XXXX
       session:
         tracker:
           redis:
             secret: arn:aws:secretsmanager:XXXX
       jics:
         queues:
           ts:
             redis:
               secret: arn:aws:secretsmanager:XXXX
       jcl:
         checkpoint:
           redis:
             secret: arn:aws:secretsmanager:XXXX
       gapwalk:
         files:
           locks:
             redis:
               secret: arn:aws:secretsmanager:XXXX
       blu4iv:
         locks:
           redis:
             secret: arn:aws:secretsmanager:XXXX
```

支持的 Redis 密钥：


| 密钥 | 密钥说明 | 
| --- | --- | 
| hostname | Redis 服务器主机名。 | 
| 端口 | Redis 服务器端口。 | 
| username | 用户名。 | 
| password | 密码。 | 

### 用于 SSL 密码设置的密钥管理器
<a name="ba-runtime-ssl-secrets-properties"></a>

`application-main.yml` 文件可以引用 SSL 密码设置的密钥 ARN。支持以下内容。
+ Gapwalk SSL 凭证（`spring.aws.client.ssl.secret`）

以下示例说明如何在 YAML 文件中声明这些密钥。

```
spring:
   aws:
     client:
       ssl:
         secret: arn:aws:secretsmanager:XXXX
```


| 密钥 | 密钥说明 | 
| --- | --- | 
| trustStorePassword | 信任库密码。 | 
| keyStorePassword | 密钥库密码。 | 

### 用于 IBM MQ 密码设置的密钥管理器
<a name="ba-runtime-IBMMQ-secrets-properties"></a>

该`application-main.yml`文件可以引用 IBM MQ 设置的机密 ARN。支持以下内容。
+ IBM MQ 连接定义为列表，凭证也如此：

  `mq.queues.jmsMQQueueManagers[N].secret:`

  对于第一个连接，N 从 0 开始。

以下示例说明如何在 YAML 文件中声明这些密钥。

```
mq.queues.jmsMQQueueManagers[0].secret: {{Secret-0-ARN}} 
mq.queues.jmsMQQueueManagers[1].secret: {{Secret-1-ARN}}
```

有关密钥的信息 ARNs，请参阅 Secret [s Manager 密钥中有什么？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/whats-in-a-secret.html)

密钥中定义的属性将覆盖其在 `jmsMQ` YAML 配置中的相应值。

如果`queueManager`在密钥中设置，它将覆盖 YAML 文件中的`mq.queues.jmsMQQueueManagers[N].jmsMQQueueManager`值。


| 密钥 | 密钥说明 | 
| --- | --- | 
| 队列管理器 | IBM MQ 队列管理器名称。 | 
| appName | IBM MQ 应用程序的名称。 | 
| 渠道 | IBM MQ 频道名称。 | 
| host | IBM MQ 的主机名。 | 
| 端口 | IBM MQ 端口。 | 
| userId | IBM MQ 用户名。 | 
| password | IBM MQ 用户密码。 | 
| maxPoolSize | IBM MQ 的最大池大小。 | 
| sslCipherKey | IBM MQ SSL 密码套件。 | 

### JHDB 数据库
<a name="JHDB-database"></a>

客户端`application-jhdb.yml`文件可以引用 JHDB 元数据数据库 ARNs 的密钥。每个数据库连接都需要一个唯一的名称和包含连接凭据的相应机密 ARN。数据库名称在以逗号分隔的列表中定义，每个数据库名称都 ARNs 映射了各个密钥。

```
spring:
   aws:
     jhdb:
       cnxs:
         datasources:
           names: DBD1,DBD2
           DBD1:  
             secret: arn:aws:secretsmanager:XXXX
           DBD2:
             secret: arn:aws:secretsmanager:XXXX
```

支持的客户端数据库密钥：


| 密钥 | 密钥说明 | 
| --- | --- | 
| host | 主机名。 | 
| 端口 | 端口。 | 
| dbname | 数据库的名称。 | 
| username | 用户名。 | 
| password | 密码。 | 
| engine | 数据库引擎：Postgres（现在仅支持 Postgres）。 | 
| currentSchema | 要使用的特定架构。 | 