密钥管理#

NVIDIA 云函数 (NVCF) 允许您配置密钥来管理容器在运行时需要的敏感数据。密钥可以在函数创建期间指定,或者在创建时已指定的情况下进行更新。密钥值可以是 UI 中的简单字符串,也可以是通过 API 的 JSON 对象。

在函数创建期间添加密钥#

在创建新函数时,您可以指定容器将使用的密钥。这可以通过 NVCF UI 或 API 完成。每个函数的所有密钥的总最大大小为 8KB。如果证书被指定为密钥,则它们必须是 base64 编码的。

使用 UI#

  1. 导航到函数。

  2. 点击“操作”下右侧的三个点,然后选择管理密钥

  3. 在“密钥”部分,输入每个密钥的键和值

    1. :输入密钥的名称。

    2. :输入密钥的值。

  4. 点击添加密钥以包含其他密钥。

  5. 完成函数配置的其余部分并保存。

注意

目前,密钥值在 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#

要管理现有函数的密钥

  1. 导航到函数的详细信息页面。

  2. 点击“操作”并选择“管理密钥”。

  3. 取决于函数的状态

    1. 如果函数是非活动具有现有密钥的活动状态,您可以添加或编辑密钥

      1. :输入密钥的名称。

      2. :输入密钥的值。

      3. 点击添加密钥以包含其他密钥。

      4. 点击保存密钥以保存更改。

  4. 如果函数是没有现有密钥的活动状态,UI 将显示以下消息

    注意

    没有密钥可管理

    所选函数没有密钥可管理。

    要添加密钥,请首先停止此函数版本的活动部署。

  5. 如果需要,点击取消退出而不保存更改。

使用 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 编码的。