首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复:导出中的403错误

如何修复:导出中的403错误
EN

Stack Overflow用户
提问于 2019-05-09 05:50:06
回答 1查看 1.9K关注 0票数 1

我正在尝试将一个Cloud实例的完整SQL转储导出到Google,这样我们就可以使用google-api-go-client (https://github.com/googleapis/google-api-go-client)进行更频繁的备份。

无论我配置什么,我都会得到这个错误:panic: googleapi: Error 403: The client is not authorized to make this request., notAuthorized来自sqladminService.Instances.Export

我有一个具有以下权限的服务帐户:

  • 云SQL管理
  • 仓储管理
  • 计算存储管理(用于其他内容)

我要导出的桶从Storage角色继承权限。

代码:./k8s/sql.go

代码语言:javascript
复制
package gcp

import (
    "fmt"
    "time"

    "golang.org/x/net/context"
    "golang.org/x/oauth2/google"
    sqladmin "google.golang.org/api/sqladmin/v1beta4"
)

type SQLService interface {
    Test(project string) error
}

type sqlService struct {
    context         context.Context
    sqladminService *sqladmin.Service
}

func NewSQLService(serviceAccountJSON []byte) (SQLService, error) {
    context := context.Background()

    jwtCfg, err := google.JWTConfigFromJSON(serviceAccountJSON, sqladmin.SqlserviceAdminScope, sqladmin.CloudPlatformScope)
    if err != nil {
        return sqlService{}, err
    }
    httpClient := jwtCfg.Client(context)

    sqladminService, err := sqladmin.New(httpClient)
    if err != nil {
        return sqlService{}, err
    }

    return sqlService{
        context:         context,
        sqladminService: sqladminService,
    }, nil
}

func (s sqlService) Test(project string) error {
    instance := "REGION:INSTANCE_NAME

    storageURI := fmt.Sprintf("gs://BUCKET/FILE-%s.sql.gz", time.Now().Format(time.RFC3339))
    databases := []string{"DATABASE"}

    req := &sqladmin.InstancesExportRequest{
        ExportContext: &sqladmin.ExportContext{
            Uri:       storageURI,
            Databases: databases,
        },
    }

    _resp, err := s.sqladminService.Instances.Export(project, instance, req).Context(s.context).Do()
    if err != nil {
        return err
    }

    return nil
}

测试代码:

代码语言:javascript
复制
func Test(cfg config.Config) {
    sql, err := gcp.NewSQLService(cfg.GCPServiceAccountEncodedCreds)
    if err != nil {
        panic(err)
    }

    err = sql.Test(cfg.Project)
    if err != nil {
        panic(err)
    }
}

如能提供任何帮助,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-09 20:23:39

InstancesExport的文档显示,所需的参数是"projectId“和"instanceId”。您已经将instance声明为"REGION:INSTANCE_NAME",但您真正想要的是"INSTANCE_NAME"

您无权查看该实例(因为在本例中,它不存在)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56052944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档