searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

开通S3对象存储存储桶合规保留

2023-06-21 08:16:23
71
0

WORM特性

WORM特性

S3 object lock,也被称为对象存储的WORM特性:write-once-read-many。这个特性主要目的是确保object在设定的时间内或者永远不会被删除或者覆盖。其主要的应用场景就是数据保护场景,例如法规遵从。

保证数据文件“不可删除、不可篡改”,规则启用后,用户可以在Bucket中上传和读取文件(Object),但是在Object的保留时间到期之前,任何用户都不能修改、覆盖、删除处于合规保留期的对象;Object的保留时间到期后,才可以删除Object。

合规保留设置注意事项如下:

规则生效:

  • 一个Bucket支持添加一条WORM规则,WORM规则创建后,状态默认为【未启用】。用户需主动启用规则。规则启用后,规则不可禁用、不可删除,且无法缩短保护时间,只可延长保护时间。
  • 启用后的规则不可删除
  • 保留时间精确到秒,如对象A的最后更新时间为2021-7-1 12:00:00,保护周期1天,则A会在2021-7-2 12:00:01过合规保留期。

关于Bucket操作:

  • 如当前Bucket有生效的WORM规则,且有处于合规保留期内的文件,则无法通过控制台、API、SDK删除Bucket。
  • 如当前Bucket有生效的WORM规则,但没有处于合规保留期期的文件,或者Bucket为空,则可以删除Bucket,从而间接删除WORM规则。

对于对象的操作:

  • 如对象处于保护周期,则无法通过控制台、API、SDK修改、覆盖、删除对象。
  • 若设置了生命周期 - 删除文件的操作,需要等对象过了合规保留期后才可生效。

给存储桶开启合规保留

使用golang代码,开启存储桶合规保留

(1)使用ak,sk,endpoint创建S3客户端

func (cfg *ClientCfg) NewClient() (*s3.S3, error) {
	ssl := !strings.HasPrefix(cfg.Endpoint, "https://")
	cred := credentials.NewStaticCredentials(cfg.Ak, cfg.Sk, "")
	transport := &http.Transport{
		TLSClientConfig: &tls.Config{
			InsecureSkipVerify: true, //控制客户端是否验证服务器端的证书链和主机名
		},
	}
	httpClient := http.Client{Transport: transport}
	config := &aws.Config{
		DisableSSL:       aws.Bool(ssl),
		S3ForcePathStyle: aws.Bool(true),
		Region:           aws.String("default"),
		Endpoint:         aws.String(cfg.Endpoint),
		Credentials:      cred,
		HTTPClient:       &httpClient,
		//LogLevel:         aws.LogLevel(aws.LogDebugWithSigning),
	}
	sess, err := session.NewSession(config)
	if err != nil {
		return nil, err
	}
	return s3.New(sess), nil
}

(2)开启存储桶合规保留

func PutBucketRetention(s3Client *s3.S3, bucketname string, days int64) error {
	req, _ := s3Client.PutObjectLockConfigurationRequest(&s3.PutObjectLockConfigurationInput{
		Bucket: aws.String(bucketname),
		ObjectLockConfiguration: &s3.ObjectLockConfiguration{
			ObjectLockEnabled: aws.String("Enabled"),
			Rule: &s3.ObjectLockRule{
				DefaultRetention: &s3.DefaultRetention{
					Mode: aws.String("GOVERNANCE"),
					Days: aws.Int64(days),
				},
			},
		},
	})
	req.HTTPRequest.Header.Add("x-amz-bucket-object-lock-enabled", "true")
	err := req.Send()
	return err
}

(3)获取存储桶合规保留配置信息

func GetBucketRetention(s3Client *s3.S3, bucketName string) (*s3.GetObjectLockConfigurationOutput, error) {
	data, err := s3Client.GetObjectLockConfiguration(&s3.GetObjectLockConfigurationInput{
		Bucket: aws.String(bucketName),
	})
	return data, err
}
0条评论
0 / 1000
梁****彬
4文章数
1粉丝数
梁****彬
4 文章 | 1 粉丝
原创

开通S3对象存储存储桶合规保留

2023-06-21 08:16:23
71
0

WORM特性

WORM特性

S3 object lock,也被称为对象存储的WORM特性:write-once-read-many。这个特性主要目的是确保object在设定的时间内或者永远不会被删除或者覆盖。其主要的应用场景就是数据保护场景,例如法规遵从。

保证数据文件“不可删除、不可篡改”,规则启用后,用户可以在Bucket中上传和读取文件(Object),但是在Object的保留时间到期之前,任何用户都不能修改、覆盖、删除处于合规保留期的对象;Object的保留时间到期后,才可以删除Object。

合规保留设置注意事项如下:

规则生效:

  • 一个Bucket支持添加一条WORM规则,WORM规则创建后,状态默认为【未启用】。用户需主动启用规则。规则启用后,规则不可禁用、不可删除,且无法缩短保护时间,只可延长保护时间。
  • 启用后的规则不可删除
  • 保留时间精确到秒,如对象A的最后更新时间为2021-7-1 12:00:00,保护周期1天,则A会在2021-7-2 12:00:01过合规保留期。

关于Bucket操作:

  • 如当前Bucket有生效的WORM规则,且有处于合规保留期内的文件,则无法通过控制台、API、SDK删除Bucket。
  • 如当前Bucket有生效的WORM规则,但没有处于合规保留期期的文件,或者Bucket为空,则可以删除Bucket,从而间接删除WORM规则。

对于对象的操作:

  • 如对象处于保护周期,则无法通过控制台、API、SDK修改、覆盖、删除对象。
  • 若设置了生命周期 - 删除文件的操作,需要等对象过了合规保留期后才可生效。

给存储桶开启合规保留

使用golang代码,开启存储桶合规保留

(1)使用ak,sk,endpoint创建S3客户端

func (cfg *ClientCfg) NewClient() (*s3.S3, error) {
	ssl := !strings.HasPrefix(cfg.Endpoint, "https://")
	cred := credentials.NewStaticCredentials(cfg.Ak, cfg.Sk, "")
	transport := &http.Transport{
		TLSClientConfig: &tls.Config{
			InsecureSkipVerify: true, //控制客户端是否验证服务器端的证书链和主机名
		},
	}
	httpClient := http.Client{Transport: transport}
	config := &aws.Config{
		DisableSSL:       aws.Bool(ssl),
		S3ForcePathStyle: aws.Bool(true),
		Region:           aws.String("default"),
		Endpoint:         aws.String(cfg.Endpoint),
		Credentials:      cred,
		HTTPClient:       &httpClient,
		//LogLevel:         aws.LogLevel(aws.LogDebugWithSigning),
	}
	sess, err := session.NewSession(config)
	if err != nil {
		return nil, err
	}
	return s3.New(sess), nil
}

(2)开启存储桶合规保留

func PutBucketRetention(s3Client *s3.S3, bucketname string, days int64) error {
	req, _ := s3Client.PutObjectLockConfigurationRequest(&s3.PutObjectLockConfigurationInput{
		Bucket: aws.String(bucketname),
		ObjectLockConfiguration: &s3.ObjectLockConfiguration{
			ObjectLockEnabled: aws.String("Enabled"),
			Rule: &s3.ObjectLockRule{
				DefaultRetention: &s3.DefaultRetention{
					Mode: aws.String("GOVERNANCE"),
					Days: aws.Int64(days),
				},
			},
		},
	})
	req.HTTPRequest.Header.Add("x-amz-bucket-object-lock-enabled", "true")
	err := req.Send()
	return err
}

(3)获取存储桶合规保留配置信息

func GetBucketRetention(s3Client *s3.S3, bucketName string) (*s3.GetObjectLockConfigurationOutput, error) {
	data, err := s3Client.GetObjectLockConfiguration(&s3.GetObjectLockConfigurationInput{
		Bucket: aws.String(bucketName),
	})
	return data, err
}
文章来自个人专栏
视频监控存储
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0