7.5. 配置安全性
Camel 提供 Properties 组件将配置值外部化到属性文件。这些值可以包含敏感信息,如用户名和密码。
这些值可由 Camel 加密和自动解密:
Camel 还支持从外部 vault 系统访问安全配置。
7.5.1. 使用 Vault 配置安全性
Camel 支持以下 Vault :
7.5.1.1. 使用 AWS Vault
要使用 AWS Secret Manager,您需要提供 accessKey、secretKey 和 region。这可以通过在启动应用程序前使用环境变量完成:
export $CAMEL_VAULT_AWS_ACCESS_KEY=accessKey export $CAMEL_VAULT_AWS_SECRET_KEY=secretKey export $CAMEL_VAULT_AWS_REGION=region
export $CAMEL_VAULT_AWS_ACCESS_KEY=accessKey
export $CAMEL_VAULT_AWS_SECRET_KEY=secretKey
export $CAMEL_VAULT_AWS_REGION=region
您还可以在 application.properties
文件中配置凭证,例如:
camel.vault.aws.accessKey = accessKey camel.vault.aws.secretKey = secretKey camel.vault.aws.region = region
camel.vault.aws.accessKey = accessKey
camel.vault.aws.secretKey = secretKey
camel.vault.aws.region = region
如果要使用 AWS 默认凭证供应商,您需要提供以下 env 变量:
export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=true export $CAMEL_VAULT_AWS_REGION=region
export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=true
export $CAMEL_VAULT_AWS_REGION=region
您还可以在 application.properties
文件中配置凭证,例如:
camel.vault.aws.defaultCredentialsProvider = true camel.vault.aws.region = region
camel.vault.aws.defaultCredentialsProvider = true
camel.vault.aws.region = region
还可以指定用于访问 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
export $CAMEL_VAULT_AWS_USE_PROFILE_CREDENTIALS_PROVIDER=true
export $CAMEL_VAULT_AWS_PROFILE_NAME=test-account
export $CAMEL_VAULT_AWS_REGION=region
您还可以在 application.properties
文件中配置凭证,例如:
camel.vault.aws.profileCredentialsProvider = true camel.vault.aws.profileName = test-account camel.vault.aws.region = region
camel.vault.aws.profileCredentialsProvider = true
camel.vault.aws.profileName = test-account
camel.vault.aws.region = region
此时,您可以使用 aws:
作为 {{ }}
语法中的前缀,以以下方式引用属性:
<camelContext> <route> <from uri="direct:start"/> <to uri="{{aws:route}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{aws:route}}"/>
</route>
</camelContext>
其中 route
将是存储在 AWS Secret Manager Service 中的 secret 名称。
如果 AWS Secret Manager 中不存在 secret,您可以指定一个默认值:
<camelContext> <route> <from uri="direct:start"/> <to uri="{{aws:route:default}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{aws:route:default}}"/>
</route>
</camelContext>
在这种情况下,如果 secret 不存在,属性将回退到 "default" 作为值。
另外,如果您有名为 database 的 secret,您可以获取 secret 的特定字段:
{ "username": "admin", "password": "password123", "engine": "postgres", "host": "127.0.0.1", "port": "3128", "dbname": "db" }
{
"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 {{aws:database/username}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{aws:database/username}}"/>
</route>
</camelContext>
或重新使用属性作为端点的一部分。
如果 AWS Secret Manager 上不存在 secret 的特定字段,您可以指定一个默认值:
<camelContext> <route> <from uri="direct:start"/> <log message="Username is {{aws:database/username:admin}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{aws:database/username:admin}}"/>
</route>
</camelContext>
在这种情况下,如果 secret 不存在或 secret 存在,但 username 字段不是 secret 的一部分,则属性将回退到 "admin" 作为值。
目前,我们不会考虑轮转功能(如果有的话),而是需要完成的工作。
唯一的要求是将 camel-aws-secrets-manager
JAR 添加到 Camel 应用程序。
7.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
export $CAMEL_VAULT_GCP_SERVICE_ACCOUNT_KEY=file:////path/to/service.accountkey
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
您还可以在 application.properties
文件中配置凭证,例如:
camel.vault.gcp.serviceAccountKey = accessKey camel.vault.gcp.projectId = secretKey
camel.vault.gcp.serviceAccountKey = accessKey
camel.vault.gcp.projectId = secretKey
如果要使用 GCP 默认客户端实例,您需要提供以下 env 变量:
export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
您还可以在 application.properties
文件中配置凭证,例如:
camel.vault.gcp.useDefaultInstance = true camel.vault.aws.projectId = region
camel.vault.gcp.useDefaultInstance = true
camel.vault.aws.projectId = region
此时,您可以使用 gcp:
作为 {{ }}
语法中的前缀,以以下方式引用属性:
<camelContext> <route> <from uri="direct:start"/> <to uri="{{gcp:route}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{gcp:route}}"/>
</route>
</camelContext>
其中 route
是存储在 GCP Secret Manager Service 中的 secret 的名称。
如果 GCP Secret Manager 上不存在 secret,您可以指定一个默认值:
<camelContext> <route> <from uri="direct:start"/> <to uri="{{gcp:route:default}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{gcp:route:default}}"/>
</route>
</camelContext>
在这种情况下,如果 secret 不存在,属性将回退到 "default" 作为值。
另外,如果您有名为 database 的 secret,您可以获取 secret 的特定字段:
{ "username": "admin", "password": "password123", "engine": "postgres", "host": "127.0.0.1", "port": "3128", "dbname": "db" }
{
"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 {{gcp:database/username}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{gcp:database/username}}"/>
</route>
</camelContext>
或重新使用属性作为端点的一部分。
如果 GCP Secret Manager 上不存在 secret 的特定字段,您可以指定一个默认值:
<camelContext> <route> <from uri="direct:start"/> <log message="Username is {{gcp:database/username:admin}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{gcp:database/username:admin}}"/>
</route>
</camelContext>
在这种情况下,如果 secret 不存在或 secret 存在,但 username 字段不是 secret 的一部分,则属性将回退到 "admin" 作为值。
目前,我们不会考虑轮转功能(如果有的话),而是需要完成的工作。
仅有两个要求: - 向您的 Camel 应用程序添加 camel-google-secret-manager
JAR。- 提供服务帐户在 secret 管理级别执行的操作(例如,访问 secret 有效负载或作为 secret manager 服务的 admin)
7.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
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
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
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.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
此时,您可以使用以下方法引用属性:
<camelContext> <route> <from uri="direct:start"/> <to uri="{{azure:route}}"/> </route> </camelContext>
<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>
<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" }
{
"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>
<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>
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{azure:database/username:admin}}"/>
</route>
</camelContext>
在这种情况下,如果 secret 不存在或 secret 存在,但 username 字段不是 secret 的一部分,则属性将回退到 "admin" 作为值。
目前,我们不会考虑轮转功能(如果有的话),而是需要完成的工作。
唯一的要求是将 camel-azure-key-vault jar 添加到 Camel 应用程序。
7.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
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
您还可以在 application.properties
文件中配置凭证,例如:
camel.vault.hashicorp.token = token camel.vault.hashicorp.host = host camel.vault.hashicorp.port = port camel.vault.hashicorp.scheme = scheme
camel.vault.hashicorp.token = token
camel.vault.hashicorp.host = host
camel.vault.hashicorp.port = port
camel.vault.hashicorp.scheme = scheme
此时,您可以使用以下方法引用属性:
<camelContext> <route> <from uri="direct:start"/> <to uri="{{hashicorp:secret:route}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{hashicorp:secret:route}}"/>
</route>
</camelContext>
其中 route 是存储在 Hashicorp Vault 实例中的机密的名称,存储在 'secret' 引擎中。
如果 secret 不在 Hashicorp Vault 实例中,您可以指定一个默认值:
<camelContext> <route> <from uri="direct:start"/> <to uri="{{hashicorp:secret:route:default}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{hashicorp:secret:route:default}}"/>
</route>
</camelContext>
在这种情况下,如果 secret 不在 'secret' 引擎中,则属性将回退到"默认"作为值。
另外,如果您拥有一个名为 database 的 secret,则可以获取 secret 的特定字段:
{ "username": "admin", "password": "password123", "engine": "postgres", "host": "127.0.0.1", "port": "3128", "dbname": "db" }
{
"username": "admin",
"password": "password123",
"engine": "postgres",
"host": "127.0.0.1",
"port": "3128",
"dbname": "db"
}
您可以在路由中获取单个 secret 值,在 'secret' 引擎中,例如:
<camelContext> <route> <from uri="direct:start"/> <log message="Username is {{hashicorp:secret:database/username}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{hashicorp:secret:database/username}}"/>
</route>
</camelContext>
或重新使用属性作为端点的一部分。
如果 'secret' 引擎中的 Hashicorp Vault 实例中没有 secret 的特定字段,您可以指定一个默认值:
<camelContext> <route> <from uri="direct:start"/> <log message="Username is {{hashicorp:secret:database/username:admin}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{hashicorp:secret:database/username:admin}}"/>
</route>
</camelContext>
在这种情况下,如果 secret 不存在或者 secret 存在(在 'secret' 引擎中),但 username 字段不是 secret 的一部分,则属性将回退到 "admin" 作为值。
另外,还提供了为这两种方法获取 secret 的特定版本的语法,指定了字段/默认值,或仅使用 secret:
<camelContext> <route> <from uri="direct:start"/> <to uri="{{hashicorp:secret:route@2}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{hashicorp:secret:route@2}}"/>
</route>
</camelContext>
此方法将在 'secret' 引擎中返回带有版本 '2' 的 RAW 路由 secret。
<camelContext> <route> <from uri="direct:start"/> <to uri="{{hashicorp:route:default@2}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{hashicorp:route:default@2}}"/>
</route>
</camelContext>
如果 secret 不存在或版本不存在,此方法将返回带有版本 '2' 或默认值的路由 secret 值(在 'secret' 引擎中)。
<camelContext> <route> <from uri="direct:start"/> <log message="Username is {{hashicorp:secret:database/username:admin@2}}"/> </route> </camelContext>
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{hashicorp:secret:database/username:admin@2}}"/>
</route>
</camelContext>
如果 secret 不存在或者版本不存在,此方法将返回数据库 secret 的用户名字段,如果 secret 不存在,或者版本不存在(在 'secret' 引擎中)。
7.5.1.5. 在使用 AWS Secret Manager 时在 Secret Refresh 上重新载入自动 Camel 上下文
可以在 Secret Refresh 上重新加载 Camel 上下文,可以通过指定常规凭证(与 AWS Secret Manager 属性功能相同)。
使用环境变量:
export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=accessKey export $CAMEL_VAULT_AWS_REGION=region
export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=accessKey
export $CAMEL_VAULT_AWS_REGION=region
或者作为普通 Camel 主属性:
camel.vault.aws.useDefaultCredentialProvider = true camel.vault.aws.region = region
camel.vault.aws.useDefaultCredentialProvider = true
camel.vault.aws.region = region
或者,通过指定 accessKey/SecretKey 和 region,而不是使用默认的凭证供应商链。
要启用自动刷新,您需要设置其他属性:
camel.vault.aws.refreshEnabled=true camel.vault.aws.refreshPeriod=60000 camel.vault.aws.secrets=Secret camel.main.context-reload-enabled = true
camel.vault.aws.refreshEnabled=true
camel.vault.aws.refreshPeriod=60000
camel.vault.aws.secrets=Secret
camel.main.context-reload-enabled = true
其中 camel.vault.aws.refreshEnabled
将启用自动上下文重新加载,camel.vault.aws.refreshPeriod
是更新事件的两个不同检查和 camel.vault.aws.secrets
是一个正则表达式,代表我们要跟踪的 secret。
请注意,camel.vault.aws.secrets
不是强制的:如果没有指定负责检查更新事件的任务,则会考虑帐户或使用 aws:
前缀的属性。
唯一的要求是将 camel-aws-secrets-manager jar 添加到 Camel 应用程序。
7.5.1.6. 在使用带有 Eventbridge 和 AWS SQS Services 的 AWS Secret Manager 时,在 Secret Refresh 上重新载入自动 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"] } }
{
"source": ["aws.secretsmanager"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": ["secretsmanager.amazonaws.com"]
}
}
此规则将过滤与 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>\"}}}]}" }
{
"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>\"}}}]}"
}
更改 queue_arn 和 eventbridge_rule_arn 的值,使用 policy.json 名称保存文件,并使用 AWS CLI 运行以下命令
aws sqs set-queue-attributes --queue-url <queue_url> --attributes file://policy.json
aws sqs set-queue-attributes --queue-url <queue_url> --attributes file://policy.json
其中 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>
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>
其中 queue_url 是刚才创建的 Queue 的 AWS SQS Queue URL。
每当发生名为 'Secret' 的 Secret 的 PutSecretValue 事件时,信息将在 AWS SQS Queue 中排队,并在 Camel 端消耗一个上下文重新加载。
7.5.1.7. 在使用 Google Secret Manager 时在 Secret Refresh 上重新载入自动 Camel 上下文
可以在 Secret Refresh 上重新加载 Camel 上下文,可以通过指定常规凭证(与 Google Secret Manager 属性功能相同)。
使用环境变量:
export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
或者作为普通 Camel 主属性:
camel.vault.gcp.useDefaultInstance = true camel.vault.aws.projectId = projectId
camel.vault.gcp.useDefaultInstance = true
camel.vault.aws.projectId = projectId
或者指定服务帐户密钥文件的路径,而不是使用默认实例。
要启用自动刷新,您需要设置其他属性:
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
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
其中 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 服务具有权限)
7.5.1.8. 使用 Azure Key Vault 时在 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
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
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
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.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=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 应用程序。