[英]Google Cloud Datastore and service accounts: limit access permissions
[英]Permissions For Google Cloud SQL Import Using Service Accounts
我已经按照MySQL 导出指南成功导出了 MySQL 数据库。
现在,我正在尝试按照MySQL 导入指南导入 MySQL 数据库。
我已经检查了我正在使用的service_account_email
的权限,并且我已经允许Admin SQL和Admin Storage权限。
我能够在本地使用此命令成功激活我的服务帐户:
gcloud auth activate-service-account <service_account_email> --key-file=<service_account_json_file>
在我运行命令后:
gcloud sql import sql <instance> <gstorage_file> --database=<db_name> --async
我得到了这个信息:
{
"error": {
"errors": Array[1][
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}
我尝试过的其他事情
我还尝试使用我的 SQL 实例的service_account_email
,它来自:
gcloud sql instances describe <instance_name>
但是,它似乎有同样的错误。
问题
根据我收到的 REST API JSON 错误,如何使用service_account_email
“登录”,这样我就不会收到401 Error
?
问题是关于数据库实例服务帐户在创建的存储桶上写入的权限。 解决此问题的步骤
1) 转到您的 Cloud SQL Instance 并复制实例的服务帐户(Cloud SQL->{instance name}->OVERVIEW->Service account)
2) 复制服务帐户后,转到要转储的 Cloud Storage Bucket 并为该帐户设置所需的权限 (Storage->{bucket name}->permissions->add member)。
云 SQL 实例在不属于您的项目的 Google 服务帐户下运行。 您需要授予此用户对 Cloud Storage 中要导入的文件的权限。 这是一个方便的 dandy bash 片段,可以做到这一点。
SA_NAME=$(gcloud sql instances describe YOUR_DB_INSTANCE_NAME --project=YOUR_PROJECT_ID --format="value(serviceAccountEmailAddress)")
gsutil acl ch -u ${SA_NAME}:R gs://YOUR_BUCKET_NAME;
gsutil acl ch -u ${SA_NAME}:R gs://${YOUR_BUCKET_NAME}/whateverDirectory/fileToImport.sql;
第一行获取服务帐户电子邮件地址。 下一行授予此服务帐户对存储桶的读取权限。 最后一行授予服务帐户对该文件的读取权限。
在进行了一些研究之后,并根据权限错误,这些是我认为对您解决问题更有用的步骤:
为了更轻松地测试 ACL 和权限,您可以:
您可能需要向相关服务帐户授予额外的 IAM 角色,例如“roles/storage.admin”,请在此处查看更多信息。
谷歌也有一些最糟糕的错误报告。 如果您收到此错误消息,也可能是您输入的 PATH 不正确。 就我而言,它是我的存储桶目录的路径。 算了吧,我无权访问不存在的存储桶。 技术上正确但几乎没有用。
根据谷歌文档
gcloud sql instances describe INSTANCE_NAME
gsutil iam ch serviceAccount:SERVICE-ACCOUNT:objectAdmin gs://BUCKET-NAME
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.