GCP Deployment Manager部署Cloud VPN时KMS解密依赖报错求助
解决Deployment Manager Python模板中无法调用KMS API的问题
这个错误的核心原因是:GCP Deployment Manager的Python模板运行在受限的沙箱环境中,默认不包含google-api-python-client库,而且也不允许安装额外的第三方依赖——这就是为什么你即使尝试引入库也依然报错的原因。
不过不用担心,Deployment Manager本身已经内置了对KMS加密密钥的支持,完全不需要你自己编写解密代码,下面是正确的实现方式:
步骤1:给Deployment Manager服务账号配置KMS权限
首先要确保Deployment Manager使用的服务账号拥有解密KMS密钥的权限:
- 找到你的项目的Deployment Manager服务账号,格式为:
[你的项目编号]@cloudservices.gserviceaccount.com - 在KMS密钥环的IAM设置中,给这个账号添加
Cloud KMS CryptoKey Decrypter角色
步骤2:在配置中直接使用加密后的密钥
你只需要把经KMS加密的密钥字符串(注意是Base64编码后的密文)前面加上encrypted:前缀,直接赋值给VPN隧道的sharedSecret属性即可——Deployment Manager会自动帮你调用KMS解密,不需要任何额外代码。
示例YAML配置
imports: - path: cloudvpn-testenv.py resources: - name: my-vpn-tunnel type: cloudvpn-testenv.py properties: peerIp: "192.168.1.1" encryptedSharedSecret: "encrypted:CiQAZ2F0ZXdheS1rbXMtY29udHJvbC0xLmNsb3VkLmt1cy5hZnRlY3RzLmdvb2dsZS5jb20QLmNyeXB0b0tleV8wLTI1Ni0wNS0wMS0wMC0wMC0wMC0wMC0wMC0wMC9rZXlSaW5nL2tleS9jcnlwdG9LZXkvZXhhbXBsZS1rZXkSBXNlY3JldA==" region: "us-central1" targetVpnGateway: "my-vpn-gateway"
示例Python模板(cloudvpn-testenv.py)
def GenerateConfig(context): resources = [{ 'name': context.env['name'], 'type': 'compute.vpnTunnel', 'properties': { 'region': context.properties['region'], 'peerIp': context.properties['peerIp'], 'sharedSecret': context.properties['encryptedSharedSecret'], 'targetVpnGateway': context.properties['targetVpnGateway'] } }] return {'resources': resources}
为什么你的原方法行不通?
Deployment Manager的Python运行环境只包含有限的标准库和GCP特定的内置模块,googleapiclient不在这个列表里,所以无论你怎么尝试引入,都无法加载这个库。而内置的加密密钥支持是Google官方提供的解决方案,既安全又不需要额外代码。
内容的提问来源于stack exchange,提问作者Daniel Härter
相关产品推荐
相关产品推荐

