13.6. 使用方法


13.6.1. 使用 Azure Key Vault 属性功能

要使用这个功能,您需要为 Azure Key Vault Service 提供凭证作为环境变量:

export $CAMEL_VAULT_AZURE_TENANT_ID=tenantId
export $CAMEL_VAULT_AZURE_CLIENT_ID=clientId
export $CAMEL_VAULT_AZURE_CLIENT_SECRET=clientSecret
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName

您还可以在 application.properties 文件中配置凭证,例如:

camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName

或者您可以使用以下方法启用 Azure 身份的使用:

export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName

您还可以在 application.properties 文件中启用 Azure Identity 的使用,例如:

camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
注意

camel.vault.azure 配置只适用于 Azure Key Vault 属性功能(在解析属性时)。当使用 operation 选项创建、获取、列出 secret 等时,您应该提供连接到 Azure Services 的常规选项。

此时,您可以使用以下方法引用属性:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{azure:route}}"/>
    </route>
</camelContext>

其中 route 将是存储在 Azure Key Vault Service 中的 secret 名称。

如果 Azure Key Vault Service 上不存在 secret,您可以指定一个默认值:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{azure:route:default}}"/>
    </route>
</camelContext>

在这种情况下,如果 secret 不存在,属性将回退到"default"作为值。

另外,如果您拥有一个名为 database 的 secret,则可以获取 secret 的特定字段:

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}

您可以在路由中获取单个 secret 值,例如:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{azure:database/username}}"/>
    </route>
</camelContext>

或重新使用属性作为端点的一部分。

如果 Azure Key Vault 上不存在 secret 的特定字段,您可以指定一个默认值:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{azure:database/username:admin}}"/>
    </route>
</camelContext>

在这种情况下,如果 secret 不存在或 secret 存在,但 username 字段不是 secret 的一部分,则属性将回退到 "admin" 作为值。

另外,还提供了为这两种方法获取 secret 的特定版本的语法,指定了字段/默认值,或仅使用 secret:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{azure:route@bf9b4f4b-8e63-43fd-a73c-3e2d3748b451}}"/>
    </route>
</camelContext>

此方法将返回版本为 'bf9b4f4b-8e63-43fd-a73c-3e2d3748b451' 的 RAW 路由 secret。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{azure:route:default@bf9b4f4b-8e63-43fd-a73c-3e2d3748b451}}"/>
    </route>
</camelContext>

如果 secret 不存在,此方法将返回版本为 'bf9b4f4b-8e63-43fd-a73c-3e2d3748b451' 或默认值的路由 secret 值。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{azure:database/username:admin@bf9b4f4b-8e63-43fd-a73c-3e2d3748b451}}"/>
    </route>
</camelContext>

如果 secret 不存在或者版本为 'bf9b4f4b-8e63-43fd-a73c-3e2d3748b451' 或 admin,则此方法将返回数据库 secret 的用户名字段,并带有版本 'bf9b4f4b-8e63-43fd-a73c-3e2d3748b451' 或 admin。

目前,我们不会考虑有轮转功能(如果有的话),而是需要完成的工作。

唯一的要求是将 camel-azure-key-vault jar 添加到 Camel 应用程序。

可以在 Secret Refresh 上重新加载 Camel 上下文,方法是指定常规凭证(与 Azure Key Vault 属性功能相同)。

使用环境变量:

export $CAMEL_VAULT_AZURE_TENANT_ID=tenantId
export $CAMEL_VAULT_AZURE_CLIENT_ID=clientId
export $CAMEL_VAULT_AZURE_CLIENT_SECRET=clientSecret
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName

或者作为普通 Camel 主属性:

camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName

如果要将 Azure Identity 与环境变量搭配使用,您可以使用以下方法进行:

export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName

您还可以在 application.properties 文件中启用 Azure Identity 的使用,例如:

camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName

要启用自动刷新,您需要设置其他属性:

camel.vault.azure.refreshEnabled=true
camel.vault.azure.refreshPeriod=60000
camel.vault.azure.secrets=Secret
camel.vault.azure.eventhubConnectionString=eventhub_conn_string
camel.vault.azure.blobAccountName=blob_account_name
camel.vault.azure.blobContainerName=blob_container_name
camel.vault.azure.blobAccessKey=blob_access_key
camel.main.context-reload-enabled = true

其中 camel.vault.azure.refreshEnabled 将启用自动上下文重新加载,camel.vault.azure.refreshPeriod 是更新事件的两个不同检查和 camel.vault.azure.secrets 是代表我们要跟踪更新的 secret 的时间间隔。

其中 camel.vault.azure.eventhubConnectionString 是 eventhub 连接字符串,从 camel.vault.azure.blobAccountName,camel.vault.azure.blobContainerNamecamel.vault.azure.blobAccessKey 获取通知,用于 Azure Eventhub 所需的检查点存储。

请注意,camel.vault.azure.secrets 不是强制的:如果没有指定负责检查更新事件的任务,则会考虑帐户或带有 azure: 前缀的属性。

唯一的要求是将 camel-azure-key-vault jar 添加到 Camel 应用程序。

首先,我们需要创建一个应用程序

az ad app create --display-name test-app-key-vault

然后,我们需要获取凭证

az ad app credential reset --id <appId> --append --display-name 'Description: Key Vault app client' --end-date '2024-12-31'

这将返回类似如下的结果

{
  "appId": "appId",
  "password": "pwd",
  "tenant": "tenantId"
}

您应该记下密码,并将它用作 clientSecret 参数,以及 clientId 和 tenantId。

现在创建密钥 vault

az keyvault create --name <vaultName> --resource-group <resourceGroup>

创建与应用程序 Id 关联的服务主体

az ad sp create --id <appId>

此时,我们需要通过角色分配向应用添加角色

az role assignment create --assignee <appId> --role "Key Vault Administrator" --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.KeyVault/vaults/<vaultName>

最后一步是针对应用程序可以或无法执行的操作创建策略。在这种情况下,我们只想读取 secret 值。因此,这应该已经足够。

az keyvault set-policy --name <vaultName> --spn <appId> --secret-permissions get

您可以使用以下命令通过 Azure CLI 创建 secret:

az keyvault secret set --name <secret_name> --vault-name <vaultName> -f <json-secret>

现在,我们需要设置 Eventhub/EventGrid 通知以告知 secret 更新。

首先,我们需要一个 Blob 帐户和 Blob 容器,以跟踪活动中的 Eventhub。

az storage account create --name <blobAccountName> --resource-group <resourceGroup>

然后创建一个容器

az storage container create --account-name <blobAccountName> --name <blobContainerName>

然后恢复用于此目的的访问密钥

az storage account keys list -g <resourceGroup> -n <blobAccountName>

记录用于设置密码库的 blob 帐户名称、blob Container 名称和 Blob 访问密钥。

现在,让我们创建 Eventhub 端

首先创建命名空间

az eventhubs namespace create --resource-group <resourceGroup> --name <eventhub-namespace> --location westus --sku Standard --enable-auto-inflate --maximum-throughput-units 20

现在创建资源

az eventhubs eventhub create --resource-group <resourceGroup> --namespace-name <eventhub-namespace> --name <eventhub-name> --cleanup-policy Delete --partition-count 15

在 Azure 门户中,为刚才创建的 eventhub 资源创建一个共享策略,并复制连接字符串。

现在,您具有设置密码库所需的所有参数。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部