[OCI]OCI Vaultのシークレットを使用してAutonomous Databaseのadminユーザのパスワードを設定してみた


# はじめに
OCI Vaultのシークレットを使用してAutonomous Databaseのadminユーザのパスワードを設定することができるようになったので、試してみました。

これにより、OCI CLIやAPIを使用してAutonomous Databaseをデプロイするスクリプトを作成する際に、スクリプトにadminユーザのパスワードを埋め込む必要がなくなるため、セキュリティが向上します。

# 1.ボールトの作成
ボールト「DemoVault」を作成します。
![スクリーンショット 2023-03-02 12.59.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/bb2a8950-e46d-0121-0026-a91e10275db1.png)

![スクリーンショット 2023-03-02 12.27.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/47218d7a-191b-19c0-760c-31effc930339.png)

![スクリーンショット 2023-03-02 12.27.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/12a5f140-babe-f72b-be68-3633e6b32a1c.png)

# 2.マスター暗号化キーの作成
1.で作成したボールト「DemoVault」内にAES256ビットのマスター暗号化キー「MyMasterEncryptionKey」を作成します。

![スクリーンショット 2023-03-02 12.28.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/17650f67-a8f1-87e6-7838-ca83dd5f8ecd.png)

![スクリーンショット 2023-03-02 12.28.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b843957a-3fcf-6b95-66d0-bb3a11864a1a.png)

![スクリーンショット 2023-03-02 12.29.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ee87a801-69f2-7d8c-5762-e6e53a7f05ed.png)

# 3.シークレットの作成
1.で作成したボールト「DemoVault」内にシークレット「MySecretForADBadmin」を作成します。
暗号化キーとして2.で作成した「MyMasterEncryptionKey」を、シークレット・タイプとして「プレーン・テキスト」を指定し、シークレット・コンテンツとしてadminユーザのパスワードとして設定する文字列（ここではDemo#1Demo#1）を入力します。

![スクリーンショット 2023-03-02 12.29.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/236a6c7d-91c9-580b-0a7d-ac5ce822bc80.png)

![スクリーンショット 2023-03-02 12.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/cb391fbf-5502-438b-7e47-e7d7eec1060a.png)

![スクリーンショット 2023-03-02 12.32.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0727d65c-1a0d-404d-d8c7-4c5bda8dc31a.png)

![スクリーンショット 2023-03-02 12.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f92ef036-b4ef-d734-212c-07f4e0de5469.png)

作成したシークレットの名前をクリックして、シークレットの詳細画面に移動します。

![スクリーンショット 2023-03-02 12.36.15のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2d5492f3-bbcf-c546-02b0-4190b4bdabbb.png)

シークレットのOCIDをコピーしてメモしておきます。

![スクリーンショット 2023-03-02 12.36.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8b090b64-ee7c-06eb-ebf6-d5efd739926c.png)

# 4.Autonomous Databaseの作成

OCI CLIを使用して、Autonomous Databaseを作成します。
adminユーザのパスワードをシークレットを使用して指定する際は、パラメータ"--secret-id"に、3.で作成したシークレットのOCIDを指定します。

```
[opc@ocicli ~]$ oci db autonomous-database create --db-workload DW --compartment-id ocid1.compartment.oc1..aXXXXXXXXXXXXXXXXXXXXXXXXXXXXq --display-name secrettest --db-name secrettest --cpu-core-count 1 --data-storage-size-in-tbs 1 --secret-id ocid1.vaultsecret.oc1.ap-tokyo-1.axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa
{
  "data": {
    "actual-used-data-storage-size-in-tbs": null,
    "allocated-storage-size-in-tbs": null,
    "apex-details": null,
    "are-primary-whitelisted-ips-used": null,
    "autonomous-container-database-id": null,
    "autonomous-maintenance-schedule-type": "REGULAR",
    "available-upgrade-versions": null,
    "backup-config": {
      "manual-backup-bucket-name": null,
      "manual-backup-type": "NONE"
    },
    "backup-retention-period-in-days": null,
    "character-set": null,
    "compartment-id": "ocid1.compartment.oc1..aXXXXXXXXXXXXXXXXXXXXXXXXXXXXq",
    "compute-count": 1.0,
    "compute-model": "OCPU",
    "connection-strings": {
      "all-connection-strings": null,
      "dedicated": null,
      "high": null,
      "low": null,
      "medium": null,
      "profiles": null
    },
    "connection-urls": {
      "apex-url": null,
      "database-transforms-url": null,
      "graph-studio-url": null,
      "machine-learning-notebook-url": null,
      "machine-learning-user-management-url": null,
      "mongo-db-url": null,
      "ords-url": null,
      "sql-dev-web-url": null
    },
    "cpu-core-count": 1,
    "customer-contacts": null,
    "data-safe-status": "NOT_REGISTERED",
    "data-storage-size-in-gbs": 1024,
    "data-storage-size-in-tbs": 1,
    "database-edition": "ENTERPRISE_EDITION",
    "database-management-status": null,
    "dataguard-region-type": null,
    "db-name": "secrettest",
    "db-tools-details": [
      {
        "compute-count": null,
        "is-enabled": true,
        "max-idle-time-in-minutes": null,
        "name": "APEX"
      },
      {
        "compute-count": null,
        "is-enabled": true,
        "max-idle-time-in-minutes": null,
        "name": "DATA_TRANSFORMS"
      },
      {
        "compute-count": null,
        "is-enabled": true,
        "max-idle-time-in-minutes": null,
        "name": "DATABASE_ACTIONS"
      },
      {
        "compute-count": null,
        "is-enabled": true,
        "max-idle-time-in-minutes": null,
        "name": "GRAPH_STUDIO"
      },
      {
        "compute-count": null,
        "is-enabled": false,
        "max-idle-time-in-minutes": null,
        "name": "MONGODB_API"
      },
      {
        "compute-count": null,
        "is-enabled": true,
        "max-idle-time-in-minutes": null,
        "name": "OML"
      },
      {
        "compute-count": null,
        "is-enabled": true,
        "max-idle-time-in-minutes": null,
        "name": "ORDS"
      }
    ],
    "db-version": null,
    "db-workload": "DW",
    "defined-tags": {},
    "display-name": "secrettest",
    "failed-data-recovery-in-seconds": null,
    "freeform-tags": {},
    "id": "ocid1.autonomousdatabase.oc1.ap-tokyo-1.axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxq",
    "infrastructure-type": null,
    "is-access-control-enabled": null,
    "is-auto-scaling-enabled": false,
    "is-auto-scaling-for-storage-enabled": false,
    "is-data-guard-enabled": false,
    "is-dedicated": false,
    "is-free-tier": false,
    "is-local-data-guard-enabled": false,
    "is-mtls-connection-required": true,
    "is-preview": false,
    "is-reconnect-clone-enabled": null,
    "is-refreshable-clone": null,
    "is-remote-data-guard-enabled": false,
    "key-history-entry": null,
    "key-store-id": null,
    "key-store-wallet-name": null,
    "kms-key-id": "ORACLE_MANAGED_KEY",
    "kms-key-lifecycle-details": null,
    "kms-key-version-id": null,
    "license-model": "BRING_YOUR_OWN_LICENSE",
    "lifecycle-details": null,
    "lifecycle-state": "PROVISIONING",
    "local-standby-db": null,
    "max-cpu-core-count": null,
    "memory-per-oracle-compute-unit-in-gbs": null,
    "ncharacter-set": null,
    "nsg-ids": null,
    "ocpu-count": null,
    "open-mode": null,
    "operations-insights-status": "NOT_ENABLED",
    "peer-db-ids": null,
    "permission-level": null,
    "private-endpoint": null,
    "private-endpoint-ip": null,
    "private-endpoint-label": null,
    "provisionable-cpus": null,
    "refreshable-mode": null,
    "refreshable-status": null,
    "role": null,
    "scheduled-operations": null,
    "service-console-url": null,
    "source-id": null,
    "standby-db": null,
    "standby-whitelisted-ips": null,
    "subnet-id": null,
    "supported-regions-to-clone-to": null,
    "system-tags": {},
    "time-created": "2023-03-02T03:46:14.980000+00:00",
    "time-data-guard-role-changed": null,
    "time-deletion-of-free-autonomous-database": null,
    "time-local-data-guard-enabled": null,
    "time-maintenance-begin": null,
    "time-maintenance-end": null,
    "time-of-last-failover": null,
    "time-of-last-refresh": null,
    "time-of-last-refresh-point": null,
    "time-of-last-switchover": null,
    "time-of-next-refresh": null,
    "time-reclamation-of-free-autonomous-database": null,
    "time-until-reconnect-clone-enabled": null,
    "total-backup-storage-size-in-gbs": null,
    "used-data-storage-size-in-tbs": null,
    "vault-id": null,
    "whitelisted-ips": null
  },
  "etag": "3543d6e5",
  "opc-work-request-id": "ocid1.coreservicesworkrequest.oc1.ap-tokyo-1.abxhiljrgwqh2md52v5scklpduw2d7vxm2cedwwkjqcnogrgrwzr4ga3di4a"
}
[opc@ocicli ~]$ 
```

コンソールを確認すると、Autonomous Databaseのプロビジョニングが開始されたことが確認できます。
![スクリーンショット 2023-03-02 12.46.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/88b8b88e-ee30-8d76-1abd-39590ef55450.png)
しばらく待つと、Autonomous Databaseが使用可能になります。
![スクリーンショット 2023-03-02 12.47.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/152eeb2b-958d-8b98-6af3-5e2685343878.png)
Autonomous Databaseの名前をクリックして、Autonomous Databaseの詳細画面に移動します。
![スクリーンショット 2023-03-02 12.48.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/66664f43-d969-5e6a-0174-5eb370e97537.png)

# 4.Autonomous Databaseへの接続

Autonomous Databaseの詳細画面から接続文字列を取得します。

![スクリーンショット 2023-03-02 12.48.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/78cdce20-c559-453e-2f4a-342d5479fbc4.png)

SQL*PlusからAutonomous Databaseにadminユーザとして接続します。
パスワードとして、シークレットのコンテンツとして入力した"Demo#1Demo#1"を入力します。

```
[opc@ocicli ~]$ sqlplus admin/Demo#1Demo#1@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=**************_secrettest_medium.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))

SQL*Plus: Release 21.0.0.0.0 - Production on Thu Mar 2 03:55:24 2023
Version 21.9.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Last Successful login time: Thu Mar 02 2023 03:48:31 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.18.0.1.0

SQL>
```

OCI Vaultのシークレットを使用して設定したパスワードを使用して、Autonomous Databaseにadminユーザとして接続できることが確認できました。
なお、adminユーザのパスワードを変更する際にもOCI Vaultのシークレットを利用することが可能です。

# 参考資料
・[Use Oracle Cloud Infrastructure Vault Secret for ADMIN Password](https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/manage-users-create.html#GUID-31FE05B7-5559-4C3D-AF83-417A6CEBC510)