接入点级别阻止公共访问

本文介绍如何使用Go SDK V2管理OSS接入点级别阻止公共访问的功能。

注意事项

  • 本文示例代码以华东1(杭州)的地域IDcn-hangzhou为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的RegionEndpoint的对应关系,请参见OSS地域和访问域名

  • 本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证

示例代码

为接入点开启阻止公共访问

您可以使用以下代码开启接入点阻止公共访问。

package main

import (
	"context" 
	"flag"    
	"log"    

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"           // 阿里云OSS服务的SDK包
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" // 处理认证信息的包
)

var (
	region     string // 定义一个变量来保存从命令行获取的区域(Region)信息
	bucketName string // 定义一个变量来保存从命令行获取的存储桶名称
)
 
func init() {
	// 设置命令行参数来指定region,默认为空字符串
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// 设置命令行参数来指定bucket名称,默认为空字符串
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse() // 解析命令行参数

	// 定义接入点名称,这里硬编码为 "access point name"。在实际应用中,这个值应该根据实际情况设置或通过命令行参数传递。
	var accessPointName = "access point name"

	// 检查是否提供了存储桶名称,如果没有提供,则输出默认参数并退出程序
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required") // 记录致命错误并终止程序
	}

	// 检查是否提供了区域信息,如果没有提供,则输出默认参数并退出程序
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required") // 记录致命错误并终止程序
	}

	// 创建配置对象,并使用环境变量作为凭证提供者和指定的区域
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 使用配置创建一个新的OSS客户端实例

	// 构建一个PutAccessPointPublicAccessBlock请求,用于设置特定接入点的阻止公共访问配置
	request := &oss.PutAccessPointPublicAccessBlockRequest{
		Bucket:          oss.Ptr(bucketName), // 指定要操作的存储桶名称
		AccessPointName: oss.Ptr(accessPointName), // 指定要操作的接入点名称
		PublicAccessBlockConfiguration: &oss.PublicAccessBlockConfiguration{
			oss.Ptr(true), // 启用阻止公共访问配置
		},
	}
	putResult, err := client.PutAccessPointPublicAccessBlock(context.TODO(), request) // 发送请求以设置接入点的阻止公共访问
	if err != nil {
		log.Fatalf("failed to put access point public access block %v", err) // 如果有错误发生,记录错误信息并终止程序
	}

	log.Printf("put access point public access block result:%#v\n", putResult) // 打印设置接入点阻止公共访问的结果
}

获取指定接入点的阻止公共访问配置信息

您可以使用以下代码获取接入点阻止公共访问的配置信息。

package main

import (
	"context" 
	"flag"   
	"log"   

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"           // 阿里云OSS服务的SDK包
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" // 处理认证信息的包
)

var (
	region     string // 定义一个变量来保存从命令行获取的区域(Region)信息
	bucketName string // 定义一个变量来保存从命令行获取的存储桶名称
)


func init() {
	// 设置命令行参数来指定region,默认为空字符串
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// 设置命令行参数来指定bucket名称,默认为空字符串
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse() // 解析命令行参数

	// 定义接入点名称。这里硬编码为 "access point name"。实际应用中应根据需要设置或通过其他方式提供。
	var accessPointName = "access point name"

	// 检查是否提供了存储桶名称,如果没有提供,则输出默认参数并退出程序
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required") // 记录致命错误并终止程序
	}

	// 检查是否提供了区域信息,如果没有提供,则输出默认参数并退出程序
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required") // 记录致命错误并终止程序
	}

	// 创建配置对象,并使用环境变量作为凭证提供者和指定的区域
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 使用配置创建一个新的OSS客户端实例

	// 构建一个GetAccessPointPublicAccessBlock请求,用于获取特定接入点的阻止公共访问设置
	request := &oss.GetAccessPointPublicAccessBlockRequest{
		Bucket:          oss.Ptr(bucketName), // 指定要查询的存储桶名称
		AccessPointName: oss.Ptr(accessPointName), // 指定要查询的接入点名称
	}
	getResult, err := client.GetAccessPointPublicAccessBlock(context.TODO(), request) // 执行请求以获取接入点的阻止公共访问配置
	if err != nil {
		log.Fatalf("failed to get access point public access block %v", err) // 如果有错误发生,记录错误信息并终止程序
	}

	log.Printf("get access point public access block result:%#v\n", getResult) // 打印获取到的接入点阻止公共访问结果
}

删除指定接入点的阻止公共访问配置信息

您可以使用以下代码删除接入点阻止公共访问的配置信息。

package main

import (
	"context" // 用于管理带有截止时间、取消信号等功能的上下文
	"flag"    // 用于解析命令行参数
	"log"     // 用于打印日志信息

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"           // 阿里云OSS服务的SDK包
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" // 处理认证信息的包
)

var (
	region     string // 定义一个变量来保存从命令行获取的区域(Region)信息
	bucketName string // 定义一个变量来保存从命令行获取的存储桶名称
)

// init函数在main函数之前执行,用来初始化程序。
func init() {
	// 设置命令行参数来指定region,默认为空字符串
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// 设置命令行参数来指定bucket名称,默认为空字符串
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

// main是程序的入口点。
func main() {
	flag.Parse() // 解析命令行参数

	// 定义访问点名称。这里硬编码为 "access point name"。实际应用中应根据需要设置或通过其他方式提供。
	var accessPointName = "access point name"

	// 检查是否提供了存储桶名称,如果没有提供,则输出默认参数并退出程序
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required") // 记录致命错误并终止程序
	}

	// 检查是否提供了区域信息,如果没有提供,则输出默认参数并退出程序
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required") // 记录致命错误并终止程序
	}

	// 创建配置对象,并使用环境变量作为凭证提供者和指定的区域
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 使用配置创建一个新的OSS客户端实例

	// 构建一个DeleteAccessPointPublicAccessBlock请求,用于删除特定访问点的公共访问阻断设置
	request := &oss.DeleteAccessPointPublicAccessBlockRequest{
		Bucket:          oss.Ptr(bucketName), // 指定要操作的存储桶名称
		AccessPointName: oss.Ptr(accessPointName), // 指定要操作的访问点名称
	}
	deleteResult, err := client.DeleteAccessPointPublicAccessBlock(context.TODO(), request) // 发送请求以删除访问点的公共访问阻断设置
	if err != nil {
		log.Fatalf("failed to delete access point public access block %v", err) // 如果有错误发生,记录错误信息并终止程序
	}

	log.Printf("delete access point public access block result:%#v\n", deleteResult) // 打印删除访问点公共访问阻断的结果
}

相关文档