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 应用程序。
13.6.2. 在 Secret Refresh 上重新载入自动 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.blobContainerName 和 camel.vault.azure.blobAccessKey 获取通知,用于 Azure Eventhub 所需的检查点存储。
请注意,camel.vault.azure.secrets 不是强制的:如果没有指定负责检查更新事件的任务,则会考虑帐户或带有 azure: 前缀的属性。
唯一的要求是将 camel-azure-key-vault jar 添加到 Camel 应用程序。
13.6.3. 在 Secret Refresh 上重新载入自动 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 资源创建一个共享策略,并复制连接字符串。
现在,您具有设置密码库所需的所有参数。