批量导入和导出现有的 Google Cloud 资源
本页面介绍了 config-connector bulk-export
命令以及如何使用它将 Google Cloud 资源导出到 Config Connector YAML 文件,您可以稍后将其导入到 Config Connector。
config-connector bulk-export
使用 Cloud Asset Inventory 的导出功能发现现有 Google Cloud 资源。您可以提供 Cloud Asset Inventory 导出文件,或者 config-connector
代表您执行导出操作。
Cloud Asset Inventory 可导出 JSON 结构。每个结构都有资源名称、Asset Inventory 类型及其祖先资源:项目、文件夹和组织。要了解 Asset Inventory 支持的类型,请参阅支持的资产类型。
准备工作
如果要使用
config-connector
工具直接从 Cloud Asset Inventory 中导出数据,请使用gcloud
在 Google Cloud Identity 项目上启用 Cloud Asset Inventory API。gcloud services enable cloudasset.googleapis.com
批量导出示例
在本示例中,您将使用 Google Cloud CLI 创建 PubSubTopic,然后将其导入到 Config Connector。
使用 Google Cloud CLI 创建一个名为
sample-topic
的主题:gcloud pubsub topics create sample-topic
您将收到该主题已创建的确认信息。
Created topic [projects/PROJECT_ID/topics/sample-topic].
在输出中,
PROJECT_ID
已替换为您的 Google Cloud 项目。使用以下命令获取主题的 Google Cloud 资源名称并将其保存到环境变量中:
TOPIC_RESOURCE_NAME=$(gcloud pubsub topics describe sample-topic --format "value(name)")
为了识别对象,
config-connector
工具使用 Cloud Asset Inventory JSON 结构。将主题的资产 JSON 的结构保存到环境变量中:TOPIC_ASSET='{"name":"//pubsub.googleapis.com/'"${TOPIC_RESOURCE_NAME}"'","asset_type":"pubsub.googleapis.com/Topic"}'
通过运行以下命令将资产传递到
config-connector bulk-export
:echo ${TOPIC_ASSET} | config-connector bulk-export
输出为 YAML 格式的 Config Connector 资源。
--- apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID name: sample-topic ...
在输出中,
PROJECT_ID
已替换为您的 Google Cloud 项目。您可以使用
kubectl apply -f -
将此资源传递到 Config Connector。要直接传递资源,请运行以下命令:echo ${TOPIC_ASSET} | config-connector bulk-export | kubectl apply -f - --namespace CC_NAMESPACE
将 CC_NAMESPACE 替换为 Config Connector 从其管理资源的命名空间。
Config Connector 获取资源。
确认 Config Connector 正在使用
kubectl describe
管理资源:kubectl describe pubsubtopic sample-topic --namespace CC_NAMESPACE
将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。
清理
您可以使用 config-connector bulk-export
和 kubectl delete
删除 PubSubTopic。
echo ${TOPIC_ASSET} | config-connector bulk-export | kubectl delete -f - --namespace CC_NAMESPACE
将 CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。
发现要导入的资源
导入资源时,您可以执行 Cloud Asset Inventory 导出并将结果提供给 config-connector bulk-export
或让config-connector bulk-export
代表您执行该操作。
从 Cloud Asset Inventory 导出导入
您可以通过提供包含导出的本地文件路径来提供 Asset Inventory 导出,或者在 STDE 上将导出结果传送到 config-connector
。
从本地文件导入
您可以通过将本地文件与 --input
参数配合使用,向 config-connector bulk-export
提供 Asset Inventory 导出。
config-connector bulk-export --input ASSET_INVENTORY_EXPORT
将 ASSET_INVENTORY_EXPORT
替换为 Cloud Asset Inventory 导出的文件名。
从 STDIN 导入
要在 STDE 上提供 Asset Inventory 导出,请将导出结果传送到 config-connector bulk-export
。例如,如果您的导出位于名为 export.json
的本地文件中,则在不提供任何导出参数的情况下将文件的内容传送到 config-connector bulk-export
。
cat export.json | config-connector bulk-export
在 STDIN 上过滤 Asset Inventory 导出
要过滤 Asset Inventory 导出,您可以使用 jq
工具并通过管道将结果输入 config-connector bulk-export
。例如,如果您只想从 EXPORT_FILE 文件中导入 PubSubTopic 资产,请运行以下命令:
cat EXPORT_FILE | jq '. | select( .asset_type == "pubsub.googleapis.com/Topic" )' | config-connector bulk-export
使用 config-connector 导出产品目录
config-connector bulk-export
工具可以从 Google Cloud 资源层次结构中导出资源。
导出项目
要从项目中导出所有资源,请使用 --project
参数。
config-connector bulk-export --project PROJECT_ID
将 PROJECT_ID
替换为您的 Google Cloud 项目。
导出文件夹
要从文件夹中导出所有资源,请使用 --folder
参数。
config-connector bulk-export --folder FOLDER_NUMBER
将 FOLDER_NUMBER
替换为您的 Google Cloud 文件夹编号。
导出您的组织
要从组织中导出所有资源,请使用 --organization
参数。
config-connector bulk-export --organization ORGANIZATION_ID
将 ORGANIZATION_ID
替换为您的 Google Cloud 组织 ID。
Cloud Storage 位置
Asset inventory 导出的输出位置是 Cloud Storage URI。当 config-connector bulk-export
执行导出时,它会使用 Cloud Storage 存储分区。默认情况下,config-connector bulk-export
会创建一个临时存储分区。您还可以指定存储分区名称。
临时 Cloud Storage 存储分区
如果您未提供 --storage-key
参数,config-connector
bulk-export
会代表您创建一个临时 Cloud Storage 存储桶。通过
存储桶是在存储桶的默认位置创建的;US
多区域。在以下情况下,该存储桶会被删除:
即表示该导出已完成
指定临时存储分区
如需指定存储分区,请使用 Cloud Storage URI 和 storage-key
参数。如果 URI 仅是存储分区的名称,则会为导出存储对象生成一个名称。如果 URI 是存储对象的完整路径,则使用完整路径。
config-connector bulk-export --storage-key gs://BUCKET_NAME
输出
config-connector bulk-export
命令的输出是 YAML 格式的 Config Connector 资源。默认情况下,YAML 文件会写入 STDOUT。您可以使用 output
选项将资源输出定向到文件。
输出到单个文件
设置 --output
参数时,如果满足以下条件之一,则 config-connector bulk-export
会将其结果写入单个文件:
output
指定的文件存在且为regular
文件。- 通过
output
指定的文件不存在,由output
表示的父目录不存在。
输出到目录
当 --output
参数是以 /
结尾的目录时,config-connector
会将其结果写入多个文件。config-connector bulk-export
会为每个资源创建一个文件,且文件名与其资源名称匹配。
config-connector bulk-export --project PROJECT_ID --on-error continue --output OUTPUT_DIRECTORY/
将 PROJECT_ID
替换为您的 Google Cloud 项目。
例如,要将资产从项目 my-project
输出到 sample
目录,请运行以下命令:
config-connector bulk-export --project my-project --on-error continue --output sample/
支持的资源
您可以通过运行以下命令输出 config-connector
工具的资源列表以及资源名称格式:
config-connector print-resources
命令行选项
config-connector bulk-export
命令具有以下选项:
config-connector bulk-export
--input FILENAME \
--output FILENAME \
--storage-key gs://BUCKET_NAME \
--project PROJECT_ID \
--folder FOLDER_NUMBER \
--organization ORGANIZATION_ID \
--oauth2-token TOKEN \
--on-error [halt | continue | ignore] \
--iam-format [policy | policymember | none] \
--filter-deleted-iam-members [true | false] \
--verbose
--input
:Cloud Asset Inventory 输入文件。--output
:一个可选输出文件路径,用于停用标准输出。如果是文件,结果将包含所有命令输出;如果是目录,则目录将包含输出中每个资源对应的新文件。--storage-key
:定位用于导出的临时 Cloud Storage 存储分区。--project
:要导出的 Google Cloud 项目 ID--folder
:要导出的 Google Cloud 文件夹 ID--organization
:要导出的 Google Cloud 组织 ID。--oauth2-token
:OAUTH2 令牌,用作 Google Cloud 身份。默认情况下,config-connector
会使用 Google Cloud CLI 默认凭据。--on-error
:控制发生可恢复错误时的行为。选项为“continue”、“halt”或“ignore”。halt
:发生任何错误时停止执行(默认)continue
:继续处理资源,将错误输出到 STDERRignore
:继续处理资源且不输出错误
--iam-format
:指定导出的 IAM 资源输出的种类。选项包括policy
(默认)、policymember
或none
。--filter-deleted-iam-members
:指定是否滤除已删除的 IAM 主账号。选项为true
或false
。默认值为false
。--verbose
:启用详细日志记录。
后续步骤
- 了解 Config Connector 如何获取现有 Google Cloud 资源
- 了解 Cloud Asset Inventory 和将资产导出到 Cloud Storage。
- 了解 Config Connector 支持的资源。