ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
Oracle Cloud Infrastructure Resource Managerと自動化プロセスの統合
イントロダクション
Oracle Cloud Infrastructure (OCI) Resource Managerサービスは、すべてのOCIリソースのデプロイメントと操作を自動化します。infrastructure-as-code (IaC)モデルを使用するサービスは、DevOpsエンジニアがインフラストラクチャをどこでも開発およびデプロイできるオープン・ソースの業界標準であるTerraformに基づいています。
Terraform構成は、宣言的な構成ファイルのインフラストラクチャをエンコードします。OCI Resource Managerサービスを使用すると、複数のチームおよびプラットフォームにわたってインフラストラクチャ構成と状態ファイルを共有および管理できます。
OCI Resource Managerを使用すると、OCIコンソールでTerraformスクリプトを実行できます。また、RESTコールを作成したり、Oracle Cloud Infrastructureコマンドライン・インタフェース(OCI CLI)を使用したりすることもできるため、OCI Devops、Jenkins、GitHubなどの自動化ツールとの統合の可能性が広がります。

このチュートリアルでは、データベースに公開せずにOCI Vaultシークレットを介してデータベース管理パスワードを安全に取得することで、Oracle Autonomous Databaseインスタンスのデプロイメントを自動化します。これにより、OCI Resource Manager実行ユーザーは、データベースおよび格納されたパスワードを作成するための適切なアクセス権を持ちます。
目的
- 適切なアクセス資格証明を使用してインスタンスを作成できるようにTerraformを介して自動化を構成しますが、パスワードなどの機密情報は公開せずに、権限のあるユーザーのみがTerraformスクリプト内で使用できるように格納する必要があります。
前提条件
-
ポリシーのないユーザー・グループ内のユーザー。このユーザーには、OCI Resource ManagerでTerraformを実行するための適切な権限が付与されます。
-
特定のコンパートメント内のOCIオブジェクト・ストレージ・バケット(このバケットにTerraformスクリプトを生成する場合)。
-
TerraformスクリプトはOCIリソース・マネージャを介して実行され、ユーザーには次の権限が必要です:
- コンパートメントにリソースを作成します。
- Oracle Autonomous Databaseインスタンスを作成します。
- OCI Vaultパスワードを読み取ります。
- Terraformスクリプトを実行します。
タスク1: OCI VaultでのOracle Autonomous Databaseのシークレットの作成
OCI Vaultにパスワードを作成し、機密データを公開せずにTerraformで新しいリソースを構成する方法を説明します。
セキュリティとは、パスワード、証明書、SSHキー、OCIサービスで使用する認証トークンなどの資格証明です。シークレットをOCI Vaultに格納すると、コードや構成ファイルなどの他の場所に格納するよりも優れたセキュリティを実現できます。リソースまたはその他のサービスにアクセスするためにシークレットが必要な場合、OCI Vaultサービスからシークレットを取得できます。
OCIコンソール、OCI CLIまたはAPIを使用して、シークレットを作成できます。秘密のシークレット・コンテンツは、外部ソースからサービスにインポートされます。OCI Vaultサービスは、シークレットをボールトに格納します。
ノート:このタスクでは、OCIコンソールで管理ユーザーとしてログインする必要があります。OCI Vaultでパスワードを作成する権限が必要です。
-
OCIコンソールにログインし、「アイデンティティとセキュリティ」および「Vault」をクリックします。

-
シークレットを格納するコンパートメントを選択し、「Vaultの作成」をクリックします。

-
ボールトの名前を入力し、コンパートメントを確認し、「Vaultの作成」をクリックします。

-
ボールトが作成されたことを確認し、キーを作成します。「マスター暗号化キー」および「キーの作成」をクリックします。

-
コンパートメントを確認し、キーの名前を入力します。たとえば、「名前」に
autonomouskeyと入力し、「キーの作成」をクリックします。
キーが作成されていることを確認します。

-
「シークレット」および「シークレットの作成」をクリックします。

-
Autonomous Adminパスワードを作成します。次の情報を入力し、「シークレットの作成」をクリックします。
- コンパートメント:コンパートメントの選択
- 名前:最初のシークレットの名前を入力します。
- パスワードを含めるには、「手動シークレット生成」を選択します。
- シークレット・タイプ・テンプレート:
Plain-Textと入力します。 - シークレット・コンテンツ:パスワードを入力します。

-
シークレットOCIDが必要です。OCIDをコピーするには、「コピー」をクリックします。

タスク2: OCIユーザーのポリシーの作成
このチュートリアルでは、TestGroupという名前のグループに含まれるユーザー名TestUserについて考えます。次に、TestPolicyという名前のポリシーを作成します。
これは、Terraform自動化のセキュリティを保証するために必要なすべての権限を制御するため、このタスクは重要です。
ノート:このタスクでは、OCIの管理ユーザーを使用してログインする必要があります。
-
OCIコンソールに移動し、「アイデンティティとセキュリティ」および「ポリシー」をクリックします。

-
「ポリシーの作成」をクリックします。

-
「ステートメント」セクションで、次のポリシーを入力します。
-
これらのポリシーにより、OCIリソース・マネージャでスタックおよびジョブを管理するために以前に作成した
TestGroupをグループ化する権限が付与されます。- Allow group 'Default'/'TestGroup' to manage orm-stacks in compartment integration - Allow group 'Default'/'TestGroup' to manage orm-jobs in compartment integration - Allow group 'Default'/'TestGroup' to read orm-config-source-providers in tenancy -
このポリシーにより、コンパートメント統合でOracle Autonomous Databaseインスタンスを作成する権限が付与されます。
- Allow group 'Default'/'TestGroup' to manage autonomous-database in compartment integration -
グループは、Terraformスクリプトを介してOCI Vaultに格納されているパスワードを読み取ることができます。
- Allow group 'Default'/'TestGroup' to use secret-family in tenancy -
このポリシーでは、Terraformスクリプトを特定のコンパートメントに保存する権限が付与されます。
- Allow group 'Default'/'TestGroup' to manage all-resources in compartment kubernetes -
このポリシーにより、
TestGroupのユーザーはOCIコード・エディタでコードを編集できます。- Allow group 'Default'/'TestGroup' to use cloud-shell in tenancy

-
タスク3: テンプレートからのスタックの作成
Oracle Autonomous Databaseインスタンスのスタックを作成します。このためにテンプレートを使用できます。最初のステップは、タスク2で作成したユーザーとしてログインします。
-
OCIコンソールに移動し、ハンバーガー・メニューをクリックします。

-
「開発者サービス」および「スタック」をクリックします。

-
「コンパートメント」を選択して、「スタックの作成」をクリックします。

-
「スタック情報」ページで、「テンプレート」を選択し、「テンプレートの選択」をクリックして、Oracle Autonomous DatabaseのTerraformスクリプトを生成します。

-
「サービス」タブで、「Autonomous Transaction Processingデータベース」を選択し、「テンプレートの選択」をクリックします。

-
Terraformスクリプトを生成し、OCI Object Storageバケットに格納できます。「カスタムTerraformプロバイダの使用」を選択し、バケット「コンパートメント」および「名前」を入力して、スタックを保存します。

スタックが保存されます。

-
このテンプレートは、OCI Vaultに格納されているシークレットを読み取りません。Terraformでシークレットを読み取るには、コードを変更する必要があります。
「編集」をクリックし、「コード・エディタでTerraform構成を編集」を選択します。

-
コードは編集できます。デフォルト・コードでは、パスワードのランダムな文字列が生成されます。
-
main.tfファイル。

oci_secrets_secretbundleという名前の新しいデータを追加し、次の属性に割り当てる必要があります。autonomous_data_warehouseおよびautonomous_databaseセクションにあるadmin_password。password(autonomous_database_walletセクション)。
-
main.tf-autonomous_data_warehouseセクション。data "oci_secrets_secretbundle" "bundle" { secret_id = var.secret_ocid } admin_password = base64decode(data.oci_secrets_secretbundle.bundle.secret_bundle_content.0.content)
-
main.tf-autonomous_databaseセクション。
-
main.tf-autonomous_database_walletセクション。

variables.tfファイルに次のコードを追加し、タスク1で生成されたシークレットのOCIDを置き換えます。variable "secret_ocid" { default = "ocid1.vaultsecret.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }-
variables.tfファイル。
ノート:ファイルを保存します。マウス・カーソルを(エディタの右側にあるAutonomous Transaction Processing....タイトルの)スタック上に移動し、プロジェクトを右クリックして保存します。保存せずに終了した場合、実行では、元のコード・スクリプトでランダムな文字列が使用されると想定されます。
-
タスク4: 権限のテスト
ポリシーをテストし、特定のコンパートメント内のOCI Resource Manager、OCI VaultおよびOracle Autonomous Databaseインスタンスを制御する方法を確認できます。
-
管理ユーザー資格証明を使用してOCIコンソールにログインし、
TestPolicyポリシーのTestGroupグループのすべてのポリシーを削除します。「削除」をクリックし、確認します。
-
ここで、
TestGroupグループのユーザーでログインすると、スタックが表示されないため、実行できません。
-
次の文を管理ユーザーとともに追加します。
Allow group 'Default'/'TestGroup' to manage orm-stacks in compartment integration Allow group 'Default'/'TestGroup' to manage orm-jobs in compartment integration Allow group 'Default'/'TestGroup' to read orm-config-source-providers in tenancy Allow group 'Default'/'TestGroup' to manage all-resources in compartment kubernetes
次の文は、
TestGroupのユーザーにOCIリソース・マネージャ・スタックを使用する権限を付与します。
-
ユーザーがOracle Autonomous Databaseインスタンスを作成し、OCI Vaultでシークレットを読み取るための権限を削除しました。そのため、スタックは実行できますが、成功はしません。テストするには、スタックの詳細ページで「適用」をクリックします。


-
TestPolicyにOracle Autonomous DatabaseおよびOCI Vault権限を追加します。Allow group 'Default'/'TestGroup' to manage all-resources in compartment kubernetes Allow group 'Default'/'TestGroup' to manage autonomous-database in compartment integration
-
スタックの詳細ページで「適用」をクリックすると、パスワードを公開せずにすべてのリソースを制御できます。

タスク5: RESTを使用したOCI Resource Manager Automationのコール
OCIのすべてのリソースには、OCIコンソールで実行されるサービスを呼び出すためのOCI REST APIまたはOCI CLIコマンドがあります。
OCI REST APIの詳細は、「OCI REST API」を参照してください。OCI CLIコマンドのリストは、Oracle Cloud Infrastructure CLIコマンド・リファレンスを参照してください。
OCI REST APIまたはOCI CLIコマンドを使用してOCI Resource Managerスタックを実行できるようになりました。ジョブを作成するには、CreateJobを参照するか、次のサンプル・コードcurl-OCI.zipをOCIパラメータで準備したcurl-OCI.shとともに使用できます。

RESTリクエストの署名を作成する必要があります。詳細は、curlを使用したOracle Cloud Infrastructure (OCI) RESTコールのウォークスルーを参照してください。
-
STACK-RUN.shという名前のファイルを作成します。これは、curl-OCI.shを使用したRESTリクエストになります(このツールは、OCI情報を使用して認可文字列を準備します)。
-
スタックIDおよびコンパートメントIDを使用して、
request.jsonという名前のファイルを作成します。
-
curl-oci.shファイルを開き、次のパラメータを変更します。これらのパラメータは、OCI CLIインストールと同じです。
次に、スクリプトを実行します。

成功の結果を確認できます。

関連リンク
承認
- 著者 - Cristiano Hoshikawa (Oracle LAD Aチーム・ソリューション・エンジニア)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Integrate Oracle Cloud Infrastructure Resource Manager with Automation Process
F98157-01
May 2024