建立含有 IP 篩選規則的 bucket

如要根據來源 IP 位址或虛擬私有雲 (VPC) 網路限制 bucket 存取權,可以建立具有 IP 過濾規則的 Cloud Storage bucket。

如要新增或修改現有 bucket 的規則,請參閱「更新 bucket IP 篩選規則」。如需背景資訊,請參閱「Bucket IP 篩選」。

必要的角色

如要取得建立 bucket 並設定 IP 篩選規則所需的權限,請要求管理員授予 bucket 的 Storage 管理員 (roles/storage.admin) 角色。這個角色具備建立 bucket 和 IP 篩選規則所需的權限。

如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

  • storage.buckets.create
  • storage.buckets.setIpFilter

您也可以透過自訂角色取得這些權限。您或許也能透過其他預先定義的角色取得這些權限。如要瞭解哪些角色與哪些權限相關聯,請參閱「Cloud Storage 的 IAM 角色」。

如需授予 bucket 角色的操作說明,請參閱「在 bucket 上設定及管理 IAM 政策」。

建立具有 IP 篩選規則的 bucket

控制台

  1. 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 點選 「Create」(建立)。
  3. 在「Create a bucket」(建立 bucket) 頁面中,輸入 bucket 資訊。完成下列各步驟後,請點選「Continue」(繼續) 繼續進行下一個步驟:

    1. 在「Get started」(開始使用) 部分,執行下列操作:

      • 輸入符合 bucket 名稱規定的全域不重複名稱。

      • 如要新增值區標籤,請按一下 展開箭頭,展開「Labels」(標籤) 區段,然後按一下 「Add label」(新增標籤),並為標籤指定key和value。

    2. 在「Choose where to store your data」(選擇資料的儲存位置) 部分,執行下列操作:

      1. 選取「位置類型」。

      2. 使用位置類型的下拉式選單,選取要永久儲存 bucket 內物件資料的位置。

        • 如果選取「雙區域」位置類型,也可以勾選相關核取方塊,啟用強化型複製功能。

      3. 如要設定跨 bucket 複製作業,請選取「新增透過 Storage 移轉服務執行的跨 bucket 複製作業」,然後按照下列步驟操作:

        設定跨 bucket 複製作業

        1. 在「Bucket」選單中選取 bucket。
        2. 在「Replication settings」(複製設定) 專區中,按一下「Configure」(設定),即可調整複製工作的設定。

          「Configure cross-bucket replication」(設定跨 bucket 複製作業) 窗格隨即顯示。

          • 如要依物件名稱前置字串篩選要複製的物件,請輸入要納入或排除物件的前置字串,然後按一下「 新增前置字串」。
          • 如要為複製的物件設定儲存空間級別,請從「Storage class」(儲存空間級別) 選單中選取儲存空間級別。如果略過這個步驟,複製的物件預設會使用目的地 bucket 的儲存空間級別。
          • 按一下「完成」。
    3. 在「Choose how to store your data」(選擇資料儲存方式) 部分,執行下列操作:

      1. 選取 bucket 的預設儲存空間級別,或選取「Autoclass」,讓系統自動管理 bucket 資料的儲存空間級別。

      2. 在「Optimize storage for data-intensive workloads」(為資料密集型工作負載提供最理想的儲存空間) 部分,執行下列操作:

        • 如要啟用階層命名空間,請選取「Enable Hierarchical namespace on this bucket」(為這個 bucket 啟用階層命名空間)。

        • 如要啟用 Rapid Cache,請選取「Enable Rapid Cache」(啟用 Rapid Cache),然後按照下列步驟操作:
          1. 如要建立快取,請按一下「設定」。

          2. 在顯示的「Configure cache settings」(設定快取設定) 對話方塊中,按一下所列區域旁的下拉式箭頭,然後選取要建立快取的可用區。

          3. 按一下「完成」。

    4. 在「Choose how to control access to objects」(選取如何控制物件的存取權) 部分,執行下列操作:

      1. 選取 bucket 是否強制執行禁止公開存取。

      2. 選取「Uniform」(統一),啟用 bucket 的統一 bucket 層級存取權。

      3. 如要設定 bucket 的 IP 過濾功能,請按照下列步驟操作:

        1. 在「IP filtering」(IP 過濾) 部分,按一下 「Configure」(設定)。

        2. 如要允許從公開 IP 位址存取,請按照下列步驟操作:

          1. 按一下「Public internet」(公開網際網路)。
          2. 在「Allowed IP range(s)」(允許的 IP 範圍) 欄位中,指定一或多個要允許的 IPv4 位址範圍或 IPv6 CIDR 範圍。例如:192.0.2.0/24 或 2001:db8::/32。

            為避免無法存取 bucket,請加入自己的 IP 位址。

        3. 如要允許從虛擬私有雲網路存取,請按照下列步驟操作:

          1. 按一下「虛擬私有雲網路」。
          2. 針對每個聯播網執行下列操作:

            1. 按一下「Add VPC network」(新增虛擬私有雲網路)。
            2. 在「New VPC network」(新增虛擬私有雲網路) 區段中,指定下列資訊:

              • 在「Project ID」欄位中輸入專案 ID。
              • 在「Network name」(網路名稱) 欄位中,輸入網路名稱。
              • 在「Allowed IP range(s)」(允許的 IP 範圍) 欄位中,輸入一或多個 IPv4 或 IPv6 CIDR 範圍,例如 192.0.2.0/24 或 2001:db8::/32。

                為避免無法存取 bucket,請加入自己的 IP 位址。

            3. 按一下「完成」。
        4. 如要允許其他組織中受信任的 Google Cloud 服務代理和虛擬私有雲網路略過 IP 過濾設定,請按照下列步驟操作:

          1. 按一下「其他設定」。
          2. 在「Google Cloud 服務代理存取權」部分,選取下列其中一個選項:

            • 允許服務代理存取:啟用 Google Cloud 服務 (例如 BigLake、儲存空間分析、Vertex AI 和 BigQuery),在需要存取這個 bucket 時,略過 IP 過濾驗證程序。
            • 拒絕服務代理存取權:對 Google Cloud 服務代理強制執行 IP 篩選器規則。
          3. 在「Cross-organization VPC access」(跨組織虛擬私有雲存取權) 專區,執行下列其中一項操作:
            • 如要允許不同 Google Cloud 組織中指定虛擬私有雲網路的存取權,請將切換鈕設為「允許」位置。
            • 如要禁止從 Google Cloud 組織外部的虛擬私有雲網路存取,請將切換鈕設為「Deny」(拒絕) (預設狀態)。
        5. 依序點選「查看」和「儲存」。
    5. 在「Choose how to protect object data」(選擇保護物件資料的方式) 部分,執行下列操作:

      • 在「Data protection」(資料保護) 下方,選取要為 bucket 設定的選項。

      • 如要變更虛刪除功能在刪除後保留物件的時間長度,請勾選「虛刪除政策」核取方塊,然後選取「設定自訂保留時間長度」選項。然後指定已刪除物件的保留時間。

        如要停用虛刪除功能 (例如 bucket 主要包含短期暫存資料),請取消勾選「Soft delete policy」(虛刪除政策) 核取方塊。

      • 如要選擇加密物件資料的方式,請按一下標示為「Data encryption」(資料加密) 的展開箭頭 ,然後執行下列操作:

  4. 點選「建立」。

gcloud

  1. 確認您已安裝 Google Cloud CLI 526.0.0 以上版本:

    gcloud version | head -n1
    
  2. 如果您安裝的是舊版 gcloud CLI,請更新版本:

    gcloud components update --version=526.0.0
    
  3. 建立 JSON 檔案,定義傳入要求的規則。如需範例和 bucket IP 過濾規則結構的相關資訊,請參閱「Bucket 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 是 bucket IP 過濾設定的模式。有效值為 Enabled 和 Disabled。設為 Enabled 時,IP 篩選規則會套用至 bucket。系統會根據這些規則,評估傳入 bucket 的所有要求。如果設為 Disabled,所有傳入要求都能存取 bucket。

    • RANGE_CIDR 是允許存取 bucket 的公用網路 IPv4 或 IPv6 位址範圍。您可以輸入一或多個位址範圍,並以清單形式呈現。

    • PROJECT_ID 是虛擬私有雲 (VPC) 網路所在的專案 ID。如要設定多個虛擬私有雲網路,您必須指定每個網路所在的專案。

    • NETWORK_NAME 是可存取 bucket 的虛擬私有雲網路名稱。如要設定多個虛擬私有雲網路,您必須為每個網路指定名稱。

    • ALLOW_CROSS_ORG_VPCS 是布林值,表示是否允許在 vpcNetworkSources 中定義的虛擬私有雲網路源自其他組織。這是選填欄位。如果設為 true,要求會允許跨組織虛擬私有雲網路。如果設為 false,要求會將虛擬私有雲網路限制在與 bucket 相同的組織。如未指定,預設值為 false。只有在 vpcNetworkSources 不為空時,這個欄位才會生效。

    • ALLOW_ALL_SERVICE_AGENT_ACCESS 是布林值,指出是否允許服務代理存取 bucket,無論 IP 篩選器設定為何。如果值為 true,其他 Google Cloud 服務可以使用服務代理存取 bucket,不需經過 IP 驗證。

  4. 如要建立具有 IP 篩選規則的 bucket,請在開發環境中執行 gcloud storage buckets create 指令:

    gcloud storage buckets create gs://BUCKET_NAME --ip-filter-file=IP_FILTER_CONFIG_FILE

    其中:

    • BUCKET_NAME 是您要為 bucket 指定的名稱,須符合命名規定。例如:my-bucket。
    • IP_FILTER_CONFIG_FILE 是 JSON 檔案,定義傳入要求的規則。

JSON API

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 建立包含 bucket 設定的 JSON 檔案,其中必須包含 bucket 的 name 和 ipFilter 設定欄位。如需範例和 bucket IP 篩選規則結構的相關資訊,請參閱「Bucket 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 篩選器設定的狀態。有效值為 Enabled 和 Disabled。如果設為 Enabled,IP 篩選規則會套用至 bucket,且所有傳入 bucket 的要求都會根據這些規則進行評估。如果設為 Disabled,只要您具備必要的 IAM 權限,所有傳入要求都能存取 bucket 及其資料,不需經過任何評估。

    • RANGE_CIDR 是允許存取 bucket 的公用網路 IPv4 或 IPv6 位址範圍。您可以輸入一或多個位址範圍,並以清單形式呈現。

    • PROJECT_ID 是虛擬私有雲網路所在的專案 ID。如要設定多個虛擬私有雲網路,您必須指定每個網路所在的專案。

    • NETWORK_NAME 是允許存取 bucket 的虛擬私有雲網路名稱。如要設定多個虛擬私有雲網路,您必須為每個網路指定名稱。

    • ALLOW_ALL_SERVICE_AGENT_ACCESS 是布林值,指出是否允許服務代理存取 bucket,無論 IP 篩選器設定為何。如果值為 true,其他 Google Cloud 服務就能使用服務代理存取 bucket,不需經過 IP 驗證。

    • ALLOW_CROSS_ORG_VPCS 是布林值,表示是否允許在 vpcNetworkSources 中定義的虛擬私有雲網路源自其他組織。這是選填欄位。如果設為 true,要求會允許跨組織虛擬私有雲網路。如果設為 false,要求會將虛擬私有雲網路限制在與 bucket 相同的組織。如未指定,預設值為 false。只有在 vpcNetworkSources 不為空時,這個欄位才會生效。

  3. 使用 cURL 呼叫 JSON API,並傳送 POST bucket 要求:

    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_ID"

    其中:

    • JSON_FILE_NAME 是 JSON 檔案的名稱,其中包含 bucket 的設定。
    • PROJECT_ID 是與 bucket 相關聯的專案 ID。例如:my-project。

Bucket IP 過濾設定

本節提供 bucket IP 過濾 JSON 檔案設定範例,說明如何控管 Cloud Storage bucket 的存取權。您可以使用下列任一範例,授予傳入要求的存取權:

  • 任何公開 IP 位址 (IPv4 或 IPv6):

    下列設定會授予任何公開 IPv4 或 IPv6 位址的存取權,但會封鎖來自任何虛擬私有雲的流量:

    gcloud

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

    JSON API

    {
      "name": "my-bucket",
      "ipFilter": {
        "mode": "Enabled",
        "publicNetworkSource": {
          "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
        },
        "allowAllServiceAgentAccess": false
      }
    }
  • 特定公開 IP 範圍:

    • 以下設定範例會授予 192.0.2.0/24 公開 IPv4 位址範圍的存取權,但會封鎖來自任何虛擬私有雲的流量:

      gcloud

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

      JSON API

      {
        "name": "my-bucket",
        "ipFilter": {
          "mode": "Enabled",
          "publicNetworkSource": {
            "allowedIpCidrRanges": ["192.0.2.0/24"]
          },
          "allowAllServiceAgentAccess": false
        }
      }
    • 以下設定範例會授予 2001:db8::/32 公開 IPv6 位址範圍的存取權,但會封鎖來自任何虛擬私有雲的流量:

      gcloud

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

      JSON API

      {
        "name": "my-bucket",
        "ipFilter": {
          "mode": "Enabled",
          "publicNetworkSource": {
            "allowedIpCidrRanges": ["2001:db8::/32"]
          },
          "allowAllServiceAgentAccess": false
        }
      }
  • 虛擬私有雲網路:使用下列設定,即可授予虛擬私有雲網路中資源的存取權。您可以授予虛擬私有雲中所有 IP 位址或特定 IP 範圍的存取權。在以下範例中,PROJECT_ID 是虛擬私有雲網路所在的專案 ID,NETWORK_NAME 則是有權存取 bucket 的虛擬私有雲網路名稱。

    • 下列範例設定會授予來自特定虛擬私有雲的任何 IPv4 或 IPv6 位址要求存取權,並封鎖來自公開 IP 位址的流量:

      gcloud

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

      JSON API

      {
        "name": "my-bucket",
        "ipFilter": {
          "mode": "Enabled",
          "vpcNetworkSources": [
            {
              "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
              "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
            },
          ],
          "allowAllServiceAgentAccess": false
        }
      }
    • 下列範例設定只會將存取權授予來自與 VM 相關聯的虛擬私有雲要求,該 VM 的外部 IPv4 位址為 192.0.2.0/24,並封鎖來自公開 IP 位址的流量:

      gcloud

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

      JSON API

      {
        "name": "my-bucket",
        "ipFilter": {
          "mode": "Enabled",
          "vpcNetworkSources": [
            {
              "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
              "allowedIpCidrRanges": ["192.0.2.0/24"]
            },
          ],
          "allowAllServiceAgentAccess": false
        }
      }
    • 下列設定範例僅授予來自虛擬私有雲的要求存取權,該虛擬私有雲具有與沒有外部 IP 位址的 VM 相關聯的內部 IPv4 子網路範圍,並封鎖來自公開 IP 位址的流量:

      gcloud

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

      其中:

      IP_ADDRESS 是內部 IPv4 子網路範圍。

      JSON API

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

      其中:

      IP_ADDRESS 是內部 IPv4 子網路範圍。

    • 下列範例設定僅允許來自 VPC 的要求,該 VPC 具有與 VM 相關聯的雙重堆疊 IPv4 和 IPv6 子網路範圍,且外部 IPv6 位址範圍為 2001:db8::/32,並封鎖來自公開 IP 位址的流量:

      gcloud

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

      JSON API

      {
        "name": "my-bucket",
        "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