一、简介
·CHDFS 提供功能全面的云 HDFS API,只需少量代码你就可以操作 CHDFS,并且云 API 允许将账户 B 的权限组绑定账户 A 的挂载点以此实现 CHDFS 的跨账户访问。
·在绑定的过程中,挂载点是主要资源,会鉴权调用方是否拥有操作挂载点 ID 的权限,而权限组 ID 不做鉴权。
二、前提条件
·账户 A 已创建好文件系统,详情请参见 创建 CHDFS。
·账户 A 已创建好 挂载点。
·账户 B 已创建好 权限组 和 权限规则。
·账户 B 的 EMR 集群配置好 CHDFS 环境。
三、操作步骤
CHDFS 提供功能全面的 云HDFS API,通过云 HDFS API 可以实现 绑定权限组列表。这篇以 Golang 代码为例,实现将账户 B 的权限组绑定账户 A 的挂载点。实行绑定动作的主体为账户 A 或拥有权限的 A 的子账户。
1. 在以下代码配置账户 A 的密钥、账户 A 的挂载点 ID、账户 B 的权限组 ID。
package mainimport ( "fmt" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112")func main() { // 实例化一个认证对象,入参需要传入腾讯云账户 secretId,secretKey,此处还需注意密钥对的保密 // 密钥可前往 https://console.cloud.tencent.com/cam/capi网站进行获取 credential := common.NewCredential( "SecretId", "SecretKey", ) // 实例化一个 client 选项,可选的,没有特殊需求可以跳过 cpf := profile.NewClientProfile() cpf.HttpProfile.Endpoint = "chdfs.tencentcloudapi.com" // 实例化要请求产品的 client 对象,clientProfile 是可选的 client, _ := chdfs.NewClient(credential, "", cpf) // 实例化一个请求对象,每个接口都会对应一个 request 对象 request := chdfs.NewAssociateAccessGroupsRequest() //账户 A 的挂载点 ID request.MountPointId = common.StringPtr("f4maxxxx-xxS3") //账户B的权限组 ID request.AccessGroupIds = common.StringPtrs([]string{ "ag-xxxxxzm" }) // 返回的 resp 是一个 AssociateAccessGroupsResponse 的实例,与请求对象对应 response, err := client.AssociateAccessGroups(request) if _, ok := err.(*errors.TencentCloudSDKError); ok { fmt.Printf("An API error has returned: %s", err) return } if err != nil { panic(err) } // 输出 json 格式的字符串回包 fmt.Printf("%s", response.ToJsonString())}
2. 运行代码后,再次查看账户 A 的挂载点,即可看到账户 B 的权限组成功绑定在本挂载点上。
3. 在账户 B 的 EMR 集群机器中通过 hadoop fs -ls 命令查看到文件列表,即表示挂载成功。账户 B 可以访问账户 A 的 CHDFS,成功实现跨账户访问 CHDFS。
若未通过云 API 执行上述绑定操作,在账户 B 的 EMR 集群中通过 hadoop fs -ls 命令则查看到访问文件列表失败,显示 Permission denied: No access rules matched 错误,账户 B 无法访问账户 A 的 CHDFS。
4.