无法使用 gcp_compute 插件解析 gcp.yml
Failed to parse gcp.yml with gcp_compute plugin
我正在创建 ansible 剧本来在 GCP 中配置虚拟机。我正在使用 gcp_compute
插件来构建动态清单。使用角色为 roles\editor
的服务帐户向 google 云进行身份验证。 Playbook 在执行时失败并出现以下错误。
[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_compute
gcp.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
将编辑者角色附加到服务帐户。
当使用 IAM policy for service account this means that it will set IAM bindings to resource level meaning you are setting editor role for SA my-sa@ on the same service account not on the actual project level. Please avoid using google_service_account_iam_policy 时,因为它会覆盖现有的绑定并且只会设置 serviceAccount
、user
、group
等以及它们在您的文档中指定的各自角色TF文件。
为了“添加”一个绑定而不是“设置” 在项目级别,您需要使用以下 google_project_iam_binding for updating existing bindings if this is the first time creating a binding then use google_project_iam_member ,这不会覆盖您在项目级别的现有绑定。
请记住,如果您执行 "set" IAM 绑定,您可能会被锁定在项目之外。请同时查看以下文档,以更好地理解 IAM policy for projects
我正在创建 ansible 剧本来在 GCP 中配置虚拟机。我正在使用 gcp_compute
插件来构建动态清单。使用角色为 roles\editor
的服务帐户向 google 云进行身份验证。 Playbook 在执行时失败并出现以下错误。
[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_compute
gcp.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
将编辑者角色附加到服务帐户。
当使用 IAM policy for service account this means that it will set IAM bindings to resource level meaning you are setting editor role for SA my-sa@ on the same service account not on the actual project level. Please avoid using google_service_account_iam_policy 时,因为它会覆盖现有的绑定并且只会设置 serviceAccount
、user
、group
等以及它们在您的文档中指定的各自角色TF文件。
为了“添加”一个绑定而不是“设置” 在项目级别,您需要使用以下 google_project_iam_binding for updating existing bindings if this is the first time creating a binding then use google_project_iam_member ,这不会覆盖您在项目级别的现有绑定。
请记住,如果您执行 "set" IAM 绑定,您可能会被锁定在项目之外。请同时查看以下文档,以更好地理解 IAM policy for projects