使用環境定義型限制來保護 Virtual Private Cloud (VPC) 基礎架構服務

基於情境的限制功能,讓帳戶擁有者與管理員能夠依據存取請求的情境,為 IBM Cloud® 資源定義並執行存取限制。 可透過基於上下文的限制及身分與存取管理 (IAM) 政策來控制對 VPC 基礎架構服務的存取權限。

這些限制措施與基於身分的傳統 IAM 政策協同運作,提供額外的防護層。 與 IAM 原則不同,環境定義型限制不會指派存取權。 基於上下文的限制會檢查存取請求是否來自您所設定的允許上下文。 由於身份與存取管理(IAM)存取權限與基於情境的限制皆能執行存取管控,即使憑證遭竊或管理不當,基於情境的限制仍能提供防護。 如需更多資訊,請參閱 「何謂基於上下文的限制」。

使用者必須在 VPC 基礎架構服務中具備管理員角色,才能建立、更新或刪除針對 VPC 基礎架構服務的規則。 使用者必須在基於上下文的限制服務中具備編輯者或管理員角色,方能建立、更新或刪除網路區域。 在基於上下文的限制服務中,具有檢視者角色的使用者僅能將網路區域新增至規則。

基於上下文的限制服務會在每次執行基於上下文的政策時產生稽核記錄。 如需相關資訊,請參閱 監視環境定義型限制。

若要開始使用基於上下文的限制來保護您的 VPC 基礎架構服務,請參閱《 運用基於上下文的限制來保護您的資源 》教學指南。

VPC 基礎架構服務如何與環境定義型限制整合

VPC 基礎架構服務是由多個子服務組成的複合式服務。 可針對亞馬遜雲端主機( IBM Cloud VPC )或其任何子服務建立基於情境的限制;例如:子網、虛擬伺服器執行 個體及 亞 馬遜雲端硬碟( Block Storage )卷。

請 參閱規則建立章節,了解如何為各服務建立具備所需屬性的規則。

建立網路區域

網路區域代表在其中建立存取權要求的 IP 位址容許清單。 它定義了一組由下列屬性所指定的一個或多個網路位置:

  • IP 位址,包括個別位址、範圍或子網路
  • VPC
  • 服務參照,容許從其他 IBM Cloud® 服務存取

服務參照

服務參照(定義為網路區域的一部分)允許指定服務與基於上下文的限制政策所針對的受限資源或 API 進行通訊。 下表列出在 VPC 基礎架構服務的上下文中使用基於上下文的限制時,必須包含的服務參照。 當您考慮在網路區域中添加哪些服務引用時,亦可檢視帳戶中的 服務間 IAM 授權 設定。 您可在帳戶中找到服務間授權功能:前往 「管理」→「存取權限(IAM)」,然後選取「授權」標籤頁。

基於上下文的限制所需的服務引用
具有環境定義型限制的服務 受影響的服務 網路區域所需的服務參考
Cloud Object Storage VPC 基礎架構服務 (is)
Key Protect Cloud Block Storage (server-protect),
File Storage for VPC (is.share)
Hyper Protect Crypto 服務 Cloud Block Storage (server-protect),
File Storage for VPC (is.share)
虛擬伺服器實例 VPC 基礎架構服務 (is)
各種 VPC 基礎架構服務- Block Storage 磁區、安全群組、子網路 IBM Kubernetes Service (containers-kubernetes)
Secrets Manager VPC 基礎架構服務 (is)

使用 API 建立網路區域

您可以使用 create-zone 指令來建立網路區域。 如需更多資訊,請參閱 API 文件。

VPC 基礎架構服務的 serviceRef 屬性為 is。 Cloud Block Storage 是 server-protect,而 File Storage for VPC 是 is.share。

{
  "name": "Example zone 1",
  "description": "",
  "addresses": [
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "is"
      }
    }
  ]
}
{
  "name": "Example zone 1",
  "description": "",
  "addresses": [
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "server-protect"
      }
    }
  ]
}

使用 CLI 建立網路區域

  1. 若要從命令列介面建立網路 區域,請安裝 CBR CLI 外掛程式。

  2. 使用 指令 cbr-zone-create 將網路位置、虛擬私有雲 (VPC) 和服務參照新增至網路區域。 如需更多資訊,請參閱 CBR CLI 參考 文件。

    要查找可用服務參考目標的清單,請執行 命令ibmcloud cbr service-ref-targets。 VPC 基礎架構服務的 service_name 價格為 is。 Cloud Block Storage 是 server-protect,而 File Storage for VPC 是 is.share。

    以下範例指令將名為 VPC Infrastructure Services (在 IBM Cloud® 控制台中)的 is 服務新增至網路區域。

    ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=is
    

    以下範例命令添加 server-protect 服務,簡稱Cloud Block Storage在IBM Cloud®控制台,到網路區域。

    ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=server-protect
    

從主控台建立網路區域

  1. 決定您要新增至容許清單的資源。
  2. 請 檢查服務參考 部分,以確認是否需要為您的網路區域新增任何服務參考。
  3. 請遵循下列步驟,以 在主控台中建立環境定義型限制。

建立規則

在 VPC 基礎架構服務中,每個子服務都需要在基於上下文的規則中具備特定屬性。

當您使用 API、Terraform 或 IBM Cloud CLI 來建立、更新或刪除基於上下文的 IBM Cloud 限制時,可透過資源屬性指定目標 VPC Infrastructure 資源。

如需對應於個別 VPC 資源的資源屬性,請參閱 VPC 資源屬性。

您可以輸入物件的 ID 來選取資源。 或者,您可以使用 * 萬用字元來選取所有適用的資源。 例如,屬性 vpcId:* 設定環境定義型限制,以套用至帳戶中的所有 VPC。 您也可以在指令中指定要套用原則的資源群組。

使用 API 建立規則

請檢閱下列範例要求,以建立規則。 如欲進一步了解有關 v1/rules API,請參閱 API 文件。

建立規則之後,您可能需要 10 分鐘才能更新該規則。

以下範例有效負載建立了一個規則,可保護虛擬伺服器實體,並只允許從指定的網路區域透過專用端點存取。僅允許從指定的網路區域透過專用端點存取。

{
  "contexts": [
    {
      "attributes": [
        {
          "name": "endpointType",
          "value": "private"
        },
        {
          "name": "networkZoneId",
          "value": "45ec64065b7c2bf84b3edec803335111"
        }
      ]
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "resourceGroupId",
          "value": "1171749e3a8545069d04e6fca1ded18f"
        },
        {
          "name": "serviceName",
          "value": "is"
        },
        {
          "name": "instanceId",
          "value": "*"
        }
      ]
    }
  ]
}

使用 CLI 建立規則

  1. 若要從 CLI 建立規則,請 安裝 CBR CLI 外掛程式。
  2. 使用 ibmcloud cbr rule-create 指令 來建立 CBR 規則。 如需相關資訊,請參閱 CBR CLI 參考資料。

以下範例為執行規則。 您可以透過新增 --enforcement-mode report,讓它們僅報告。

下列範例 CLI 指令會針對現行帳戶中的所有虛擬伺服器實例建立環境定義型限制規則:

ibmcloud cbr rule-create  --zone-id a7eeb5dd8e6bdce670eba1afce18e37f --description "Test CBR for VSIs" --service-name is --resource-attributes "instanceId=*"

下列 CLI 指令範例會針對現行帳戶中的特定區塊儲存空間磁區建立環境定義型限制規則:

ibmcloud cbr rule-create --zone-id a7eeb5dd8e6bdce670eba1afce18e37f --description "Test CBR for volume" --service-name is --resource-attributes "volumeId=UUID_OF_THE_VOLUME"

下列範例 CLI 指令會針對現行帳戶中的所有虛擬伺服器實例建立環境定義型限制規則,並限制存取專用端點:

ibmcloud cbr rule-create --context-attributes 'endpointType=private' --zone-id a7eeb5dd8e6bdce670eba1afce18e37f --description "Test CBR for VSIs" --service-name is --resource-attributes "instanceId=*"

下列範例 CLI 指令會針對資源群組中的所有虛擬伺服器實例建立環境定義型限制規則,並限制存取專用端點:

ibmcloud cbr rule-create --context-attributes 'endpointType=private' --zone-id a7eeb5dd8e6bdce670eba1afce18e37f --description "Test CBR for VSIs" --service-name is --resource-attributes "instanceId=*" --resource-group-id 1171749e3a8545069d04e6fca1ded18f

在控制台中建立規則

  1. 移至 IBM Cloud® 主控台中的 管理 > 環境定義型限制。

  2. 選取「規則」,然後按一下「建立」。

  3. 選取 VPC 基礎架構服務,然後按 下一步。

  4. 將規則限定為 所有資源 或 特定資源。 如需詳細資訊,請參閱 保護 VPC 基礎結構服務資源。 按一下繼續。

  5. 定義容許的端點類型。

    • 保持將切換設為 否,以容許所有端點類型。
    • 將切換參數設為 是,只容許特定的端點類型,然後從清單中選擇。
  6. 選擇現有的網路區域,或點擊「建立」來建立新的網路區域。

    環境定義會定義可從中存取資源的位置,有效地將網路區域鏈結至規則。

  7. 點擊「新增」以將您的設定新增至摘要中。 按下一步。

  8. 命名您的規則,並選取您要如何施行它。 然後,按一下建立。

監視 VPC 基礎架構服務中的環境定義型限制

基於上下文的限制服務會在每次執行基於上下文的政策時產生稽核記錄 如需相關資訊,請參閱 監視環境定義型限制。

疑難排解因環境定義型限制而導致的失敗

403 未授權錯誤訊息

當請求因存取權限不當而遭拒絕,或請求來源位於基於上下文的限制規則所定義的網路區域之外時,錯誤回應將類似以下範例:

CLI回應中發生403未授權錯誤

Error code: not_authorized and
Error message: the provided token is not authorized
Trace ID: b266a31c-b359-4ecb-8b81-a27c1b2cdb7b

IBM Cloud 控制台發生 403 未授權錯誤

reference_id b266a31c-b359-4ecb-8b81-a27c1b2cdb7b
code not_authorized
message the provided token is not authorized

API回應中發生403未授權錯誤

"code":"not_authorized",
"message":"the provided token is not authorized to list floating-ips in this account"
"trace":"b266a31c-b359-4ecb-8b81-a27c1b2cdb7b"

定位基於上下文的限制事件

您可以使用 Trace ID 或 Reference ID 的值,在 IBM Cloud Logs 範例中搜尋基於上下文限制服務所產生的事件。 requestData.environment 區段顯示呼叫的來源 IP 位址和其他資訊,您可以使用這些資訊來確認拒絕授權的原因。 requestData.action 和 requestData.resource 欄位可以用來判斷拒絕存取哪個基礎資源。

以下範例為基於上下文的限制事件。 為提高可讀性,部分欄位已被移除。

{
  "level": "critical",
  "action": "context-based-restrictions.policy.eval",
  "message": "Context based restriction rendered a deny",
  "severity": "critical",
  "correlationId": "TXID-b266a31c-b359-4ecb-8b81-a27c1b2cdb7b-df2f912c-80a1-422c-8b17-6092651fea00",
  "requestData": {
    "action": "is.vpc.vpc.create",
    "reqOrder": 0,
    "environment": {
      "attributes": {
        "ipAddress": "192.168.0.1",
        "networkType": "public"
      }
    },
    "resource": {
      "attributes": {
        "accountId": "67db3d7ff3f34220b40e2d81480754c9",
        "resource": "NEWRESOURCE",
        "vpcId": "NEWRESOURCE",
        "resourceGroupId": "d272ce832535498e9142b557ff8638ed",
        "region": "au-syd",
        "serviceName": "is",
        "resourceType": "vpc"
      }
    },
    "subject": {
      "attributes": {
        "scope": "ibm openid",
        "token.account.bss": "67db3d7ff3f34220b40e2d81480754c9",
        "id": "IBMid-550009FB7N"
      }
    }
  },
  "responseData": {
    "decision": "Deny",
    "isEnforced": true
  }
}

然後,您可以使用相同的追蹤 ID 或參考 ID 來查看 IBM Cloud Logs 範例中的特定 VPC Infrastructure 服務事件。

{
  "action": "is.vpc.vpc.create",
  "outcome": "failure",
  "message": "Virtual Private Cloud: create vpc -failure",
  "severity": "critical",
  "dataEvent": false,
  "logSourceCRN": "crn:v1:bluemix:public:is:au-syd:a/67db3d7ff3f34220b40e2d81480754c9::vpc:",
  "saveServiceCopy": true,
  "initiator": {
    "id": "IBMid-ABCDEFGH",
    "typeURI": "service/security/account/user",
    "name": "test@ibm.com",
    "authnName": "test",
    "authnId": "IBMid-ABCDEFGH",
    "host": {
      "address": "192.168.0.1",
      "addressType": "IPv4"
    },
    "credential": {
      "type": "token"
    }
  },
  "target": {
    "id": "crn:v1:bluemix:public:is:au-syd:a/67db3d7ff3f34220b40e2d81480754c9::vpc:",
    "typeURI": "is.vpc/vpc",
    "name": "",
    "resourceGroupId": "crn:v1:bluemix:public:resource-controller::a/67db3d7ff3f34220b40e2d81480754c9::resource-group:d272ce832535498e9142b557ff8638ed"
  },
  "reason": {
    "reasonCode": 403,
    "reasonType": "Forbidden",
    "reasonForFailure": "Your access token is invalid or does not have the necessary permissions to perform this task"
  },
  "requestData": {
    "generation": "2",
    "requestId": "b266a31c-b359-4ecb-8b81-a27c1b2cdb7b"
  },
  "responseData": {
    "responseURI": "/v1/vpcs/"
  }
}

您也可以使用資源 ID 來搜尋事件。 資源 ID 是一個 UUID,並且是 CRN 中的最後一個 ID。 參見以下範例

crn:v1:bluemix:public:is:au-syd:a/67db3d7ff3f34220b40e2d81480754c9::vpc:<resourceID>

供應資源的要求不包含資源 ID。

若您在中未找到基於上下文 IBM Cloud Logs 的限制事件,則存取權可能因IAM存取政策而遭拒絕。 如需更多資訊,請參閱 VPC IAM 入門指南。

具有環境定義型限制的用戶端至網站 VPN 資料平面影響

若 您 在客戶端至站點 VPN 的客戶端驗證設定中啟用使用者 ID 與密碼驗證,並在 VPC 資源上建立基於情境的規則,則客戶端連線至 VPN 的行為將受基於情境的限制影響。 如果 VPN 用戶端遠端 IP 不在 網路區域中,則 VPN 伺服器的連線會傳回 Auth Failed 錯誤。

VPN 用戶端連接至 VPN 伺服器之後,對 VPE 端點或雲端服務端點 (CSE) 的要求會受到環境定義型限制的控制。 此外,要求的來源 IP 是 VPC 雲端服務端點來源位址。 請確定 VPC CSE 來源端位址位於 CBR 網路區域中; 否則會拒絕要求。

限制