创建启用了 IP 过滤规则的存储桶

本页面介绍了如何创建包含 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 过滤规则的存储桶

gcloud

  1. 验证您是否已安装 Google Cloud CLI 526.0.0 版或更高版本:

    gcloud version | head -n1
    
  2. 如果您安装的是早期 gcloud CLI 版本,请更新版本:

    gcloud components update --version=526.0.0
    
  3. 创建一个 JSON 文件,用于定义传入请求的规则。如需查看示例以及有关如何构造存储桶 IP 过滤规则的信息,请参阅存储桶 IP 过滤配置

    {
      "mode":"MODE",
      "publicNetworkSource":{
          "allowedIpCidrRanges":[
            "RANGE_CIDR",
            "..."
          ]
      },
      "vpcNetworkSources":[
          {
            "network":"projects/PROJECT_ID/global/networks/NETWORK_NAME",
            "allowedIpCidrRanges":[
                "RANGE_CIDR",
                "..."
            ]
          },
          "..."
      ],
      "allowCrossOrgVpcs":ALLOW_CROSS_ORG_VPCS,
      "allowAllServiceAgentAccess": ALLOW_ALL_SERVICE_AGENT_ACCESS
    }

    其中:

    • MODE 是存储桶 IP 过滤配置的模式。有效值为 EnabledDisabled。如果设置为 Enabled,则会对存储桶应用 IP 过滤规则。系统会根据这些规则评估对存储桶的所有传入请求。设置为 Disabled 时,所有入站请求均可访问存储桶。

    • RANGE_CIDR 是允许访问存储桶的公共网络 IPv4 或 IPv6 地址范围。您可以以列表形式输入一个或多个地址范围。

    • PROJECT_ID 是虚拟私有云 (VPC) 网络所在项目的 ID。如需配置多个 VPC 网络,您需要指定每个网络所在的项目。

    • NETWORK_NAME 是可以访问存储桶的 VPC 网络的名称。如需配置多个 VPC 网络,您需要为每个网络指定一个名称。

    • ALLOW_CROSS_ORG_VPCS 是一个布尔值,用于指示是否允许在 vpcNetworkSources 中定义的 VPC 网络源自其他组织。此字段是可选字段。如果设置为 true,则请求允许使用跨组织 VPC 网络。如果设置为 false,则请求会将 VPC 网络限制为与存储桶位于同一组织。如果未指定,则默认值为 false

    • ALLOW_ALL_SERVICE_AGENT_ACCESS 是一个布尔值,用于指示是否允许服务代理访问存储桶,无论 IP 过滤条件配置如何。如果值为 true,则其他 Google Cloud 服务可以使用服务代理访问存储桶,而无需进行基于 IP 的验证。

  4. 如需创建包含 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

  1. 安装并初始化 gcloud CLI,以便为 Authorization 标头生成访问令牌。

  2. 创建一个包含存储桶设置的 JSON 文件,其中必须包含存储桶的 nameipFilter 配置字段。如需查看示例以及有关如何构造存储桶 IP 过滤规则的信息,请参阅存储桶 IP 过滤配置

    {
      "name": "BUCKET_NAME",
      "ipFilter": {
        "mode": "MODE",
        "publicNetworkSource":
          {
            "allowedIpCidrRanges":
              [RANGE_CIDR,
                ...
              ]
          },
        "vpcNetworkSources":
          [
            {"network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
            "allowedIpCidrRanges":
              [RANGE_CIDR,
              ...
              ]
            },
          ...
          ],
        "allowCrossOrgVpcs": ALLOW_CROSS_ORG_VPCS,
        "allowAllServiceAgentAccess": ALLOW_ALL_SERVICE_AGENT_ACCESS
        },
    }

    其中:

    • MODE 是 IP 过滤条件配置的状态。有效值为 EnabledDisabled。如果设置为 Enabled,则会对存储桶应用 IP 过滤规则,并根据这些规则评估存储桶的所有传入请求。如果设置为 Disabled,则所有传入请求都可以访问存储桶及其数据,而无需进行任何评估(前提是您拥有所需的 IAM 权限)。

    • RANGE_CIDR 是允许访问存储桶的公共网络 IPv4 或 IPv6 地址范围。您可以以列表形式输入一个或多个地址范围。

    • PROJECT_ID 是 VPC 网络所在项目的 ID。如需配置多个 VPC 网络,您需要指定每个网络所在的项目。

    • NETWORK_NAME 是可以访问存储桶的 VPC 网络的名称。如需配置多个 VPC 网络,您需要为每个网络指定一个名称。

    • ALLOW_ALL_SERVICE_AGENT_ACCESS 是一个布尔值,用于指示是否允许服务代理访问存储桶,无论 IP 过滤条件配置如何。如果值为 true,则其他 Google Cloud 服务可以使用服务代理访问存储桶,而无需进行基于 IP 的验证。

    • ALLOW_CROSS_ORG_VPCS 是一个布尔值,用于指示是否允许在 vpcNetworkSources 中定义的 VPC 网络源自其他组织。此字段是可选字段。如果设置为 true,则请求允许使用跨组织 VPC 网络。如果设置为 false,则请求会将 VPC 网络限制为与存储桶位于同一组织。如果未指定,则默认值为 false

  3. 使用 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"

    其中:

    • JSON_FILE_NAME 是包含存储桶设置的 JSON 文件的名称。
    • PROJECT_IDENTIFIER 是与存储桶关联的项目的 ID 或编号,例如 my-project

存储桶 IP 过滤配置

本部分举例说明了用于控制对 Cloud Storage 存储桶的访问权限的存储桶 IP 过滤 JSON 文件配置。您可以使用以下任一示例向传入请求授予访问权限:

  • 任何公共 IP 地址(IPv4 或 IPv6)

    以下配置会向任何公共 IPv4 或 IPv6 地址授予访问权限,但会阻止源自任何 VPC 的流量:

    gcloud

      {
        "mode": "Enabled",
        "publicNetworkSource":
        {
          "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
        },
        "allowAllServiceAgentAccess": false
      }
      

    REST API

    JSON API

      {
      "ipFilter":
      {
        "mode": "Enabled",
        "publicNetworkSource":
        {
          "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
        },
        "allowAllServiceAgentAccess": false
      }
      }
      
  • 特定的公共 IP 范围

    • 以下示例配置会向 192.0.2.0/24 公共 IPv4 地址范围授予访问权限,但会阻止源自任何 VPC 的流量:

      gcloud

          {
            "mode": "Enabled",
            "publicNetworkSource":
            {
              "allowedIpCidrRanges": ["192.0.2.0/24"]
            },
            "allowAllServiceAgentAccess": false
          }
        

      REST API

      JSON API

        {
        "ipFilter":
          {
            "mode": "Enabled",
            "publicNetworkSource":
            {
              "allowedIpCidrRanges": ["192.0.2.0/24"]
            },
            "allowAllServiceAgentAccess": false
          }
        }
    • 以下示例配置会向 2001:db8::/32 公共 IPv6 地址范围授予访问权限,但会阻止源自任何 VPC 的流量:

      gcloud

          {
            "mode": "Enabled",
            "publicNetworkSource":
            {
              "allowedIpCidrRanges": ["2001:db8::/32"]
            },
            "allowAllServiceAgentAccess": false
          }
        

      REST API

      JSON API

        {
          "ipFilter":
            {
              "mode": "Enabled",
              "publicNetworkSource":
              {
                "allowedIpCidrRanges": ["2001:db8::/32"]
              },
              "allowAllServiceAgentAccess": false
            }
        }
  • VPC 网络:使用以下配置,您可以向 VPC 网络中资源授予访问权限。您可以向 VPC 中所有 IP 地址或 VPC 中特定 IP 范围授予访问权限。在上述每个示例中,PROJECT_ID 是 VPC 网络所在项目的 ID,而 NETWORK_NAME 是可以访问存储桶的 VPC 网络的名称。

    • 以下示例配置向来自特定 VPC 的任何 IPv4 或 IPv6 地址所发出的请求授予访问权限,并阻止源自公共 IP 地址的流量:

      gcloud

        {
          "mode": "Enabled",
          "vpcNetworkSources":
            [
              {
                "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
              },
            ],
          "allowAllServiceAgentAccess": false
        }

      REST API

      JSON API

        {
          "ipFilter":
            {
              "mode": "Enabled",
              "vpcNetworkSources":
                [
                  {
                    "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                    "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
                  },
                ],
              "allowAllServiceAgentAccess": false
            }
        }
    • 以下示例配置仅向与外部 IPv4 地址为 192.0.2.0/24 的虚拟机关联的 VPC 发出的请求授予访问权限,并阻止源自公共 IP 地址的流量:

      gcloud

          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["192.0.2.0/24"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
        

      REST API

      JSON API

        {
          "ipFilter":
          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["192.0.2.0/24"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
        }
    • 以下示例配置仅向内部 IPv4 子网范围与无外部 IP 地址的虚拟机关联的 VPC 发出的请求授予访问权限,并阻止源自公共 IP 地址的流量:

      gcloud

          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["IP_ADDRESS"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
          

      其中:

      IP_ADDRESS内部 IPv4 子网范围

      REST API

      JSON API

        {
        "ipFilter":
          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                "allowedIpCidrRanges": ["IP_ADDRESS"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
        }
        

      其中:

      IP_ADDRESS内部 IPv4 子网范围

    • 以下示例配置仅向双栈 IPv4 和 IPv6 子网范围与外部 IPv6 地址范围为 2001:db8::/32 的虚拟机相关联的 VPC 发出的请求授予访问权限,并阻止源自公共 IP 地址的流量:

      gcloud

        {
          "mode": "Enabled",
          "vpcNetworkSources":
          [
            {
              "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
              "allowedIpCidrRanges": ["2001:db8::/32"]
            },
          ],
          "allowAllServiceAgentAccess": false
          }
        

      REST API

      JSON API

        {
        "ipFilter":
          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["2001:db8::/32"]
                },
              ],
            "allowAllServiceAgentAccess": false
            }
        }

后续步骤

自行试用

如果您是 Google Cloud 新手,请创建一个账号来评估 Cloud Storage 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 Cloud Storage