如何在 Cloud Deployment Manager 中指定阻止项目范围的 SSH 密钥?
How can I specify to block project-wide SSH keys in Cloud Deployment Manager?
我想创建一个 WURFL Microservice Basic from the GCP Marketplace 的实例,但是我想以编程方式执行此操作,以便在需要时可以重现它。
我从上面的链接页面下载了部署 zip 文件:
并将其解压缩到我的机器上,所以这里我有创建 WURFL 解决方案的代码:
文件 test_config.yaml 包含有关我的部署的相关信息,我将 serviceAccount、zone、network、subnetwork 和 externalIP 属性更改为我需要它们的值有:
imports:
- path: wurfl-microservice-basic.jinja
resources:
- name: wurfl-microservice-basic
type: wurfl-microservice-basic.jinja
properties:
zone: europe-west2-a
network:
- sharedresources
subnetwork:
- eu-west2
externalIP:
- NONE
serviceAccount: wurflrunner@XXXXX.iam.gserviceaccount.com
我通过发布部署:
gcloud deployment-manager deployments create \
wurfl \
--project xxxxxxx \
--config test_config.yaml
为了允许指定 serviceAccount,我不得不对部署包进行一些更改。
我在 wurfl-microservice-basic.jinja.schema
中的属性中添加了一个 serviceAccount 属性
properties:
serviceAccount:
type: string
default: stop@gocreateaservieaccount.com
zone:
type: string
x-googleProperty:
type: GCE_ZONE
machineType:
type: string
default: e2-small
x-googleProperty:
type: GCE_MACHINE_TYPE
zoneProperty: zone
gceMachineType:
minCpu: 2
minRamGb: 1.9990234375
network:
type: array
default: [default]
minItems: 1
maxItems: 1
x-googleProperty:
type: GCE_NETWORK
gceNetwork:
allowSharedVpcs: True
machineTypeProperty: machineType
subnetwork:
type: array
minItems: 1
maxItems: 1
x-googleProperty:
type: GCE_SUBNETWORK
zoneProperty: zone
gceSubnetwork:
networkProperty: network
externalIP:
type: array
default: [EPHEMERAL]
minItems: 1
maxItems: 1
x-googleProperty:
type: GCE_EXTERNAL_IP
gceExternalIp:
networkProperty: network
notConfigurable: False
allowStaticIps: True
bootDiskType:
type: string
default: pd-ssd
x-googleProperty:
type: GCE_DISK_TYPE
zoneProperty: zone
bootDiskSizeGb:
type: integer
default: 20
minimum: 20
maximum: 10000
x-googleProperty:
type: GCE_DISK_SIZE
gceDiskSize:
diskTypeProperty: bootDiskType
在 wurfl-microservice-basic.jinja 我添加了:
{% set serviceAccount = properties["serviceAccount"] %}
并更改:
serviceAccounts:
- email: default
scopes:
- 'https://www.googleapis.com/auth/cloud.useraccounts.readonly'
- 'https://www.googleapis.com/auth/devstorage.read_only'
- 'https://www.googleapis.com/auth/logging.write'
- 'https://www.googleapis.com/auth/monitoring.write'
至
serviceAccounts:
- email: {{ serviceAccount }}
scopes:
- 'https://www.googleapis.com/auth/cloud.useraccounts.readonly'
- 'https://www.googleapis.com/auth/devstorage.read_only'
- 'https://www.googleapis.com/auth/logging.write'
- 'https://www.googleapis.com/auth/monitoring.write'
这导致包创建成功。创建的 VM 允许项目范围的 SSH 密钥:
我被告知这违反公司政策,需要启用“阻止项目范围的 SSH 密钥”(即选中)。
当我进行更改以允许指定 serviceAccount 时,这样做相对容易,因为 serviceAccount 已经存在于 wurfl-microservice-basic.jinja 中,但是相同不适用于“阻止项目范围的 SSH 密钥”设置。
有人能告诉我需要对下载的部署包进行哪些更改才能启用“阻止项目范围的 SSH 密钥”吗?
想通了。它是实例元数据的一部分。我在 vm_instance.py 的 Cloud Deployment Manager 包中更改了它,方法是更改
def SetMetadataDefaults(metadata):
"""Set default metadata items."""
# Disable stackdriver monitoring by default.
items = metadata.setdefault('items', list())
if not [True for x in items
if x.get('key', None) == 'google-monitoring-enable']:
items.append({'key': 'google-monitoring-enable',
'value': '0'})
if not [True for x in items
if x.get('key', None) == 'google-logging-enable']:
items.append({'key': 'google-logging-enable',
'value': '0'})
到
def SetMetadataDefaults(metadata):
"""Set default metadata items."""
# Disable stackdriver monitoring by default.
items = metadata.setdefault('items', list())
if not [True for x in items
if x.get('key', None) == 'google-monitoring-enable']:
items.append({'key': 'google-monitoring-enable',
'value': '0'})
if not [True for x in items
if x.get('key', None) == 'google-logging-enable']:
items.append({'key': 'google-logging-enable',
'value': '0'})
if not [True for x in items
if x.get('key', None) == 'block-project-ssh-keys']:
items.append({'key': 'block-project-ssh-keys',
'value': 'TRUE'})
这是结果
我想创建一个 WURFL Microservice Basic from the GCP Marketplace 的实例,但是我想以编程方式执行此操作,以便在需要时可以重现它。
我从上面的链接页面下载了部署 zip 文件:
并将其解压缩到我的机器上,所以这里我有创建 WURFL 解决方案的代码:
文件 test_config.yaml 包含有关我的部署的相关信息,我将 serviceAccount、zone、network、subnetwork 和 externalIP 属性更改为我需要它们的值有:
imports:
- path: wurfl-microservice-basic.jinja
resources:
- name: wurfl-microservice-basic
type: wurfl-microservice-basic.jinja
properties:
zone: europe-west2-a
network:
- sharedresources
subnetwork:
- eu-west2
externalIP:
- NONE
serviceAccount: wurflrunner@XXXXX.iam.gserviceaccount.com
我通过发布部署:
gcloud deployment-manager deployments create \
wurfl \
--project xxxxxxx \
--config test_config.yaml
为了允许指定 serviceAccount,我不得不对部署包进行一些更改。
我在 wurfl-microservice-basic.jinja.schema
中的属性中添加了一个 serviceAccount 属性properties:
serviceAccount:
type: string
default: stop@gocreateaservieaccount.com
zone:
type: string
x-googleProperty:
type: GCE_ZONE
machineType:
type: string
default: e2-small
x-googleProperty:
type: GCE_MACHINE_TYPE
zoneProperty: zone
gceMachineType:
minCpu: 2
minRamGb: 1.9990234375
network:
type: array
default: [default]
minItems: 1
maxItems: 1
x-googleProperty:
type: GCE_NETWORK
gceNetwork:
allowSharedVpcs: True
machineTypeProperty: machineType
subnetwork:
type: array
minItems: 1
maxItems: 1
x-googleProperty:
type: GCE_SUBNETWORK
zoneProperty: zone
gceSubnetwork:
networkProperty: network
externalIP:
type: array
default: [EPHEMERAL]
minItems: 1
maxItems: 1
x-googleProperty:
type: GCE_EXTERNAL_IP
gceExternalIp:
networkProperty: network
notConfigurable: False
allowStaticIps: True
bootDiskType:
type: string
default: pd-ssd
x-googleProperty:
type: GCE_DISK_TYPE
zoneProperty: zone
bootDiskSizeGb:
type: integer
default: 20
minimum: 20
maximum: 10000
x-googleProperty:
type: GCE_DISK_SIZE
gceDiskSize:
diskTypeProperty: bootDiskType
在 wurfl-microservice-basic.jinja 我添加了:
{% set serviceAccount = properties["serviceAccount"] %}
并更改:
serviceAccounts:
- email: default
scopes:
- 'https://www.googleapis.com/auth/cloud.useraccounts.readonly'
- 'https://www.googleapis.com/auth/devstorage.read_only'
- 'https://www.googleapis.com/auth/logging.write'
- 'https://www.googleapis.com/auth/monitoring.write'
至
serviceAccounts:
- email: {{ serviceAccount }}
scopes:
- 'https://www.googleapis.com/auth/cloud.useraccounts.readonly'
- 'https://www.googleapis.com/auth/devstorage.read_only'
- 'https://www.googleapis.com/auth/logging.write'
- 'https://www.googleapis.com/auth/monitoring.write'
这导致包创建成功。创建的 VM 允许项目范围的 SSH 密钥:
我被告知这违反公司政策,需要启用“阻止项目范围的 SSH 密钥”(即选中)。
当我进行更改以允许指定 serviceAccount 时,这样做相对容易,因为 serviceAccount 已经存在于 wurfl-microservice-basic.jinja 中,但是相同不适用于“阻止项目范围的 SSH 密钥”设置。
有人能告诉我需要对下载的部署包进行哪些更改才能启用“阻止项目范围的 SSH 密钥”吗?
想通了。它是实例元数据的一部分。我在 vm_instance.py 的 Cloud Deployment Manager 包中更改了它,方法是更改
def SetMetadataDefaults(metadata):
"""Set default metadata items."""
# Disable stackdriver monitoring by default.
items = metadata.setdefault('items', list())
if not [True for x in items
if x.get('key', None) == 'google-monitoring-enable']:
items.append({'key': 'google-monitoring-enable',
'value': '0'})
if not [True for x in items
if x.get('key', None) == 'google-logging-enable']:
items.append({'key': 'google-logging-enable',
'value': '0'})
到
def SetMetadataDefaults(metadata):
"""Set default metadata items."""
# Disable stackdriver monitoring by default.
items = metadata.setdefault('items', list())
if not [True for x in items
if x.get('key', None) == 'google-monitoring-enable']:
items.append({'key': 'google-monitoring-enable',
'value': '0'})
if not [True for x in items
if x.get('key', None) == 'google-logging-enable']:
items.append({'key': 'google-logging-enable',
'value': '0'})
if not [True for x in items
if x.get('key', None) == 'block-project-ssh-keys']:
items.append({'key': 'block-project-ssh-keys',
'value': 'TRUE'})
这是结果