如何确保GCP start-script使用正确的服务帐户?



我正在GCP的计算引擎中创建一个虚拟机,该虚拟机具有从包含一些可能包含敏感信息(如TLS证书)的常见配置的特定云存储桶中读取的权限。然而,当我的启动脚本被执行时,它被拒绝访问桶的权限,因为它使用的是Google Compute Engine默认的服务帐户,而不是我为虚拟机提供的服务帐户。有人能帮我弄清楚如何确保启动脚本使用正确的服务帐户?

============= EDIT =============

不确定这将有多大帮助,但这里是失败的傀儡代码,我不能/不会提供所有的傀儡代码。实例启动时调用的实际启动脚本是sudo puppet apply --verbose /opt/puppet/manifests/opensearch.pp >/var/log/puppetlabs/puppet/startup.log 2>&1。请注意,我已经确认puppet没有对服务帐户执行任何特殊操作。但是puppet始终使用默认的服务帐号,无法下载证书。如果我SSH到实例并手动运行相同的命令,它每次都有效。

exec { 'download_ssl_certs':
command => "/snap/bin/gsutil cp -r gs://${opensearch::secrets_bucket}/${opensearch::cluster}/* ${opensearch::opensearch_path}/config/",
notify  => Exec['ssl_certs_chown']
}
exec { 'ssl_certs_chown':
command     => "/bin/chown -R ${opensearch::service_user}:${opensearch::service_group} ${opensearch::opensearch_path}/config",
onlyif      => "/bin/ls -lhR ${opensearch::opensearch_path}/config | /bin/grep -i root | grep -v ${opensearch::service_user}",
refreshonly => true,
notify => Service['opensearch'],
}

示例:

gcloud compute instances create example-vm 
--service-account 123-my-sa@my-project-123.iam.gserviceaccount.com 
--scopes https://www.googleapis.com/auth/cloud-platform 

为实例创建和启用服务帐户

由于服务帐户是元数据的一部分,您可以使用启动脚本访问元数据。

从Linux启动脚本访问元数据

最新更新