You need to enable JavaScript to run this app.
导航
安全管理
最近更新时间:2024.09.14 11:16:49首次发布时间:2023.12.28 21:21:52

阅读本文,您可以获取 Go SDK 安全管理的接口调用示例,实现快速开发。

说明

本文的调用示例包含接口的部分参数。由于参数间可能存在互斥关系,在调用时,请您参考注释,进行调整。

调用说明

  • 本文提供的接口调用示例均通过 AK 和 SK 初始化实例。
  • 接口的参数说明和错误码等信息可通过接口文档或打开 API Explorer文档说明页签查看。

前提条件

调用接口前,请先完成 Go SDK 的安装及初始化操作。

调用示例

本节为您介绍安全管理相关接口的功能和调用示例。

添加或更新推拉流鉴权

您可以调用 UpdateAuthKey 接口添加或更新推拉流鉴权。详细的参数说明可参见 UpdateAuthKey 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func StringPtrs(vals []string) []*string {
	ptrs := make([]*string, len(vals))
	for i := 0; i < len(vals); i++ {
		ptrs[i] = &vals[i]
	}
	return ptrs
}

func BoolPtr(v bool) *bool {
	return &v
}

func Int32Ptr(v int32) *int32 {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.UpdateAuthKeyBody{
		// 应用名称,取值与直播流地址中 AppName 字段取值相同,默认为空,表示所有应用名称。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
		App: StringPtr(`live`),
		// 直播流使用的域名。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看直播流使用的域名。
		// note:
		// 参数 Domain 和 Vhost 传且仅传一个。
		Domain: StringPtr(`push.example.com`),
		// 是否开启 URL 地址鉴权,取值及含义如下所示。
		// <li> false:关闭(默认值); </li>
		// <li> true:开启。 </li>
		PushPullEnable: BoolPtr(true),
		// 鉴权场景类型,取值及含义如下所示。
		// <li> push:推流鉴权; </li>
		// <li> pull:拉流鉴权。 </li>
		SceneType: `push`,
		// 鉴权生效时长,单位为秒,默认值为 604800,取值范围为 [60,2592000],超出生效时长后 URL 无法使用。
		ValidDuration: Int32Ptr(60),
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看需要查询的直播流使用的域名所属的域名空间。
		// note:
		// 参数 Domain 和 Vhost 传且仅传一个。
		Vhost: StringPtr(`push.example.com`),
	}

	// 鉴权配置参数,包括鉴权密钥、鉴权字段、加密字符串生成算法等。
	AuthDetailList1 := live.UpdateAuthKeyBodyAuthDetailListItem{
		// 自定义鉴权密钥,支持由大小写字母(A - Z、a - z)和数字(0 - 9)组成,长度为 1 到 100 个字符。
		SecretKey: `1*****1`,
		// 加密字符串生成算法,取值及含义如下所示。
		// <li> md5:标准 MD5 算法; </li>
		// <li> md5_custom:自定义 MD5 算法。 </li>
		EncryptionAlgorithm: `md5`,
	}

	// 鉴权参数字段名称,当前开启域名 URL 地址鉴权时,会通过对地址中的加密字符串和过期时间校验实现 URL 鉴权。默认加密字符串信息的 key 值为 volcSecret,过期时间信息的 key 值为 volcTime。
	// 默认情况下表示{"volcSecret":"volcSecret","volcTime":"volcTime"},您可以自定义参数名,例如,
	// {"volcSecret":"sign","volcTime":"expire"}
	// 。
	AuthField := map[string]*string{
		`volcSecret`: StringPtr(`sign`),
		`volcTime`:   StringPtr(`expire`),
	}

	AuthDetailList1.AuthField = AuthField

	// 生成加密字符串所需字段。对称加密算法	EncryptionAlgorithm,加密字段存在差异。
	// <li> 当加密算法使用 md5 时:默认加密字段为 ["AppName","StreamName","key","expireTime"],且不支持修改;  </li>
	// <li> 当加密算法使用 md5_custom 时:默认无加密字段,但推荐至少包含 key	和 volcTime。同时您还可以自定义	Domain、AppName、StreamName 等字段。	例如,选择	key、volcTime	和	Domain	作为加密字段,则取值为	["key","volcTime","Domain"]。 </li>
	EncryptField := []string{"key", "volcTime", "Domain"}

	AuthDetailList1.EncryptField = StringPtrs(EncryptField)

	body.AuthDetailList = append(body.AuthDetailList, AuthDetailList1)

	resp, err := service.UpdateAuthKey(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

查询推拉流鉴权

您可以调用 DescribeAuth 接口查询推拉流鉴权。详细的参数说明可参见 DescribeAuth 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.DescribeAuthBody{
		// 应用名称,取值与直播流地址中 AppName 字段取值相同,默认为空,表示所有应用名称。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
		App: StringPtr(`live`),
		// 直播流使用的域名。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看待配置鉴权的推拉流域名。
		// note:
		// 参数 Domain 和 Vhost 传且仅传一个。
		Domain: StringPtr(`push.example.com`),
		// 鉴权场景类型,取值及含义如下所示。
		// <li> push:推流鉴权; </li>
		// <li> pull:拉流鉴权。 </li>
		SceneType: `push`,
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看需要查询的直播流使用的域名所属的域名空间。
		// note:
		// 参数 Domain 和 Vhost 传且仅传一个。
		Vhost: StringPtr(`push.example.com`),
	}

	resp, err := service.DescribeAuth(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

添加或更新 Referer 黑白名单

您可以调用 UpdateReferer 接口添加或更新 Referer 黑白名单。详细的参数说明可参见 UpdateReferer 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func Int32Ptr(v int32) *int32 {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.UpdateRefererBody{
		// 应用名称,取值与直播流地址中 AppName 字段取值相同,默认为空,表示所有应用名称。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
		// note:
		// 参数 Domain 和 App 传且仅传一个。
		App: StringPtr(`live`),
		// 拉流域名,您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看直播流使用的拉流域名。
		// note:
		// 参数 Domain 和 App 传且仅传一个。
		Domain: StringPtr(`push.example.com`),
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看需要查询的直播流使用的域名所属的域名空间。
		Vhost: `push.example.com`,
	}

	// Referer 防盗链规则列表。
	// note:
	// <li> 同一个 Vhost 下,默认支持配置不超过 100 个 Referer 规则,如需提升限额请[创建工单](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)获取技术支持; </li>
	// <li> 单次请求最多支持配置 100 个 Referer 规则。 </li>
	RefererInfoList1 := live.UpdateRefererBodyRefererInfoListItem{
		// 用于标识 referer 防盗链的关键词默认取值为 referer。
		Key: `referer`,
		// Referer 字段规则的匹配优先级,默认为 0,取值范围为 [0,100],数值越大,优先级越高。如果优先级相同,则越早加入列表的域名优先级越高。
		Priority: Int32Ptr(80),
		// Referer 字段规则类型,取值即含义如下所示。
		// <li> deny:拒绝,即黑名单; </li>
		// <li> allow:通过,即白名单。 </li>
		Type: `deny`,
		// Referer 字段规则,即设置的黑名单或白名单的域名,最大长度限制 300 个字符。
		Value: StringPtr(`live.example1.net`),
	}

	body.RefererInfoList = append(body.RefererInfoList, RefererInfoList1)

	resp, err := service.UpdateReferer(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

查询 Referer 黑白名单

您可以调用 DescribeReferer 接口查询 Referer 黑白名单。详细的参数说明可参见 DescribeReferer 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.DescribeRefererBody{
		// 应用名称,取值与直播流地址中 AppName 字段取值相同,默认为空,表示所有应用名称。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
		// note:
		// 参数 Domain 和 App 至少传一个。
		App: StringPtr(`live`),
		// 拉流域名,您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看直播流使用的拉流域名。
		// note:
		// <li> 参数 Domain 和 Vhost 传且仅传一个。 </li>
		// <li> 参数 Domain 和 App 至少传一个。 </li>
		Domain: StringPtr(`push.example.com`),
		// 域名空间,即直播流地址的域名(Domain)所属的域名空间(Vhost)。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看拉流域名所属的域名空间。
		// note:
		// 参数 Domain 和 Vhost 传且仅传一个。
		Vhost: StringPtr(`push.example.com`),
	}

	resp, err := service.DescribeReferer(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

删除 Referer 黑白名单

您可以调用 DeleteReferer 接口删除 Referer 黑白名单。详细的参数说明可参见 DeleteReferer 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.DeleteRefererBody{
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,获取需要配置 Referer 的拉流域名所属的域名空间。
		Vhost: `push.example.com`,
		// 拉流域名。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,获取需要配置 Referer 的拉流域名。
		// note:
		// <li> 如创建时传了 Domain,删除时需要传该参数; </li>
		// <li> 如创建时未传 Domain,删除时不传该参数。 </li>
		Domain: StringPtr(`push.example.com`),
		// 应用名称,取值与直播流地址中 AppName 字段取值相同,默认为空,表示所有应用名称。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
		// note:
		// <li> 如创建时传了 App,删除时需要传该参数; </li>
		// <li> 如创建时未传 App,删除时不传该参数。 </li>
		App: StringPtr(`live`),
	}

	resp, err := service.DeleteReferer(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

创建或更新 IP 访问限制

您可以调用 UpdateIPAccessRule 接口创建或更新 IP 访问限制。详细的参数说明可参见 UpdateIPAccessRule 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.UpdateIPAccessRuleBody{
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,获取需要配置 IP 访问限制的域名所属的域名空间。
		Vhost: `push.example.com`,
		// 推流域名或拉流域名,您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,获取需要配置 IP 访问限制的域名。
		Domain: `push.example.com`,
	}

	// IP 访问限制规则。
	IPAccessRule := live.UpdateIPAccessRuleBodyIPAccessRule{
		// IP 访问限制的类型,取值及含义如下所示。
		// <li> allow: 白名单; </li>
		// <li> deny: 黑名单。 </li>
		Type: `deny`,
		// 是否开启当前限制,取值及含义如下所示。
		// <li> true: 开启; </li>
		// <li> false: 关闭。 </li>
		Enable: true,
	}

	// 名单中的 IP 信息。
	IPList := []string{"1.1.1.2", "192.168.0.1/24"}

	IPAccessRule.IPList = IPList

	body.IPAccessRule = IPAccessRule

	resp, err := service.UpdateIPAccessRule(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

查询 IP 访问限制

您可以调用 DescribeIPAccessRule 接口查询 IP 访问限制。详细的参数说明可参见 DescribeIPAccessRule 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.DescribeIPAccessRuleBody{
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,获取需要配置 IP 访问限制的域名所属的域名空间。
		Vhost: `push.example.com`,
		// 推流域名或拉流域名,您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,获取需要查询 IP 访问限制的域名。
		Domain: `push.example.com`,
	}

	resp, err := service.DescribeIPAccessRule(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

删除 IP 访问限制

您可以调用 DeleteIPAccessRule 接口删除 IP 访问限制。详细的参数说明可参见 DeleteIPAccessRule 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.DeleteIPAccessRuleBody{
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,获取需要删除 IP 访问限制的域名所属的域名空间。
		Vhost: `push.example.com`,
		// 推流域名或拉流域名,您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,获取需要删除 IP 访问限制的域名。
		Domain: `push.example.com`,
	}

	resp, err := service.DeleteIPAccessRule(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}