Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

设置数据代理组以在NetApp Copy and Sync 中使用外部 HashiCorp Vault

贡献者 amgrissino

当您创建需要 Amazon S3、Azure 或 Google Cloud 凭据的同步关系时,您需要通过NetApp Copy and Sync 用户界面或 API 指定这些凭据。另一种方法是设置数据代理组以直接从外部 HashiCorp Vault 访问凭据(或_秘密_)。

此功能通过复制和同步 API 支持,同步关系需要 Amazon S3、Azure 或 Google Cloud 凭证。

一个准备保管库

通过设置 URL 来准备保险库以向数据代理组提供凭据。保险库中秘密的 URL 必须以 Creds 结尾。

两个准备数据经纪人组

通过修改组中每个数据代理的本地配置文件,准备数据代理组从外部保险库获取凭据。

三使用 API 创建同步关系

现在一切都已设置完毕,您可以发送 API 调用来创建使用您的保险库获取机密的同步关系。

准备保管库

您需要提供复制和同步到您的保险库中的秘密的 URL。通过设置这些 URL 来准备保管库。您需要为您计划创建的同步关系中的每个源和目标设置凭据的 URL。

URL 必须按如下方式设置:

/<path>/<requestid>/<endpoint-protocol>Creds

路径

秘密的前缀路径。这可以是任何对您来说唯一的值。

请求 ID

您需要生成的请求 ID。创建同步关系时,您需要在 API POST 请求的其中一个标头中提供 ID。

端点协议

定义如下的协议之一 "在 post relationship v2 文档中":S3、AZURE 或 GCP(每个都必须大写)。

信用

URL 必须以 Creds 结尾。

示例

以下示例显示了机密的 URL。

源凭证的完整 URL 和路径示例

\ http://example.vault.com:8200/my-path/all-secrets/hb312vdasr2/S3Creds

正如您在示例中看到的,前缀路径是 /my-path/all-secrets/,请求 ID 是 hb312vdasr2,源端点是 S3。

目标凭证的完整 URL 和路径示例

\ http://example.vault.com:8200/my-path/all-secrets/n32hcbnejk2/AZURECreds

前缀路径为 /my-path/all-secrets/,请求 ID 为 n32hcbnejk2,目标端点为 Azure。

准备数据经纪人组

通过修改组中每个数据代理的本地配置文件,准备数据代理组从外部保险库获取凭据。

步骤
  1. 通过 SSH 连接到组中的数据代理。

  2. 编辑位于 /opt/netapp/databroker/config 中的 local.json 文件。

  3. 将启用设置为 true 并设置 external-integrations.hashicorp 下的配置参数字段如下:

    启用
    • 有效值:true/false

    • 类型:布尔值

    • 默认值:false

    • 正确:数据经纪人从您自己的外部 HashiCorp Vault 获取机密

    • 错误:数据代理将凭证存储在其本地保管库中

    网址
    • 类型:字符串

    • 值:外部保管库的 URL

    path
    • 类型:字符串

    • 值:使用您的凭证作为密钥的前缀路径

    拒绝未经授权
    • 确定是否希望数据代理拒绝未经授权的外部保管库

    • 类型:布尔值

    • 默认值:false

    授权方法
    • 数据代理应使用的身份验证方法,用于从外部保管库访问凭证

    • 类型:字符串

    • 有效值:“aws-iam” / “role-app” / “gcp-iam”

    角色名称
    • 类型:字符串

    • 您的角色名称(如果您使用 aws-iam 或 gcp-iam)

    Secretid 和 rootid
    • 类型:字符串(如果您使用 app-role)

    命名空间
    • 类型:字符串

    • 您的命名空间(如果需要,请使用 X-Vault-Namespace 标头)

  4. 对组中的任何其他数据代理重复这些步骤。

aws-role 身份验证示例

{
          “external-integrations”: {
                  “hashicorp”: {
                         “enabled”: true,
                         “url”: “https://example.vault.com:8200”,
                         “path”: ““my-path/all-secrets”,
                         “reject-unauthorized”: false,
                         “auth-method”: “aws-role”,
                         “aws-role”: {
                               “role-name”: “my-role”
                         }
                }
       }
}

gcp-iam 身份验证示例

{
"external-integrations": {
    "hashicorp": {
      "enabled": true,
      "url": http://ip-10-20-30-55.ec2.internal:8200,
      "path": "v1/secret",
      "namespace": "",
      "reject-unauthorized": true,
      "auth-method": "gcp-iam",
      "aws-iam": {
        "role-name": ""
      },
      "app-role": {
        "root_id": "",
        "secret_id": ""
      },
"gcp-iam": {
          "role-name": "my-iam-role"
      }
    }
  }
}

使用 gcp-iam 身份验证时设置权限

如果您使用 gcp-iam 身份验证方法,则数据代理必须具有以下 GCP 权限:

- iam.serviceAccounts.signJwt

使用保管库中的机密创建新的同步关系

现在一切都已设置完毕,您可以发送 API 调用来创建使用您的保险库获取机密的同步关系。

使用复制和同步 REST API 发布关系。

Headers:
Authorization: Bearer <user-token>
Content-Type: application/json
x-account-id: <accountid>
x-netapp-external-request-id-src: request ID as part of path for source credentials
x-netapp-external-request-id-trg: request ID as part of path for target credentials
Body: post relationship v2 body

示例

POST 请求示例:

url: https://api.cloudsync.netapp.com/api/relationships-v2
headers:
"x-account-id": "CS-SasdW"
"x-netapp-external-request-id-src": "hb312vdasr2"
"Content-Type": "application/json"
"Authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik…"
Body:
{
"dataBrokerId": "5e6e111d578dtyuu1555sa60",
"source": {
        "protocol": "s3",
        "s3": {
                "provider": "sgws",
                "host": "1.1.1.1",
                "port": "443",
                "bucket": "my-source"
     },
"target": {
        "protocol": "s3",
        "s3": {
                "bucket": "my-target-bucket"
        }
    }
}