建立含有 IP 篩選規則的 bucket

本頁說明如何建立含有 IP 篩選規則的 bucket。建立具有 IP 過濾功能的 bucket 後,系統會根據 bucket IP 過濾規則中指定的 IP 位址,檢查傳入要求,控管 bucket 的存取權。詳情請參閱「bucket IP 篩選」。

如要瞭解如何建立或更新現有 bucket 的 IP 篩選規則,請參閱「更新 bucket IP 篩選規則」。

必要的角色

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

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

所需權限

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

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

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

建立含有 IP 過濾規則的 bucket

控制台

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

    前往「Buckets」(值區) 頁面

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

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

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

      • 如要新增值區標籤,請按一下 展開箭頭,展開「標籤」部分,然後按一下 「新增標籤」,並為標籤指定 key 和 value。

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

      1. 選取「位置類型」。

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

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

    3. 在「Choose how to store your data」(選擇資料儲存方式) 部分,執行下列操作:

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

      2. 在「為資料密集型工作負載提供最理想的儲存空間」部分,執行下列操作:

        • 如要啟用階層命名空間,請選取「為這個 bucket 啟用階層命名空間」。

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

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

          3. 按一下「完成」。

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

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

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

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

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

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

          1. 按一下「Public internet」(公開網際網路)。
          2. 在「允許的 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」(新增虛擬私有雲網路) 區段中,指定下列資訊:

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

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

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

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

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

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

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

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

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

        • 在「Default encryption key type」(預設加密金鑰類型) 區段中,選取 bucket 的預設加密金鑰。如果選取「Cloud KMS key」(Cloud KMS 金鑰),請提供 Cloud Key Management Service 金鑰。
        • 在「加密機制強制執行規則」部分的「金鑰類型」,選取要允許或限制 bucket 中新物件使用的加密類型。
  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,其他 Cloud de Confiance 服務可以使用服務代理存取 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 是允許存取值區的虛擬私有雲網路名稱。如要設定多個虛擬私有雲網路,您必須為每個網路指定名稱。

    • ALLOW_ALL_SERVICE_AGENT_ACCESS 是布林值,表示是否允許服務代理程式存取 bucket,無論 IP 篩選器設定為何。如果值為 true,其他 Cloud de Confiance 服務可以使用服務代理存取 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.s3nsapis.fr/storage/v1/b?project=PROJECT_ID"

    其中:

    • JSON_FILE_NAME 是包含 bucket 設定的 JSON 檔案名稱。
    • 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
        }
      }
    • 以下範例設定只會授予存取權給來自虛擬私有雲的請求,該虛擬私有雲與具有外部 IPv4 位址的 VM 相關聯,並封鎖來自公開 IP 位址的流量:192.0.2.0/24

      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
        }
      }

後續步驟