注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于云环境的值。
将 Oracle Cloud Infrastructure Resource Manager 与自动化流程集成
简介
Oracle Cloud Infrastructure (OCI) Resource Manager 服务可自动部署和运行所有 OCI 资源。该服务使用基础设施即代码 (IaC) 模式,基于 Terraform。这是一个允许 DevOps 工程师在任何位置开发和部署基础设施的开源行业标准。
Terraform 配置将您的基础设施编码在声明式配置文件中。OCI 资源管理器服务允许您跨多个团队和平台共享和管理基础设施配置和状态文件。
通过 OCI 资源管理器,可以在 OCI 控制台中执行 Terraform 脚本。还可以进行 REST 调用或使用 Oracle Cloud Infrastructure 命令行界面 (OCI CLI),从而扩展与自动化工具(例如 OCI Devops、Jenkins、GitHub 等)集成的可能性。
在本教程中,我们将通过 OCI Vault 密钥安全地获取数据库管理员密码,从而自动部署 Oracle Autonomous Database 实例,而不会在文件中公开该密码,以便 OCI Resource Manager 执行用户具有创建数据库和存储密码的适当访问权限。
目标
- 通过 Terraform 配置自动化,以便您可以创建具有相应访问凭证的实例,但无需公开任何敏感信息(例如密码),因此只有授权用户才能在 Terraform 脚本中使用它。
先决条件
-
用户组内没有任何策略的用户。将授予此用户在 OCI 资源管理器中运行 Terraform 的相应权限。
-
特定区间中的 OCI 对象存储存储桶(如果您要在此存储桶中生成 Terraform 脚本)。
-
Terraform 脚本将通过 OCI 资源管理器执行,用户必须具有以下权限:
- 在区间中创建资源。
- 创建 Oracle Autonomous Database 实例。
- 读取 OCI Vault 密码。
- 执行 Terraform 脚本。
任务 1:在 OCI Vault 中为 Oracle Autonomous Database 创建密钥
我们将在 OCI Vault 中创建一个密码,以说明如何在 Terraform 中配置新资源,而不会泄露敏感数据。
密钥是用于 OCI 服务的密码、证书、SSH 密钥或验证令牌等身份证明。在 OCI Vault 中存储密钥比在其他位置(例如代码或配置文件)存储密钥更安全。当需要 OCI Vault 服务访问资源或其他服务时,您可以从其检索密钥。
您可以使用 OCI 控制台、OCI CLI 或 API 创建密钥。密钥内容将从外部源导入到服务。OCI Vault 服务将密钥存储在 Vault 中。
注:对于此任务,我们需要在 OCI 控制台中以管理员用户身份登录。您必须具有在 OCI Vault 中创建密码的权限。
-
登录到 OCI 控制台,单击身份和安全和 Vault 。
-
选择要存储密钥的区间,然后单击创建 Vault 。
-
输入 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 脚本。
-
在服务选项卡中,选择自治事务处理数据库,然后单击选择模板。
-
您可以生成 Terraform 脚本并存储在 OCI 对象存储桶中。选择使用定制 Terraform 提供程序,输入存储桶区间和名称,然后保存堆栈。
您的堆栈已保存。
-
此模板不会读取存储在 OCI Vault 中的密钥。要使 Terraform 读取密钥,我们需要更改代码。
单击编辑,然后选择在代码编辑器中编辑 Terraform 配置。
-
您可以编辑代码。默认代码为密码生成随机字符串。
-
main.tf
文件。您需要添加名为
oci_secrets_secretbundle
的新数据并将其分配给以下属性:admin_password
,位于autonomous_data_warehouse
和autonomous_database
部分。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
文件。
注:保存文件。将鼠标光标移到堆栈上(在编辑器的右侧,在自治事务处理 .... 标题中),右键单击并保存项目。如果不保存就离开,则执行将假定您在原始代码脚本中使用随机字符串。
-
任务 4:测试权限
您可以测试策略并了解如何控制特定区间中的 OCI 资源管理器、OCI Vault 和 Oracle Autonomous Database 实例。
-
使用您的管理员用户身份证明登录 OCI 控制台,并在
TestPolicy
策略中删除TestGroup
组的所有策略。单击删除并确认。 -
现在,使用
TestGroup
组中的 user 登录,您看不到堆栈,因此无法执行堆栈。 -
使用管理员用户添加以下语句。
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 资源管理器自动化
OCI 中的所有资源都具有 OCI REST API 或 OCI CLI 命令来调用在 OCI 控制台中执行的服务。
有关 OCI REST API 的更多信息,请参阅 OCI REST API 。您可以在此处查看 OCI CLI 命令的列表:Oracle Cloud Infrastructure CLI Command Reference 。
现在,我们可以选择使用 OCI REST API 或 OCI CLI 命令执行 OCI 资源管理器堆栈。要创建作业,请参阅 CreateJob ,也可以使用以下示例代码 curl-oci.zip 以及使用 OCI 参数准备的 curl-oci.sh
。
您需要为 REST 请求创建签名。有关详细信息,请参阅 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 帮助中心。
Integrate Oracle Cloud Infrastructure Resource Manager with Automation Process
F98160-01
May 2024