密钥管理#
NVIDIA 云函数 (NVCF) 允许您配置密钥来管理容器在运行时需要的敏感数据。密钥可以在函数创建期间指定,或者在创建时已指定的情况下进行更新。密钥值可以是 UI 中的简单字符串,也可以是通过 API 的 JSON 对象。
在函数创建期间添加密钥#
在创建新函数时,您可以指定容器将使用的密钥。这可以通过 NVCF UI 或 API 完成。每个函数的所有密钥的总最大大小为 8KB。如果证书被指定为密钥,则它们必须是 base64 编码的。
使用 UI#
导航到函数。
点击“操作”下右侧的三个点,然后选择管理密钥。
在“密钥”部分,输入每个密钥的键和值
键:输入密钥的名称。
值:输入密钥的值。
点击添加密钥以包含其他密钥。
完成函数配置的其余部分并保存。
注意
目前,密钥值在 UI 中只能是简单字符串。在 UI 中目前无法将 JSON 对象指定为密钥值。
使用 API#
在使用 API 创建函数时,您可以指定具有 JSON 值的密钥。
POST /v2/nvcf/function
Authorization: Bearer <ssa-jwt> with register_function scope
Content-Type: application/json
{
"name": "secrets",
"inferenceUrl": "/test",
"inferencePort": 8000,
"containerImage": "nvcr.io/your-repo/secret-sample-container:1.0.0",
"health": {
"protocol": "HTTP",
"uri": "/health",
"port": 8000,
"timeout": "PT10S",
"expectedStatusCode": 200
},
"secrets": [
{
"name": "AWS_ACCESS_KEY_ID",
"value": "root-key-id"
},
{
"name": "AWS_SECRET_ACCESS_KEY",
"value": "root-access-key"
},
{
"name": "testing.site.com",
"value": {
"AWS_REGION": "us-west-2",
"AWS_BUCKET": "content",
"AWS_ACCESS_KEY_ID": "content-key-id",
"AWS_SECRET_ACCESS_KEY": "content-access-key",
"AWS_SESSION_TOKEN": "content-session-token"
}
},
{
"name": "test.s3.us-west-2.amazonaws.com",
"value": {
"AWS_ACCESS_KEY_ID": "s3.us-west-2-key-id",
"AWS_SECRET_ACCESS_KEY": "s3.us-west-2-access-key"
}
}
]
}
管理现有函数的密钥#
现有函数的密钥可以通过 NVCF UI 或 API 进行管理。根据函数的状态,允许不同的操作。
函数状态和密钥管理规则#
非活动函数(无论是否有现有密钥):
添加和编辑密钥。
具有现有密钥的活动函数:
仅编辑密钥。
处于“部署中”或“错误”状态的函数,或没有现有密钥的活动函数:
不允许密钥管理。
使用 UI#
要管理现有函数的密钥
导航到函数的详细信息页面。
点击“操作”并选择“管理密钥”。
取决于函数的状态
如果函数是非活动或具有现有密钥的活动状态,您可以添加或编辑密钥
键:输入密钥的名称。
值:输入密钥的值。
点击添加密钥以包含其他密钥。
点击保存密钥以保存更改。
如果函数是没有现有密钥的活动状态,UI 将显示以下消息
注意
没有密钥可管理
所选函数没有密钥可管理。
要添加密钥,请首先停止此函数版本的活动部署。
如果需要,点击取消退出而不保存更改。
使用 API#
要更新现有函数的密钥,请使用以下 API 调用
PUT /v2/nvcf/secrets/functions/{functionId}/versions/{functionVersionId}
Authorization: Bearer <ssa-jwt> with update_secrets scope
Content-Type: application/json
{
"secrets": [
{
"name": "s3.eu-north-1.amazonaws.com",
"value": {
"AWS_ACCESS_KEY_ID": "s3.eu-north-1-key-id",
"AWS_SECRET_ACCESS_KEY": "s3.eu-north-1-access-key"
}
},
{
"name": "example.com",
"value": {
"API_KEY": "example-api-key",
"API_SECRET": "example-api-secret"
}
}
// Additional secrets can be added here
]
}
注意
通过 API 更新密钥时,您可以指定 JSON 对象作为密钥值。
在 API 中列出密钥#
在列出函数时,您只会看到密钥名称,而不会看到密钥值。密钥值是安全的,不会显示。
在推理容器中使用密钥#
注意
推理容器从 /var/secrets/secrets.json 读取密钥以向外部系统进行身份验证。但是,inotify API 无法监视此文件的更改。当通过 UI 或 API 更新或添加密钥时,/var/secrets/secrets.json 会自动更新。请确保推理容器定期检查此文件并重新加载它以使用最新的密钥。
基于容器的函数中的密钥#
密钥将挂载到容器中的 /var/secrets/secrets.json。这是一个示例文件
{
"secret-key-1": "value-1",
"secret-key-2": "value-2",
"secret-key-3": {
"nested-things-1": "test"
}
}
Helm Chart 函数中的密钥#
密钥将挂载到 Helm Chart 中所有容器的 /var/secrets/secrets.json。
注意事项和限制#
UI 中的密钥值 - 目前,密钥值在 UI 中只能是简单字符串。
每个函数的所有密钥的总最大大小为 8KB。
如果证书被指定为密钥,则它们必须是 base64 编码的。