11.5. 配置安全性


Camel 提供 Properties 组件将配置值外部化到属性文件。这些值可以包含敏感信息,如用户名和密码。

这些值可由 Camel 加密和自动解密:

Camel 还支持从外部 vault 系统访问安全配置。

11.5.1. 使用 Vault 配置安全性

Camel 支持以下 Vault

11.5.1.1. 使用 AWS Vault

要使用 AWS Secret Manager,您需要提供 accessKeysecretKeyregion。这可以通过在启动应用程序前使用环境变量完成:

export $CAMEL_VAULT_AWS_ACCESS_KEY=accessKey
export $CAMEL_VAULT_AWS_SECRET_KEY=secretKey
export $CAMEL_VAULT_AWS_REGION=region
Copy to Clipboard Toggle word wrap

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

camel.vault.aws.accessKey = accessKey
camel.vault.aws.secretKey = secretKey
camel.vault.aws.region = region
Copy to Clipboard Toggle word wrap

如果要使用 AWS 默认凭证供应商,您需要提供以下 env 变量:

export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=true
export $CAMEL_VAULT_AWS_REGION=region
Copy to Clipboard Toggle word wrap

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

camel.vault.aws.defaultCredentialsProvider = true
camel.vault.aws.region = region
Copy to Clipboard Toggle word wrap

还可以指定用于访问 AWS Secret Manager 的特定配置集名称

export $CAMEL_VAULT_AWS_USE_PROFILE_CREDENTIALS_PROVIDER=true
export $CAMEL_VAULT_AWS_PROFILE_NAME=test-account
export $CAMEL_VAULT_AWS_REGION=region
Copy to Clipboard Toggle word wrap

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

camel.vault.aws.profileCredentialsProvider = true
camel.vault.aws.profileName = test-account
camel.vault.aws.region = region
Copy to Clipboard Toggle word wrap

此时,您可以使用 aws: 作为 {{ }} 语法中的前缀,以以下方式引用属性:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{aws:route}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

其中 route 将是存储在 AWS Secret Manager Service 中的 secret 名称。

如果 AWS Secret Manager 中不存在 secret,您可以指定一个默认值:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{aws:route:default}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

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

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}
Copy to Clipboard Toggle word wrap

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{aws:database/username}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

如果 AWS Secret Manager 上不存在 secret 的特定字段,您可以指定一个默认值:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{aws:database/username:admin}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

注意

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

唯一的要求是将 camel-aws-secrets-manager JAR 添加到 Camel 应用程序。

11.5.1.2. 使用 Google Secret Manager GCP Vault

要使用 GCP Secret Manager,您需要提供 serviceAccountKey 文件和 GCP projectId。这可以通过在启动应用程序前使用环境变量完成:

export $CAMEL_VAULT_GCP_SERVICE_ACCOUNT_KEY=file:////path/to/service.accountkey
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
Copy to Clipboard Toggle word wrap

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

camel.vault.gcp.serviceAccountKey = accessKey
camel.vault.gcp.projectId = secretKey
Copy to Clipboard Toggle word wrap

如果要使用 GCP 默认客户端实例,您需要提供以下 env 变量:

export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
Copy to Clipboard Toggle word wrap

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

camel.vault.gcp.useDefaultInstance = true
camel.vault.aws.projectId = region
Copy to Clipboard Toggle word wrap

此时,您可以使用 gcp: 作为 {{ }} 语法中的前缀,以以下方式引用属性:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{gcp:route}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

其中 route 是存储在 GCP Secret Manager Service 中的 secret 的名称。

如果 GCP Secret Manager 上不存在 secret,您可以指定一个默认值:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{gcp:route:default}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

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

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}
Copy to Clipboard Toggle word wrap

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{gcp:database/username}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

如果 GCP Secret Manager 上不存在 secret 的特定字段,您可以指定一个默认值:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{gcp:database/username:admin}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

注意

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

仅有两个要求: - 向您的 Camel 应用程序添加 camel-google-secret-manager JAR。- 提供服务帐户在 secret 管理级别执行的操作(例如,访问 secret 有效负载或作为 secret manager 服务的 admin)

11.5.1.3. 使用 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
Copy to Clipboard Toggle word wrap

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

camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName
Copy to Clipboard Toggle word wrap

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

export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
Copy to Clipboard Toggle word wrap

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

camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
Copy to Clipboard Toggle word wrap

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{azure:route}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{azure:route:default}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

另外,如果您有这个格式的名为 database 的 secret,您可以获取 secret 的特定字段:

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}
Copy to Clipboard Toggle word wrap

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{azure:database/username}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{azure:database/username:admin}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

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

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

11.5.1.4. 使用 Hashicorp Vault

要使用这个功能,您需要为 Hashicorp vault 提供凭证作为环境变量:

export $CAMEL_VAULT_HASHICORP_TOKEN=token
export $CAMEL_VAULT_HASHICORP_HOST=host
export $CAMEL_VAULT_HASHICORP_PORT=port
export $CAMEL_VAULT_HASHICORP_SCHEME=http/https
Copy to Clipboard Toggle word wrap

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

camel.vault.hashicorp.token = token
camel.vault.hashicorp.host = host
camel.vault.hashicorp.port = port
camel.vault.hashicorp.scheme = scheme
Copy to Clipboard Toggle word wrap

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

其中 route 是存储在 Hashicorp Vault 实例中的机密的名称,存储在 'secret' 引擎中。

如果 secret 不在 Hashicorp Vault 实例中,您可以指定一个默认值:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route:default}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

在这种情况下,如果 secret 不在 'secret' 引擎中,则属性将回退到"默认"作为值。

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

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}
Copy to Clipboard Toggle word wrap

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database/username}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

如果 'secret' 引擎中的 Hashicorp Vault 实例中没有 secret 的特定字段,您可以指定一个默认值:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database/username:admin}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

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

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

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route@2}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

此方法将在 'secret' 引擎中返回带有版本 '2' 的 RAW 路由 secret。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:route:default@2}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

如果 secret 不存在或版本不存在,此方法将返回带有版本 '2' 或默认值的路由 secret 值(在 'secret' 引擎中)。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database/username:admin@2}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

如果 secret 不存在或者版本不存在,此方法将返回数据库 secret 的用户名字段,如果 secret 不存在,或者版本不存在(在 'secret' 引擎中)。

可以在 Secret Refresh 上重新加载 Camel 上下文,可以通过指定常规凭证(与 AWS Secret Manager 属性功能相同)。

使用环境变量:

export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=accessKey
export $CAMEL_VAULT_AWS_REGION=region
Copy to Clipboard Toggle word wrap

或者作为普通 Camel 主属性:

camel.vault.aws.useDefaultCredentialProvider = true
camel.vault.aws.region = region
Copy to Clipboard Toggle word wrap

或者,通过指定 accessKey/SecretKey 和 region,而不是使用默认的凭证供应商链。

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

camel.vault.aws.refreshEnabled=true
camel.vault.aws.refreshPeriod=60000
camel.vault.aws.secrets=Secret
camel.main.context-reload-enabled = true
Copy to Clipboard Toggle word wrap

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

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

唯一的要求是将 camel-aws-secrets-manager jar 添加到 Camel 应用程序。

另一种选择是将 AWS EventBridge 与 AWS SQS 服务一起使用。

在 AWS 端,需要创建以下资源:

  • 一个 AWS Couldtrail trail
  • AWS SQS Queue
  • 以下类型的 Eventbridge 规则
{
  "source": ["aws.secretsmanager"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["secretsmanager.amazonaws.com"]
  }
}
Copy to Clipboard Toggle word wrap

此规则将过滤与 AWS Secret Manager 相关的事件

  • 您需要为 Eventbridge 规则将 Rule 目标设置为 AWS SQS Queue
  • 您需要授予 Eventbrige 规则的权限,以便在上述 SQS Queue 上写入。要做到这一点,您需要定义 json 文件,如下所示:
{
    "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"<queue_arn>/SQSDefaultPolicy\",\"Statement\":[{\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"<queue_arn>\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"<eventbridge_rule_arn>\"}}}]}"
}
Copy to Clipboard Toggle word wrap

更改 queue_arn 和 eventbridge_rule_arn 的值,使用 policy.json 名称保存文件,并使用 AWS CLI 运行以下命令

aws sqs set-queue-attributes --queue-url <queue_url> --attributes file://policy.json
Copy to Clipboard Toggle word wrap

其中 queue_url 是刚才创建的 Queue 的 AWS SQS Queue URL。

现在,您应能够在 Camel 端设置配置。要启用 SQS 通知添加以下属性:

camel.vault.aws.refreshEnabled=true
camel.vault.aws.refreshPeriod=60000
camel.vault.aws.secrets=Secret
camel.main.context-reload-enabled = true
camel.vault.aws.useSqsNotification=true
camel.vault.aws.sqsQueueUrl=<queue_url>
Copy to Clipboard Toggle word wrap

其中 queue_url 是刚才创建的 Queue 的 AWS SQS Queue URL。

每当发生名为 'Secret' 的 Secret 的 PutSecretValue 事件时,信息将在 AWS SQS Queue 中排队,并在 Camel 端消耗一个上下文重新加载。

可以在 Secret Refresh 上重新加载 Camel 上下文,可以通过指定常规凭证(与 Google Secret Manager 属性功能相同)。

使用环境变量:

export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
Copy to Clipboard Toggle word wrap

或者作为普通 Camel 主属性:

camel.vault.gcp.useDefaultInstance = true
camel.vault.aws.projectId = projectId
Copy to Clipboard Toggle word wrap

或者指定服务帐户密钥文件的路径,而不是使用默认实例。

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

camel.vault.gcp.projectId= projectId
camel.vault.gcp.refreshEnabled=true
camel.vault.gcp.refreshPeriod=60000
camel.vault.gcp.secrets=hello*
camel.vault.gcp.subscriptionName=subscriptionName
camel.main.context-reload-enabled = true
Copy to Clipboard Toggle word wrap

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

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

camel.vault.gcp.subscriptionName 是与跟踪的 secret 关联的 Google PubSub 主题创建的订阅名称。

当使用与 Google Secret Manager 相关的通知系统时,此机制:通过此功能,每个 secret 最多可以与 10 个 Google Pubsub Topic 关联。这些主题将收到与 secret 生命周期相关的事件。

只有两个要求: - 向您的 Camel 应用程序添加 camel-google-secret-manager JAR。- 提供服务帐户在 secret 管理级别执行的操作(例如,访问 secret 有效负载,或作为 secret manager 服务的 admin,对 Pubsub 服务具有权限)

可以在 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
Copy to Clipboard Toggle word wrap

或者作为普通 Camel 主属性:

camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName
Copy to Clipboard Toggle word wrap

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

export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
Copy to Clipboard Toggle word wrap

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

camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
Copy to Clipboard Toggle word wrap

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

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
Copy to Clipboard Toggle word wrap

其中 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 应用程序。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部