此示例展示了如何将已包含在服务边界内的现有宿主项目的 VPC 网络迁移到单独的边界。
在此示例中,宿主项目由两个 VPC 网络组成。 两个服务项目托管其 Cloud Storage 资源。
下图显示了迁移前示例主机项目的外围配置:
架构图显示了以下组件:
- 宿主项目。宿主项目包含两个 VPC 网络(
VPC1
和VPC2
)。 - 服务项目。服务项目
service-project-1
和service-project-2
包含 Cloud Storage 存储桶,且受服务边界的保护。 - 边界。服务边界
perimeter-1
可保护整个主机 项目和服务项目。VPC 网络VPC1
中的虚拟机VM1
和 VPC 网络VPC2
中的虚拟机VM2
都可以访问service-project-1
和service-project-2
中的资源。
下图显示了迁移后的宿主项目的外围配置。
架构图显示了以下组件:
- Perimeter-1。此边界可保护 VPC 网络
VPC1
和服务项目service-project-1
。虚拟机VM1
可以访问service-project-1
中的 Cloud Storage 存储桶,但无法访问service-project-2
中的 Cloud Storage 存储桶。 - Perimeter-2。此边界可保护 VPC 网络
VPC2
和服务项目service-project-2
。虚拟机VM2
可以访问service-project-2
中的 Cloud Storage 存储桶,但无法访问service-project-1
中的 Cloud Storage 存储桶。
在此迁移示例中,配置更改是在试运行模式下进行的,
然后在执行试运行配置之前进行验证。此过程可确保 VPC 网络和资源得到保护,并且从 VPC1
到 service-project-1
以及从 VPC2
到 service-project-2
的生产流量不会中断。
此迁移过程包括以下步骤:
- 获取 VPC 网络和边界详情
- 设置试运行边界配置
- 验证试运行设置
- 强制实施试运行配置
获取 VPC 网络和边界详情
在此示例中,在开始迁移之前,您必须先获取 VPC 列表 网络和边界详细信息
列出宿主项目中的 VPC 网络
以下命令可列出 network-host-project 中的 VPC 网络:
gcloud compute networks list --project=network-host-project
此示例生成以下输出:
NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 vpc1 AUTO REGIONAL vpc2 AUTO REGIONAL
获取边界详情
以下命令可获取边界的详细信息:
gcloud access-context-manager perimeters describe perimeter-1
此示例生成以下输出:
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-1
status:
…
resources:
- projects/<network-host-project number>
- projects/<service-project-1 number>
- projects/<service-project-2 number>
<access policy number> 用于示例试运行模式命令。您还可以使用以下命令设置默认访问权限政策:
gcloud alpha config set access_context_manager/policy<access policy number>
设置试运行配置
在此示例中,您将使用试运行命令更新边界 perimeter-1
以移除 network-host-project
、service-project-2
并添加 VPC1
。然后,您可以运行试运行命令来创建新的边界 perimeter-2
,并添加 service-project-2
和 VPC2
。
更新试运行配置
以下命令会更新边界 perimeter-1
以移除 network-host-project
,
service-project-2
,并添加 VPC1
:
gcloud access-context-manager perimeters dry-run update perimeter-1 --remove-resources="projects/<network-host-project number>,projects/<service-project-2 number>" --add-resources="//compute.googleapis.com/projects/network-host-project/global/networks/vpc1" --policy=<access policy number>
在试运行模式下创建新边界
以下命令会创建边界 perimeter-2
并添加 service-project-2
,
和 VPC1
:
gcloud access-context-manager perimeters dry-run create perimeter-2 --title=perimeter-2 --type="regular" --resources="projects/<service-project-2 number>,//compute.googleapis.com/projects/network-host-project/global/networks/vpc2" --restricted-services="storage.googleapis.com" --policy=<access policy number>
验证试运行配置
在此示例中,请运行以下命令,确保从 VPC1
到 service-project-1
以及从 VPC2
到 service-project-2
没有试运行错误:
如需列出 service-project-1
中的 Cloud Storage 存储桶,请登录 VPC1
中的 VM1
并运行以下命令:
gcloud storage ls --project=service-project-1
如需列出 service-project-2
中的 Cloud Storage 存储桶,请运行以下命令:
gcloud storage ls --project=service-project-2
这些命令已成功运行,因为试运行配置不会影响生产
流量。不过,network-host-project
的审核日志中会显示以下试运行错误,指示从 VM1
访问 service-project-2
时出现问题:
egressViolations: [ 0: { servicePerimeter: "accessPolicies/<access policy number>/servicePerimeters/perimeter-1" source: "//compute.googleapis.com/projects/network-host-project/global/networks/VPC1" sourceType: "Network" targetResource: "projects/<service-project-2 number>" } ]
同样,从 VM2
到 service-project-2
的 Cloud Storage 请求没有试运行错误,并且从 VM2
到 service-project-1
的请求在 network-host-project
的审核日志中存在以下试运行错误:
egressViolations: [ 0: { servicePerimeter: "accessPolicies/<access policy number>/servicePerimeters/perimeter-2" source: "//compute.googleapis.com/projects/network-host-project/global/networks/VPC2" sourceType: "Network" targetResource: "projects/<service-project-1 number>" } ]
强制实施试运行配置
您必须在一个原子事务中一次性强制执行所有试运行配置。
如需强制执行试运行配置,请运行以下命令:
gcloud access-context-manager perimeters dry-run enforce-all --policy=<access policy number>
强制执行模拟运行配置后,运行以下命令以描述 perimeter-1
:
gcloud access-context-manager perimeters describe perimeter-1 --policy=<access policy number>
此示例生成以下输出,其中 network-host-project
和 service-project-2
已移除,并且 VPC1
已添加到 perimeter-1
。
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-1 status: … resources: - projects/<service-project-1 number> - //compute.googleapis.com/projects/<network-host-project>/global/networks/VPC1
运行以下命令来描述 perimeter-2
:
gcloud access-context-manager perimeters describe perimeter-2 --policy=<access policy number>
此示例会生成以下输出,其中 service-project-2
和 VPC2
已添加到 perimeter-2
。
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-2 status: … resources: - projects/<service-project-2 number> - //compute.googleapis.com/projects/<network-host-project>/global/networks/VPC2 title: perimeter-2