具有计算实例管理员权限的 GCE 服务帐户
GCE Service Account with Compute Instance Admin permissions
我已经使用具有以下角色的服务帐户在 Google 计算引擎上设置了一个调用 运行 cronjobs 的计算实例:
Custom Compute Image User + Deletion rights
Compute Admin
Compute Instance Admin (beta)
Kubernetes Engine Developer
Logs Writer
Logs Viewer
Pub/Sub Editor
Source Repository Reader
Storage Admin
不幸的是,当我 ssh 进入这个 cronjob 运行ner 实例然后 运行:
sudo gcloud compute --project {REDACTED} instances create e-latest \
--zone {REDACTED} --machine-type n1-highmem-8 --subnet default \
--maintenance-policy TERMINATE \
--scopes https://www.googleapis.com/auth/cloud-platform \
--boot-disk-size 200 \
--boot-disk-type pd-standard --boot-disk-device-name e-latest \
--image {REDACTED} --image-project {REDACTED} \
--service-account NAME_OF_SERVICE_ACCOUNT \
--accelerator type=nvidia-tesla-p100,count=1 --min-cpu-platform Automatic
我收到以下错误:
The user does not have access to service account {NAME_OF_SERVICE_ACCOUNT}. User: {NAME_OF_SERVICE_ACCOUNT} . Ask a project owner to grant you the iam.serviceAccountUser role on the service account.
除了计算实例管理员之外,我还需要其他一些权限才能使用我的实例创建实例吗?
进一步说明:(1) 当我尝试不指定 --service-account
时,错误是相同的,除了我的用户无权访问的服务帐户是默认的 '51958873628-compute@developer.gserviceaccount.com'。
(2) adding/removing sudo 不会改变任何东西
创建使用服务帐户的实例需要您拥有该服务帐户的 compute.instances.setServiceAccount 权限。要使这项工作正常进行,请将 iam.serviceAccountUser 角色授予您的服务帐户(在整个项目或您希望能够用来创建实例的特定服务帐户上)。
首先找出你是谁
- 如果您使用的是 Web UI:您使用什么电子邮件地址登录?
- 如果您使用的是本地
gcloud
或 terraform
:找到包含您的 gcloud 凭据的 json 文件(通常命名与 myproject*.json
类似)并查看是否它包含电子邮件:grep client_email myproject*.json
GCP IAM 变更
- 转到https://console.cloud.google.com
- 转到 IAM
- 查找您的电子邮件地址
- 成员 -> 编辑 -> 添加另一个角色 -> 输入角色名称
Service Account User
-> 添加
(您可以使用条件缩小范围,但暂时保持简单)。
确保 NAME_OF_SERVICE_ACCOUNT 是当前项目的服务帐户。
如果您更改了项目 ID,而不更改 NAME_OF_SERVICE_ACCOUNT,那么您将遇到此错误。
这可以在 Google 控制台 -> IAM 和管理 -> IAM 上进行检查。
然后查找服务名称....-compute@developer.gserviceaccount.com 并检查开头的数字是否正确。每个项目在这个服务名称中都会有不同的数字。
我已经使用具有以下角色的服务帐户在 Google 计算引擎上设置了一个调用 运行 cronjobs 的计算实例:
Custom Compute Image User + Deletion rights
Compute Admin
Compute Instance Admin (beta)
Kubernetes Engine Developer
Logs Writer
Logs Viewer
Pub/Sub Editor
Source Repository Reader
Storage Admin
不幸的是,当我 ssh 进入这个 cronjob 运行ner 实例然后 运行:
sudo gcloud compute --project {REDACTED} instances create e-latest \
--zone {REDACTED} --machine-type n1-highmem-8 --subnet default \
--maintenance-policy TERMINATE \
--scopes https://www.googleapis.com/auth/cloud-platform \
--boot-disk-size 200 \
--boot-disk-type pd-standard --boot-disk-device-name e-latest \
--image {REDACTED} --image-project {REDACTED} \
--service-account NAME_OF_SERVICE_ACCOUNT \
--accelerator type=nvidia-tesla-p100,count=1 --min-cpu-platform Automatic
我收到以下错误:
The user does not have access to service account {NAME_OF_SERVICE_ACCOUNT}. User: {NAME_OF_SERVICE_ACCOUNT} . Ask a project owner to grant you the iam.serviceAccountUser role on the service account.
除了计算实例管理员之外,我还需要其他一些权限才能使用我的实例创建实例吗?
进一步说明:(1) 当我尝试不指定 --service-account
时,错误是相同的,除了我的用户无权访问的服务帐户是默认的 '51958873628-compute@developer.gserviceaccount.com'。
(2) adding/removing sudo 不会改变任何东西
创建使用服务帐户的实例需要您拥有该服务帐户的 compute.instances.setServiceAccount 权限。要使这项工作正常进行,请将 iam.serviceAccountUser 角色授予您的服务帐户(在整个项目或您希望能够用来创建实例的特定服务帐户上)。
首先找出你是谁
- 如果您使用的是 Web UI:您使用什么电子邮件地址登录?
- 如果您使用的是本地
gcloud
或terraform
:找到包含您的 gcloud 凭据的 json 文件(通常命名与myproject*.json
类似)并查看是否它包含电子邮件:grep client_email myproject*.json
GCP IAM 变更
- 转到https://console.cloud.google.com
- 转到 IAM
- 查找您的电子邮件地址
- 成员 -> 编辑 -> 添加另一个角色 -> 输入角色名称
Service Account User
-> 添加
(您可以使用条件缩小范围,但暂时保持简单)。
确保 NAME_OF_SERVICE_ACCOUNT 是当前项目的服务帐户。
如果您更改了项目 ID,而不更改 NAME_OF_SERVICE_ACCOUNT,那么您将遇到此错误。
这可以在 Google 控制台 -> IAM 和管理 -> IAM 上进行检查。 然后查找服务名称....-compute@developer.gserviceaccount.com 并检查开头的数字是否正确。每个项目在这个服务名称中都会有不同的数字。