本页面介绍了如何创建包含 IP 过滤规则的存储桶。通过创建包含 IP 过滤的存储桶,您可以通过检查传入的请求是否与存储桶 IP 过滤规则中指定的 IP 地址匹配,从而控制对存储桶的访问。如需了解详情,请参阅存储桶 IP 过滤。
如需了解如何在现有存储桶中创建或更新 IP 过滤规则,请参阅更新存储桶 IP 过滤规则。
所需的角色
如需获得创建包含 IP 过滤规则的存储桶所需的权限,请让您的管理员为您授予存储桶的 Storage Admin (roles/storage.admin
) 角色。此角色包含创建包含 IP 过滤规则的存储桶所需的权限。
如需查看所需的确切权限,请展开所需权限部分:
所需权限
storage.buckets.create
storage.buckets.setIpFilter
您还可以通过自定义角色获得这些权限。此外,您可能也可以通过其他预定义角色来获取这些权限。要查看哪些角色与哪些权限相关联,请参阅适用于 Cloud Storage 的 IAM 角色。
如需了解如何授予存储桶的角色,请参阅将 IAM 与存储桶搭配使用。
创建包含 IP 过滤规则的存储桶
命令行
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
创建一个 JSON 文件,用于定义传入请求的规则。如需查看示例以及有关如何构造存储桶 IP 过滤规则的信息,请参阅存储桶 IP 过滤配置。
{ "mode":"MODE", "publicNetworkSource":{ "allowedIpCidrRanges":[ "RANGE_CIDR", "..." ] }, "vpcNetworkSources":[ { "network":"projects/PROJECT_ID/global/networks/NETWORK_NAME", "allowedIpCidrRanges":[ "RANGE_CIDR", "..." ] }, "..." ] }
其中:
MODE
是存储桶 IP 过滤配置的模式。有效值为Enabled
和Disabled
。如果设置为Enabled
,则会对存储桶应用 IP 过滤规则。系统会根据这些规则评估对存储桶的所有传入请求。设置为Disabled
时,所有入站请求均可访问存储桶。RANGE_CIDR
是允许访问存储桶的公共网络 IPv4 或 IPv6 地址范围。您可以以列表形式输入一个或多个地址范围。PROJECT_ID
是虚拟私有云 (VPC) 网络所在项目的 ID。如需配置多个 VPC 网络,您需要指定每个网络所在的项目。NETWORK_NAME
是可以访问存储桶的 VPC 网络的名称。如需配置多个 VPC 网络,您需要为每个网络指定一个名称。
如需创建包含 IP 过滤规则的存储桶,请在开发环境中运行
gcloud alpha storage buckets create
命令:gcloud alpha storage buckets create gs://BUCKET_NAME --ip-filter-file=IP_FILTER_CONFIG_FILE
其中:
BUCKET_NAME
是您要为自己的存储桶指定的名称(须遵循命名要求),例如my-bucket
。IP_FILTER_CONFIG_FILE
是用于定义传入请求的规则的 JSON 文件。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。创建一个包含存储桶设置的 JSON 文件,其中必须包含存储桶的
name
和ipFilter
配置字段。如需查看示例以及有关如何构造存储桶 IP 过滤规则的信息,请参阅存储桶 IP 过滤配置。{ "name": "BUCKET_NAME", "ipFilter": { "mode": "MODE", "publicNetworkSource": { "allowedIpCidrRanges": [RANGE_CIDR, ... ] }, "vpcNetworkSources": [ {"network": "projects/PROJECT_ID/global/networks/NETWORK_NAME", "allowedIpCidrRanges": [RANGE_CIDR, ... ] }, ... ] } }
其中:
MODE
是 IP 过滤条件配置的状态。有效值为Enabled
和Disabled
。如果设置为Enabled
,则会对存储桶应用 IP 过滤规则,并根据这些规则评估存储桶的所有传入请求。如果设置为Disabled
,则所有传入请求都可以访问存储桶及其数据,而无需进行任何评估(前提是您拥有所需的 IAM 权限)。如需安全地启用存储桶 IP 过滤规则,请先配置规则,将mode
字段设置为Disabled
,以便您可以添加和调整规则,而不会立即阻止请求。验证规则正确定义后,将mode
字段更新为Enabled
,以激活存储桶 IP 过滤。RANGE_CIDR
是允许访问存储桶的公共网络 IPv4 或 IPv6 地址范围。您可以以列表形式输入一个或多个地址范围。PROJECT_ID
是 VPC 网络所在项目的 ID。如需配置多个 VPC 网络,您需要指定每个网络所在的项目。NETWORK_NAME
是可以访问存储桶的 VPC 网络的名称。如需配置多个 VPC 网络,您需要为每个网络指定一个名称。
使用
cURL
,通过 POST bucket 请求调用 JSON API:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b?project=PROJECT_IDENTIFIER&projection=full"
其中:
JSON_FILE_NAME
是包含存储桶设置的 JSON 文件的名称。PROJECT_IDENTIFIER
是与存储桶关联的项目的 ID 或编号,例如my-project
。
存储桶 IP 过滤配置
本部分举例说明了用于控制对 Cloud Storage 存储桶的访问权限的存储桶 IP 过滤 JSON 文件配置。您可以使用以下任一示例向传入请求授予访问权限:
任何公共 IP 地址(IPv4 或 IPv6):
以下配置会向任何公共 IPv4 或 IPv6 地址授予访问权限,但会阻止源自任何 VPC 的流量:
{ "ipFilterConfig": { "mode": "Enabled", "publicNetworkSource": { "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"] } } }
特定的公共 IP 范围:
以下示例配置会向
192.0.2.0/24
公共 IPv4 地址范围授予访问权限,但会阻止源自任何 VPC 的流量:{ "ipFilterConfig": { "mode": "Enabled", "publicNetworkSource": { "allowedIpCidrRanges": ["192.0.2.0/24"] } } }
以下示例配置会向
2001:db8::/32
公共 IPv6 地址范围授予访问权限,但会阻止源自任何 VPC 的流量:{ "ipFilterConfig": { "mode": "Enabled", "publicNetworkSource": { "allowedIpCidrRanges": ["2001:db8::/32"] } } }
VPC 网络:使用以下配置,您可以向 VPC 网络中资源授予访问权限。您可以向 VPC 中所有 IP 地址或 VPC 中特定 IP 范围授予访问权限。在上述每个示例中,
PROJECT_ID
是 VPC 网络所在项目的 ID,而NETWORK_NAME
是可以访问存储桶的 VPC 网络的名称。以下示例配置向来自特定 VPC 的任何 IPv4 或 IPv6 地址的请求授予访问权限,并阻止源自公共 IP 地址的流量:
{ "ipFilterConfig": { "mode": "Enabled", "vpcNetworkSources": [ { "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME", "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"] }, ] } }
以下示例配置仅向与外部 IPv4 地址为
192.0.2.0/24
的虚拟机关联的 VPC 发出的请求授予访问权限,并阻止源自公共 IP 地址的流量:{ "ipFilterConfig": { "mode": "Enabled", "vpcNetworkSources": [ { "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME", "allowedIpCidrRanges": ["192.0.2.0/24"] }, ] } }
以下示例配置仅向内部 IPv4 子网范围与无外部 IP 地址的虚拟机关联的 VPC 发出的请求授予访问权限,并阻止源自公共 IP 地址的流量:
{ "ipFilterConfig": { "mode": "Enabled", "vpcNetworkSources": [ { "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME", "allowedIpCidrRanges": ["IP_ADDRESS"] }, ] } }
其中
IP_ADDRESS
是内部 IPv4 子网范围。以下示例配置仅向双栈 IPv4 和 IPv6 子网范围与外部 IPv6 地址范围为
2001:db8::/32
的虚拟机相关联的 VPC 发出的请求授予访问权限,并阻止源自公共 IP 地址的流量:{ "ipFilterConfig": { "mode": "Enabled", "vpcNetworkSources": [ { "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME", "allowedIpCidrRanges": ["2001:db8::/32"] }, ] } }
后续步骤
自行试用
如果您是 Google Cloud 新手,请创建一个账号来评估 Cloud Storage 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
免费试用 Cloud Storage