建立含有 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. 按一下 「建立」。
  3. 在「建立 bucket」頁面中,輸入 bucket 資訊。完成下列每個步驟後,請點選「繼續」前往下一個步驟:

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

      • 輸入符合bucket 名稱要求的全域不重複名稱。

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

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

      1. 選取「位置類型」。

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

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

    3. 在「選擇資料儲存方式」部分,執行下列操作:

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

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

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

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

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

          3. 按一下「完成」。

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

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

      2. 選取「統一」,即可在 bucket 上啟用統一 bucket 層級存取權。

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

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

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

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

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

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

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

            1. 按一下「新增虛擬私有雲網路」。
            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. 在「跨組織虛擬私有雲存取權」部分,執行下列其中一項操作:
            • 如要允許來自不同 Cloud de Confiance 組織中特定虛擬私有雲網路的存取權,請按一下切換按鈕,將其切換至「允許」位置。
            • 如要禁止從貴機構外部的虛擬私有雲網路存取資料,請點選切換鈕,將其設為「拒絕」(預設狀態)。 Cloud de Confiance
        5. 按一下「檢查」,然後按一下「儲存」。
    5. 在「選擇保護物件資料的方式」部分,執行下列操作:

      • 選取「資料保護」下方的任何選項,為 bucket 設定保護措施。

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

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

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

        • 在「預設加密金鑰類型」部分,選取 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,要求會將虛擬私有雲網路限制為與儲存空間相同的機構。如未指定,預設值為 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 位址的存取權,但會封鎖來自任何 VPC 的流量:

    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 位址範圍的存取權,但封鎖來自任何 VPC 的流量:

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

後續步驟