使用授信設定檔作為安全雲端環境的基礎

本指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。

IBM Cloud Identity and Access Management(IAM) 可讓您控制哪些使用者可以查看、建立、使用及管理雲端環境中的資源。 您的環境可能是單一 IBM Cloud 帳戶、多個帳戶或具有多個帳戶群組和帳戶階層的 企業。 使用帳戶資源操作時,通常會涉及使用者及服務 ID。 然而,還有其他選項可用來管理存取權、指派專用權及識別: 授信設定檔

在本指導教學中,您將瞭解授信設定檔、其使用案例,以及如何利用它們來加強安全。 授信設定檔可以作為安全雲端環境的基礎,作為安全雲端解決方案的建置區塊。 在本指導教學中,您將建立應用程式用來執行管理作業的授信設定檔。

目標

  • 瞭解授信設定檔的使用案例
  • 建立受信任的設定檔並管理對雲端資源的存取權
  • 深化您的 Identity and Access Management (IAM) 知識

架構
解決方案架構

  • 應用程式的容器映像檔會從 Container Registry 取回,並部署至 Kubernetes 叢集中的名稱空間。
  • 使用者連接至應用程式。
  • 應用程式會從 Kubernetes 環境讀取特殊存取記號,並將它轉換為授信設定檔的 IAM 存取記號。
  • IAM 將審核事件記錄到IBM Cloud Activity Tracker Event Routing。

開始之前

本指導教學不需要任何安裝,且僅使用 IBM Cloud 主控台

必須將 IBM Cloud Activity Tracker Event Routing 配置為將審核事件路由到IBM Cloud Logs目標實例。 如果目前未在您的帳戶中進行配置,請依照 配置IBM Logs 目標 中所述路由全域稽核事件。

概觀: 授信設定檔

類似於使用者及服務 ID,授信設定檔 是可在 IAM 原則中授與存取權的身分。 授信設定檔的不同之處在於它們無法建立及擁有 API 金鑰。 它們是特定帳戶內的身分,可充當「閘道」,讓某人或其他人員在該帳戶內工作,而不需要 API 金鑰。 他們可以採用該授信設定檔的身分。

您可以在信任設定檔設定的過程中配置該人員或其他項目 (請參閱下面的說明)。 所有一般選項都可用,IBM Cloud API、CLI、任何可用的 SDK、Terraform 或 IBM Cloud 主控台。

在主控台中,作為 IAM 種類的一部分,授信設定檔 具有自己的區段。 在這裡,您可以輕鬆建立及管理它們。 下列擷取畫面顯示對話的第二個步驟,以建立授信設定檔。 您可以 配置如何建立信任,哪個實體可以採用授信設定檔的身分。 它是下列其中一個以上:

  • 聯合使用者
  • 運算資源
  • IBM Cloud 服務
  • 服務 ID

授信設定檔實體類型
授信實體類型

授信設定檔使用案例

授信設定檔是 IBM Cloud內的身分。 它們可以是 IAM 存取群組的成員,因此已指派存取權。 類似於使用者和服務 ID,您也可以直接指派存取權給授信設定檔。 識別特性是能夠配置授信設定檔,以便特定身分或資源可以在其身分下運作。 這些身分和資源甚至可能位於其他帳戶中。 因此,在高階上,使用授信設定檔的 使用案例是容許管理工作

  • 具有給定的一組專用權
  • 在特定身分下
  • 由配置為授信設定檔一部分的一組內容所識別的身分或資源。

下列實務是授信設定檔的這類使用案例,與建立信任的方式不同:

  • 將聯合使用者及其群組成員資格對映至 IBM Cloud 專用權: 配置授信設定檔以讓聯合身分提供者的使用者採用其身分。 您可以定義要考量的 IdP 及使用者屬性。
  • 從專用計算資源執行管理作業: 您可以配置授信設定檔,以透過已知計算資源來建立信任。 此類資源可能是 Kubernetes 叢集中的特定 Pod (包括 Red Hat OpenShift on IBM Cloud) 或虛擬專用雲端中的虛擬伺服器實例 (VSI) (IBM Cloud VPC)。
  • 從已知服務 ID 執行管理作業: 容許來自相同或其他帳戶的服務 ID 採用授信設定檔的身分。
  • 從特殊雲端服務的實例部署雲端資源: 配置 IBM Cloud 服務的實例,由其 CRN (雲端資源名稱) 識別,以容許採用授信設定檔的身分。 一般實務範例是 企業專案部署架構

建立信任

如概觀所概述,在如何建立信任、實體如何採用授信設定檔的身分等方面,有不同的選項可用。

聯合身分

利用公司或企業單一登入 ID 來登入 IBM Cloud 的使用者稱為聯合身分。 單一登入 (SSO) 提供者充當身分提供者 (IdP)。 使用聯合身分的一大優點是 使用者不需要新的認證即可與 IBM Cloud 搭配使用,並且可以繼續使用其公司的 IdP 進行鑑別

聯合身分可以與授信設定檔及 在 IAM 存取群組的動態規則中 搭配使用。

計算資源

在此情況下,不是透過身分提供者所提供的使用者內容,而是透過 計算資源的屬性 來建立信任。 您可以配置為僅信任在中執行的應用程式,例如 Kubernetes 叢集中的特定名稱空間及 Pod,或 VPC 中具有資源群組、地區、子網路及區域的特定值組合的虛擬伺服器實例。 該授信應用程式可以採用授信設定檔的身分,並以指派的專用權執行作業。

根據運算資源使用授信設定檔的好處是此解決方案可避免使用 API 金鑰。 因此,對於如何建立、儲存及保護任何共用 API 金鑰、如何指派及管理專用權,沒有任何需求及挑戰。 假設授信設定檔身分的應用程式只會提取特殊運算資源記號,然後將它轉換為授信設定檔的一般 IAM 存取記號。 此後,可以使用提供用於鑑別的記號來執行預期的作業。

如需計算資源記號的部分背景,請參閱部落格文章 Developer Tricks: Simulate Cloud Security for Local App Development。 瞭解如何使用該記號在本端開發及測試應用程式。

服務 ID

另一種建立信任的方法是指定服務 ID。 服務 ID 可以來自相同或其他帳戶。 因為服務 ID 是所有 IBM Cloud 帳戶之間的唯一身分,所以不需要進一步配置任何屬性。 當該設定就緒時,來自帳戶 A 的服務 ID 現在可以要求採用帳戶 B 中授信設定檔的身分,並執行 (管理) 作業。

雲端服務實例

與服務 ID 類似,可以指定 IBM Cloud 服務實例的雲端資源名稱 (CRN),讓實例成為授信資源。 該服務實例可以位於相同或另一個帳戶中。 現在,其唯一支援的實務範例是 部署架構的企業專案。 作為服務實例,具有可部署架構的專案可以在一個帳戶中集中管理。 透過專案的 CRN 建立信任,它可以採用相同或另一個企業帳戶階層中另一個帳戶的信任設定檔身分,然後使用其資源來部署解決方案型樣。

具有計算資源的授信設定檔

為了將理論付諸實踐,您將授權容器化應用在IBM Cloud帳戶中執行任務。 應用程式部署到 Kubernetes 集群。 它充當計算資源,將用來建立信任,以使用授信設定檔。 您可以在具有多個開啟標籤的 Web 瀏覽器中執行下列所有步驟。 請務必依指示保持瀏覽器標籤開啟。

基於安全理由,應用程式以唯讀模式運作。 它會嘗試收集已部署資源的清單。 您將指派專用權給應用程式,以決定它可以讀取哪些資源。 此外,您將以某種方式部署應用程式,以便只能從 Kubernetes 叢集內存取它,而不是從公用網際網路存取它。

部落格文章 Turn Your Container Turn a Trusted Cloud Identity 討論相同的實務範例。

Kubernetes 叢集作為運算資源

Kubernetes Service 提供一個環境,可在 叢集中執行的容器中部署高可用性應用程式。Kubernetes

如果您有一個現有的群集,您可以跳過這一節,在本教學的其餘部分,群集名稱參考為 mycluster-tpcr,只需用您的群集名稱代替即可。 請注意 1.21的最低必要 Kubernetes 版本。

在本指導教學中,具有一個 (1) 區域、一個 (1) 工作者節點及最小可用大小(規格)的最小叢集就足夠。 需要 最低 Kubernetes 版本 1.21。 建立叢集時,請務必選取適當的版本。

開啟 Kubernetes 叢集,然後按一下 建立叢集。 如需根據叢集類型的詳細資料,請參閱下面參照的文件。 摘要:

  • 按一下標準層級群集
  • 如需 VPC 基礎架構上的 Kubernetes,請參閱參考文件 建立 VPC 叢集
    • 按一下 建立 VPC:
      • 輸入 VPC 的名稱
      • 選擇與叢集相同的資源群組。
      • 按一下建立
    • 將 Public Gateway 連接至您建立的每一個子網路:
      • 導覽至 虛擬專用雲端
      • 按一下先前建立用於叢集的 VPC。
      • 向下捲動至子網路區段,然後按一下子網路。
      • Public Gateway 區段中,按一下 已分離,將狀態變更為 已連接
      • 按一下瀏覽器 上一步 按鈕,以回到 VPC 詳細資料頁面。
      • 重複前三個步驟,將公用閘道連接至每一個子網路。
  • 若為標準基礎架構上的 Kubernetes,請參閱參考文件 建立標準叢集
  • 選擇資源群組。
  • 取消勾選除了一個以外的所有區域。
  • 縮減至每個區域 1 個 工作者節點
  • 選擇最小的 工作者節點儲存區特性
  • 對於 叢集名稱,請使用 mycluster-tpcr
  • 關閉此示範叢集的所有安全選項,完成本教學後將刪除這些選項。 對於您創建的其他集群,仔細評估這些內容非常重要。

佈建叢集時,請保持開啟瀏覽器 (叢集概觀) 標籤,稍後即可使用。 儘管如此,您仍可以繼續進行後續步驟。

建立授信設定檔

  1. 在新的瀏覽器標籤 (IAM 授信設定檔) 中,使用頂端導覽 管理 > 存取權 (IAM),然後在左側使用 授信設定檔,以進入 授信設定檔 概觀。 然後建立新的信任設定檔。
  2. 使用 TPwithCR 作為 名稱,並鍵入簡短的 說明,例如 Test trusted profile with compute resource。 然後,按一下 繼續
  3. 在第二個表單標籤的 選取授信實體類型 下,會挑選 計算資源,並出現 建立信任關係 對話框。 在那裡,選擇 Kubernetes 作為 計算服務類型
  4. 接下來,您可以決定所有或特定服務資源。
    • 按一下 特定資源,即會出現下一個表單欄位。
    • 輸入或選取實例中,按一下 新增資源。 然後,在 容許存取 欄位中,選取 Kubernetes 叢集 mycluster-tpcr
    • 然後,輸入 tptest 作為 名稱空間的值。 將 服務帳戶 的欄位保留為預設值。
    • 按一下繼續完成。
  5. 接下來,按一下 存取原則。 在服務清單中,選取 所有已啟用身分及存取權的服務,然後按 下一步。 使用 所有資源,再按 下一步,然後選取 檢視器,再按 下一步。 在 角色和動作區段中,選取 讀者 (適用於 服務存取權 ) 和 檢視者 (適用於 平台存取權)。 完成時,請按 下一步,最後 新增
  6. 檢閱右側的 摘要,然後 建立 具有顯示的信任關係及列出的存取權的授信設定檔。 讓瀏覽器標籤保持開啟狀態,以供稍後使用。

利用存取群組來指派存取權是最佳作法。 為了簡單起見,我們選擇透過直接存取原則來指派唯讀存取權。 建議建立具有已指派專用權的存取群組,然後使授信設定檔成為其成員。

部署應用程式

有了 Kubernetes 叢集和授信設定檔,現在可以部署簡式測試應用程式。 應用程式及配置的原始碼位於 GitHub 儲存庫 trusted-profile-enterprise-security中。 您不需要它來進行部署,但可能對它的運作方式感興趣。

  1. 在瀏覽器標籤 叢集概觀中,檢查叢集是否已完整部署。 在單節點配置中,入口狀態可能會報告警告。 您可能需要刷新瀏覽器並檢查其他複選標記是否為綠色。 如果是這種情況,請按一下 Kubernetes 儀表板,即會開啟新的瀏覽器標籤 (Kubernetes 儀表板)。

  2. 在左上方,尋找名稱空間選取器並切換至 所有名稱空間

  3. 在右上方,按一下 + 以建立新的資源。 將下列內容貼至文字表單 從輸入建立

    apiVersion: v1
    kind: Namespace
    metadata:
      name: tptest
      labels:
        name: tptest
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: trustedprofile-test
      namespace: tptest
    spec:
      ports:
      - port: 8080
        targetPort: 8080
        protocol: TCP
      type: ClusterIP
      selector:
        app: tptest
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: trustedprofile-test-deployment
      namespace: tptest
    spec:
      selector:
        matchLabels:
          app: tptest
      replicas: 1
      template:
        metadata:
          labels:
            app: tptest
        spec:
          containers:
          - name: tptest-container
            image: icr.io/solution-tutorials/tutorial-trusted-profile-enterprise-security:v1.0.3
            imagePullPolicy: Always
            ports:
            - containerPort: 8080
            volumeMounts:
            - mountPath: /var/run/secrets/tokens
              name: sa-token
          serviceAccountName: default
          volumes:
          - name: sa-token
            projected:
              sources:
              - serviceAccountToken:
                  path: sa-token
                  expirationSeconds: 3600
                  audience: iam
    

    然後,按一下 上傳 以建立應用程式的資源。 它包括新的 Kubernetes 名稱空間 tptest、部署及具有 Pod 的服務。

    您可以找到 GitHub 上上述 YAML 配置的原始碼

  4. 在左導覽直欄中,按一下 部署,以檢查新部署 trustedprofile-test-deployment 的狀態。 接下來,按一下相同導覽直欄中的 Pod,並注意到名稱以 trustedprofile-test-deployment 開頭的 Pod。 顯示狀態為綠色之後,請移至下一個區段。

測試授信設定檔

使用受信任的設定檔及 Kubernetes 叢集,並將執行中的應用程式放在適當的位置,即可進行測試。 首先開啟一個基於瀏覽器的 shell 來執行指令,一個用於容器日誌的選項卡,另一個用於IBM Cloud Logs日誌的選項卡。

  1. 在具有 Pod 的目前作用中標籤 Kubernetes 儀表板 中,按一下右側具有三個點的功能表,然後在該功能表中 用滑鼠右鍵按一下 執行程式。 選擇在新標籤 (儲存器 Shell) 中開啟鏈結。 它會開啟執行中容器的 Shell。 仍然在瀏覽器標籤 Kubernetes 儀表板中,再次按一下三個點功能表,然後以滑鼠左鍵按一下 日誌。 在新的三個點功能表中,啟用 自動重新整理

    最後,開啟包含 IBM Cloud Logs服務的選項卡,選擇 Cloud Logs 選項卡,然後點選正在接收審核事件的實例的名稱。

  2. 在瀏覽器標籤 container shell中,在 Shell 中執行下列指令以測試應用程式:

    curl -s localhost:8080
    

    上述應該會傳回具有 codeversionresult 的 JSON 物件。 您應該會在 Kubernetes 儀表板 標籤中看到一些新的日誌活動,其中包含日誌。 接下來,在 儲存器 Shell 標籤中,執行下列指令:

    curl -s localhost:8080/api/listresources_crn | jq
    

    指令會呼叫應用程式,嘗試擷取帳戶中的資源清單,但未提供授信設定檔名稱。 結果應該是具有錯誤訊息的格式化 JSON 物件。

  3. 重複上述指令,但現在指定要使用哪一個授信設定檔:

    curl -s localhost:8080/api/listresources_crn?tpname=TPwithCR | jq
    

    現在,結果應該格式化為 JSON 物件,其中包含帳戶中資源的相關資訊。 為了可讀性,只會傳回資源 CRN。 如需完整物件詳細資料,請使用 localhost:8080/api/listresources。 您也可能想要嘗試不同的、不存在的信任設定檔名稱,並檢查錯誤訊息。

    呼叫時,應用程式會先讀取運算資源的記號。 然後,它會針對指定的授信設定檔 將記號轉換為 IAM 存取記號。 最後,它會呼叫 IBM Cloud 資源控制器 API,以擷取服務實例的相關資訊。 結果取決於授信設定檔的已配置專用權。 如果有興趣,請檢查 應用程式原始碼

  4. 切換到IBM Cloud Logs瀏覽器標籤並使用底部的搜尋框尋找術語 profile。 這必須是配置為審核事件目標的實例。 它應該返回至少一行帶有 IAM Identity Service: login.computeresource-token TPwithCR 的內容。Open the info panel 要展開記錄以檢查詳細信息,請尋找啟動器部分。 它會列出用於要求的授信設定檔,以及計算資源的相關資訊。 authName 應與Kubernetes儀表板瀏覽器標籤中的部署相符。

    IBM Cloud Logs顯示可信任設定檔請求的詳細資訊
    活動日誌中的詳細資訊

  5. 現在,請造訪瀏覽器標籤 Kubernetes 儀表板,並檢查容器日誌。 應用程式會在 JWT 存取記號 上列印詳細資料,它會使用該 JWT 存取記號來進行鑑別,以列出資源。 檢查個別鍵值組,包括 sub (subject) 兩次。 它們與授信設定檔及運算資源相關。

  6. 切換至具有 TPwithCR 配置的瀏覽器標籤 IAM 授信設定檔。 在表單中,按一下 存取 標籤,然後在 已啟用所有身分及存取權的服務的三個點功能表上,選取 編輯。 現在,它應該會顯示 TPwithCR。 按一下「資源」的 編輯,然後選取 特定資源。 挑選 地區 作為 屬性類型,例如 法蘭克福。 按 儲存以完成。

  7. 移回瀏覽器標籤 container shell,然後重新執行此指令以列出資源:

    curl -s localhost:8080/api/listresources?tpname=TPwithCR | jq
    

    結果可能不同於上述,視您在帳戶中部署其他資源的位置而定。 重新造訪IBM Cloud Logs日誌Kubernetes儀表板瀏覽器標籤以了解新的日誌活動。

  8. 您可能想要回到步驟 6 並重新編輯存取原則,然後使用步驟 7 重新測試。 編輯存取原則的部分構想是新增區域或限制為特定服務,而不是 所有已啟用身分及存取權的服務

移除資源

當您完成使用授信設定檔及計算資源來測試上述實務範例時,您可以遵循下列步驟來移除資源:

  1. 若要刪除 Kubernetes 叢集,請按一下瀏覽器標籤 叢集概觀右上方的 動作,然後按一下 刪除叢集
  2. 在選項卡中IAM 可信任設定檔與受信任的個人資料 TP與CR,點選行動消除刪除受信任的設定檔。

視資源而定,可能不會立即刪除它,但會保留 (依預設會保留 7 天)。 您可以透過永久刪除資源或在保留期間內還原資源來收回資源。 請參閱本文件,以瞭解如何 使用資源收回