我正在创建ansible剧本来配置GCP中的VM。我正在使用gcp_compute插件来建立一个动态的库存。使用带有角色roles\editor的服务帐户与google进行身份验证。执行时,剧本会失败,并出现以下错误。
[WARNING]: * Failed to parse gcp.yml with gcp_compute plugin: [{'message': "Required 'compute.instances.list' permission for 'projects/project-dev-295204'", 'domain':
'global', 'reason': 'forbidden'}]
[WARNING]: gcp.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available根据警告消息,服务帐户似乎没有必要的权限来生成生成清单所需的运行VM实例列表,但是服务帐户有角色editor附加到它,并且该角色具有编辑所需的所有权限,列出了GCP中的大部分资源。
ansible.cfg
[defaults]
roles_path = roles
inventory = gcp.yml
remote_user = ansible
host_key_checking = False
private_key_file = $GOOGLE_SSH_KEY
[inventory]
enable_plugins = gcp_computegcp.yml
plugin: gcp_compute
projects:
- project-dev-295204
auth_kind: serviceaccount
service_account_file: $GOOGLE_SA
keyed_groups:
- key: labels
prefix: label
- key: zone
prefix: zone解决办法
在将服务帐户添加为IAM成员&映射到IAM主页中的角色roles\Editor后,该剧本返回成功响应。
下面的命令返回403个响应(authentication mode = service account),直到服务帐户被添加为一个新的IAM成员。
gcloud compute instances list
gcloud compute addresses list在创建服务帐户时,如何将角色附加到服务帐户vs,将服务帐户作为IAM成员添加并将其标记到相同的角色中,这是如何区别的。
注(编辑1):
我通过terraform创建服务帐户,使用资源类型google_service_account创建服务帐户,使用google_service_account_iam_policy将编辑器角色附加到服务帐户。
发布于 2021-03-04 18:19:38
当使用服务帐户的IAM政策时,这意味着它将IAM绑定设置为资源级别,这意味着您将在同一个服务帐户上而不是在实际项目级别上为same @设置编辑器角色。请避免使用政策,因为它会覆盖现有的绑定,并且只会设置serviceAccount、user、group等以及它们各自在TF文件中指定的角色。
为了在项目级别上添加“a binding而非"set"”,您需要使用以下绑定来更新现有绑定,如果这是第一次创建绑定然后使用成员,则不会覆盖项目级别上的现有绑定。
请记住,如果您执行"set" IAM绑定,您可能会被排除在项目之外。为了更好地理解IAM项目政策,请看下面的文档
https://stackoverflow.com/questions/66462176
复制相似问题