將端對端安全套用至雲端應用程式

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

本指導教學會引導您使用 IBM Cloud® 型錄中提供的關鍵安全服務,並說明如何將這些服務一起使用。 提供檔案共用的應用程式將落實安全概念。

若要建置完整的應用程式架構,必須清楚瞭解潛在的安全風險以及如何防範此類威脅。 應用程式資料是一種不能遺失、洩露或被盜的關鍵資源。 此外,靜態和動態資料應透過加密技術進行保護。 加密靜態資料可以防止資訊洩露,就算資訊遺失或被盜也不會外洩。 透過 HTTPS、SSL 和 TLS 等方法加密動態資料(例如,在網際網路上傳輸的資料)可防止竊聽和所謂的攔截式攻擊。

在許多應用程式中,另一個常見要求是針對使用者對特定資源的存取權進行鑑別和授權。 這可能需要支援不同的鑑別方法:使用社交身分的客戶和供應商、來自雲端管理的目錄的夥伴以及來自組織的身分提供者的員工。

目標

  • 使用您自己的加密金鑰加密儲存桶中的內容。
  • 要求使用者在存取應用程式前進行驗證。
  • 監控和稽核與安全性相關的 API 呼叫以及其他跨雲端服務的動作。

本指導教學提供一個範例應用程式,讓使用者群組將檔案上傳到共用儲存區,並透過可共用鏈結提供對這些檔案的存取權。 應用程式以 Node.js 撰寫,並以儲存器形式部署至 IBM Cloud Kubernetes Service 或 Red Hat OpenShift on IBM Cloud。 它利用多種與安全相關的服務和特性來改善應用程式的安全狀態。

本教學適用於在 Classic Infrastructure 或 VPC Infrastructure 中執行的群集。

架構
教學的架構圖

  1. 使用者連接至應用程式。
  2. 如果使用自訂網域和 TLS 憑證,憑證會由 Secrets Manager 管理和部署。
  3. App ID 可保護應用程式並將使用者重新導向到鑑別頁面。 使用者還可以進行註冊。
  4. 應用程式會根據儲存在 Container Registry 的映像檔,在 Kubernetes 叢集裡執行。 系統會自動掃描此映像檔以找出漏洞。
  5. 已上傳的檔案儲存在 Object Storage 中,隨附的 meta 資料儲存在 IBM Cloudant 中。
  6. 物件儲存體儲存區 App ID及 Secrets Manager 服務會利用使用者提供的金鑰來加密資料。
  7. 應用程式管理活動由IBM Cloud Activity Tracker Event Routing記錄並路由到IBM Cloud Logs進行分析。

開始之前

本指導教學需要:

  • IBM Cloud CLI,
    • IBM Cloud Kubernetes Service 外掛程式 (kubernetes-service),
    • Container Registry 外掛程式 (container-registry),
  • kubectl 以與 Kubernetes 叢集互動,
  • git,以複製原始碼儲存庫。

您將在 開始使用解決方案指導教學 手冊中找到下載並安裝適用於您作業環境的這些工具的指示。

若要避免安裝這些工具,您可以從 IBM Cloud 主控台使用 Cloud Shell。

建立服務

在下一節中,您將建立應用程式所使用的服務。

決定應用程式的部署位置

您建立之所有資源的 位置 及 資源群組 應該符合 Kubernetes 叢集的 位置 及 資源群組。

擷取使用者和應用程式活動

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

在本指導教學結束時,您可檢閱藉由完成本指導教學的各步驟產生的事件。

為應用程式建立叢集

IBM Cloud Kubernetes Service 和 Red Hat OpenShift on IBM Cloud 提供在 Kubernetes 叢集裡執行的容器中部署高可用性應用程式的環境。

如果您已有 Kubernetes 叢集,且希望在本教學中重用,請跳過此節,在本教學的其餘部分中,叢集名稱將引用為 secure-file-storage-cluster,只需用您的叢集名稱替代即可。

在本指導教學中,具有一個 (1) 區域、一個 (1) 工作者節點及最小可用大小(規格)的最小叢集就足夠。 若要建立IBM Cloud Kubernetes Service集群,請依照 建立 VPC 集群 或 建立經典集群 的步驟進行。 若要建立Red Hat OpenShift on IBM Cloud集群,請依照 建立 VPC 集群 或 建立經典集群 的步驟進行。

使用您自己的加密金鑰

Key Protect 可協助您跨 IBM Cloud 服務為應用程式佈建加密金鑰。Key Protect 和 IBM Cloud Object Storage 一起合作以保護靜態資料。 在本節中,您將為儲存空間儲存區建立一個根金鑰。

  1. 建立 Key Protect的實例。
    1. 選擇位置。
    2. 將名稱設定為 secure-file-storage-kp。
    3. 選擇要建立服務實例的資源群組,然後按一下建立。
  2. 在金鑰下,按一下新增按鈕,建立新的根金鑰。 它將被用來加密儲存桶和 App ID 資料。
    1. 將「金鑰類型」設定為根金鑰。
    2. 將名稱設定為 secure-file-storage-root-enckey。
    3. 然後 新增金鑰。

自帶金鑰 (BYOK) 可藉由匯入現有根金鑰來提供。

設定用於使用者檔案的儲存空間

檔案分享應用程式會將檔案儲存到 Object Storage。 檔案與使用者之間的關係以元資料的形式儲存在 IBM Cloudant 資料庫中。 在本節中,您將建立和配置這些服務。

內容的儲存區

  1. 建立 Object Storage的實例。
    1. 選取 標準 方案,並將 名稱 設為 secure-file-storage-cos。
    2. 使用與先前服務相同的資源群組,然後按一下建立。
  2. 在服務認證下,新建認證。
    1. 將名稱設定為 secure-file-storage-cos-acckey。
    2. 針對 角色,選取 撰寫者。
    3. 在 進階選項下,勾選 包括 HMAC 認證。 產生預先簽署的 URL 時需要此參數。
    4. 按一下新增。
    5. 記下憑證。 您將在之後的步驟中需要它們。
  3. 從導覽資訊看板中按一下 端點:
    1. 將 備援 設為 地區,並將 位置 設為目標位置:
    2. 針對 Classic 基礎結構:複製私人服務端點。 稍後在應用程式配置中將使用此端點。
    3. 針對 VPC 基礎結構:複製 Direct 服務端點。 稍後在應用程式配置中將使用此端點。

在建立儲存區之前,您將授與 Object Storage 服務實例對 Key Protect 服務實例中儲存的根金鑰的存取權。

  1. 移至 IBM Cloud 主控台中的 管理> 存取權(IAM)> 授權。
  2. 按一下建立按鈕。
  3. 在來源服務功能表中,選取 Cloud Object Storage。
  4. 切換至 根據所選屬性的資源,勾選 來源服務實例 並選取先前建立的 Object Storage 服務實例。
  5. 在目標服務功能表中,選取 Key Protect。
  6. 切換至 基於所選屬性的資源,勾選 實例 ID,選取先前建立的 Key Protect 服務實例。
  7. 啟用讀者角色。
  8. 按一下授權按鈕。

最後,建立儲存區。

  1. 從 資源清單 下 儲存體存取 Object Storage 服務實例。
  2. 按一下建立水桶,然後按一下自訂您的水桶。
    1. 對 name 使用唯一值,例如 <your-initials>-secure-file-upload。
    2. 將備援設定為地區。
    3. 將 Location 設為您建立 Key Protect 服務實體的相同位置。
    4. 將儲存空間類別設定為標準。
  3. 在 服務整合 (選用)/加密下,啟用 金鑰管理
    1. 按一下 使用現有實例,以選取先前建立的 Key Protect 服務實例
    2. 選取 secure-file-storage-root-enckey 作為金鑰,然後按一下 關聯金鑰。
  4. 在服務整合(可選)/監控和活動追蹤下,啟用活動追蹤以保留審核事件以供分析。
    1. 按一下勾號之後,應該會顯示地區中 Activity Tracker 實例的服務資訊。
    2. 現在,啟用追蹤資料事件,並選擇讀寫為資料事件。
  5. 按一下建立儲存區。

使用者與其檔案之間的資料庫對映關係

IBM Cloudant 資料庫將包含從應用程式上傳的所有檔案的 meta 資料。

  1. 建立 IBM Cloudant 服務的實例。
    1. 選取 Cloudant 作為供應項目。
    2. 選取與先前服務相同的 多租戶 環境和 地區。
    3. 將名稱設定為 secure-file-storage-cloudant。
    4. 使用與先前服務相同的資源群組。
    5. 將 鑑別方法 設為 IAM。
    6. 按一下建立。
  2. 回到資源清單,找到新建立的服務,然後按一下它。 注意:您需要等待狀態變更為 Active。
    1. 在服務認證下,新建認證。
    2. 將名稱設定為 secure-file-storage-cloudant-acckey。
    3. 針對 角色,選取 管理員。
    4. 保留其餘欄位的預設值。
    5. 按一下新增。
  3. 展開新建立的認證,並記下值。 您將在之後的步驟中需要它們。
  4. 在 管理下,按一下 啟動儀表板。
  5. 按一下建立資料庫,以建立一個名為 secure-file-storage-metadata 的非分割資料庫。

鑑別使用者

使用 App ID,可以保護資源並新增鑑別至應用程式。 作為本指導教學未使用的替代方案,App ID 可以 整合 與 Kubernetes Service,以鑑別存取叢集中所部署應用程式的使用者。

在建立 App ID 服務之前,請授與服務存取權給 Key Protect 服務。 您必須是您正在使用之 Key Protect 實例的帳戶擁有者或管理者。 您還必須至少具有 App ID 服務的「檢視者」存取權。

  1. 移至 管理> 存取 IAM> 授權,然後按一下 建立。
  2. 選取 App ID 服務作為來源服務。
  3. 選取 Key Protect 作為目標服務。
  4. 切換至 基於所選屬性的資源,勾選 實例 ID,選取先前建立的 Key Protect 服務實例。
  5. 在「服務」存取權下指派 讀者 角色。
  6. 按一下 授權,以確認委派的授權。

現在,建立 App ID 服務的實體。

  1. 導覽至 App ID 服務建立頁面。

    1. 請使用先前服務所用的相同 位置。
    2. 選取累進層級作為方案。
    3. 設定服務名稱為 secure-file-storage-appid。
    4. 選取與先前服務相同的 資源群組。
    5. 從個別下拉清單中選取授權的 Key Protect 服務 名稱 及 根金鑰。
    6. 按一下建立。
  2. 在鑑別設定標籤的管理鑑別下,新增指向將用於應用程式的網域的 Web 重新導向 URL。 URL 格式為 https://secure-file-storage.<Ingress subdomain>/redirect_uri。 例如:

    • 具有 Ingress 子網域: mycluster-1234-d123456789.us-south.containers.appdomain.cloud
    • 重定向 URL 為 https://secure-file-storage.mycluster-1234-d123456789.us-south.containers.appdomain.cloud/redirect_uri。

    App ID 要求網頁重定向 URL 為 https 或 http。 您可以在群集儀表板或使用 ibmcloud ks cluster get --cluster <cluster-name> 檢視您的 Ingress 子網域。

  3. 在運行環境活動的鑑別設定下的相同標籤中,啟用擷取 IBM Cloud Activity Tracker Event Routing 中的事件。

  4. 建立服務認證:

    1. 在服務認證下,新建認證。
    2. 將名稱設定為 secure-file-storage-appid-acckey。
    3. 針對 角色,選取 管理員。
    4. 保留其餘欄位的預設值。
    5. 按一下新增。

您應該在 App ID 儀表板中自訂使用的身分提供者以及登入和使用者管理體驗。 為求簡化,本指導教學使用的是預設值。 對於正式作業環境,請考慮使用多因子鑑別 (MFA) 和進階密碼規則。

部署應用程式

現在所有服務都已配置。 在本節中,您要將指導教學應用程式部署到叢集。 所有這些都可以在 shell 環境 (終端機) 中完成。

取得程式碼

  1. 取得應用程式的程式碼:
    git clone https://github.com/IBM-Cloud/secure-file-storage
    
  2. 前往 secure-file-storage/app 目錄:
    cd secure-file-storage/app
    

填寫配置設定和認證

  1. 如果您尚未登入,請使用 ibmcloud login 或 ibmcloud login --sso 以互動方式登入。 將目標設為 IBM Cloud 地區及資源群組。

    ibmcloud target -r <region> -g <resource_group>
    

    您可以在文件的 一般 IBM Cloud CLI(ibmcloud)指令 主題中找到更多 CLI 指令。

  2. 在下一步中設定產生配置檔所需的環境變數。

    1. 透過取代 <YOUR_CLUSTER_NAME> 來設定叢集名稱:
      export MYCLUSTER=<YOUR_CLUSTER_NAME>
      
    2. 使用 ibmcloud ks 指令來設定 Ingress 子網域:
      export INGRESS_SUBDOMAIN=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressHostname) // .ingress.hostname')
      
    3. 使用 ibmcloud ks 指令設定入口密碼:
      export INGRESS_SECRET=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressSecretName) // .ingress.secretName')
      
    4. 將映像檔儲存庫名稱設為預先建置的映像檔 icr.io/solution-tutorials/tutorial-cloud-e2e-security:
      export IMAGE_REPOSITORY=icr.io/solution-tutorials/tutorial-cloud-e2e-security
      
    5. 透過取代預設值來設定其他環境變數:
      export BASENAME=secure-file-storage
      
    6. 設定要使用的名稱空間:
      export TARGET_NAMESPACE=default
      
    7. 僅當您對映像檔使用 default 名稱空間及 IBM Cloud Container Registry 以外的另一個 Kubernetes 名稱空間時,才選擇性地設定 $IMAGE_PULL_SECRET 環境變數。 這需要額外的 Kubernetes 設定(例如,在新命名空間中建立容器註冊密碼 )。
  3. 執行下列指令,以產生 secure-file-storage.yaml 和 secure-file-storage-ingress.yaml。 它將使用您剛剛與範本檔 secure-file-storage.template.yaml 及 secure-file-storage-ingress.template.yaml 一起配置的環境變數。

    ./generate_yaml.sh
    

    例如,假設應用程式部署到預設的 Kubernetes 命名空間:

    Script 使用的環境變數
    變數 值 說明
    $IMAGE_PULL_SECRET 使用提供的影像時不要定義 用於存取登錄的密碼。
    $IMAGE_REPOSITORY icr.io/solution-tutorials/tutorial-cloud-e2e-security 或 icr.io/namespace/image-name 基於註冊表 URL、命名空間和影像名稱的已建立影像的 URL別碼。
    $TARGET_NAMESPACE 預設 將在其中推送應用程式的 Kubernetes 名稱空間。
    $INGRESS_SUBDOMAIN secure-file-stora-123456.us-south.containers.appdomain.cloud 從群集總覽頁面或使用 ibmcloud ks cluster get --cluster <your-cluster-name> 擷取。
    $INGRESS_SECRET secure-file-stora-123456 使用 ibmcloud ks cluster get --cluster <your-cluster-name> 擷取。
    $BASENAME secure-file-storage 用來識別資源的字首。
  4. 將 credentials.template.env 複製到 credentials.env:

    cp credentials.template.env credentials.env
    
  5. 編輯 credentials.env,並使用以下值填寫空白:

    • Object Storage 服務區域端點、儲存區名稱、為 Object Storage 服務建立的認證,
    • secure-file-storage-cloudant 的認證、
    • 及 App ID的認證。 變數 appid_redirect_uris 是上面所討論的重新導向 URI 清單 (以逗點區隔)。

    使用 Cloud Shell時,您可以使用 nano credentials.env 來編輯檔案。

部署到叢集

  1. 取得叢集的存取權,如主控台概觀頁面中可從 動作 ... 功能表存取的 透過 CLI 連接 指示所述。
    ibmcloud ks cluster config --cluster $MYCLUSTER --admin
    
  2. 請檢查目標名稱空間中是否有可用的 Ingress 密碼。 如果沒有,您需要建立它。
    ibmcloud ks ingress secret ls -c $MYCLUSTER
    
    如果 Ingress 密碼具有 CRN,請使用其名稱及 CRN 在目標名稱空間中建立密碼:
    ibmcloud ks ingress secret create -c $MYCLUSTER -n $TARGET_NAMESPACE --cert-crn <crn-shown-in-the-output-above> --name <secret-name-shown-above>
    
    如果 Ingress 密碼沒有 CRN,請使用下列指令在目標名稱空間中重建它:
    kubectl get secret $INGRESS_SECRET --namespace=ibm-cert-store -oyaml | grep -v '^\s*namespace:\s'| kubectl apply  --namespace=$TARGET_NAMESPACE -f -
    
  3. 建立應用程式用於取得服務認證的密碼:
    kubectl create secret generic secure-file-storage-credentials --from-env-file=credentials.env
    
  4. 部署應用程式。
    kubectl apply -f secure-file-storage.yaml
    
  5. 部署應用程式的網路遞送 ( ClusterIP 服務及 Ingress),以讓它可從公用網際網路存取。
    kubectl apply -f secure-file-storage-ingress.yaml
    

測試應用程式

該應用程式可在 https://secure-file-storage.<your-cluster-ingress-subdomain>/ 上存取。

  1. 移至應用程式的首頁。 這會將您重新導向到 App ID 預設登入頁面。
  2. 使用有效電子郵件位址註冊新帳戶。
  3. 等待信箱收到用於驗證帳戶的電子郵件。
  4. 登入。
  5. 選擇要上傳的檔案。 按一下上傳。
  6. 對檔案使用共用動作,以產生預先簽署的 URL,此 URL 可以與要存取該檔案的其他人共用。 鏈結設定為在 5 分鐘後到期。

已鑑別使用者有自己的空間可儲存檔案。 雖然他們無法查看彼此的檔案,但可以產生預先簽署的 URL 來授與對特定檔案的暫時存取權。

您可以在 原始碼倉庫中找到更多關於應用程式的詳細資訊。

檢閱安全事件

既然已順利部署應用程式及其服務,現在可以檢閱該處理程序產生的安全事件。 所有事件都在 IBM Cloud Logs 實例中集中提供。

  1. 從 Observability 儀表板中,選擇 Cloud Logs 標籤並找到正在接收審核事件的IBM Cloud Logs實例,然後點選開啟儀表板。
  2. 檢閱佈建資源以及與資源互動時傳送到服務的所有日誌。

選用:使用自訂網域並加密網路資料流量

預設情況下,應用程式可在 containers.appdomain.cloud 的一般子網域上存取。 但是,也可以將自訂網域用於部署的應用程式。 若要持續支援 https,需要提供對加密網路資料流量的存取權(所需主機名稱的憑證或萬用字元憑證)。 有各種服務組合可用來管理 DNS 名稱及 TLS 憑證,以整合至 Kubernetes 應用程式。 本指導教學將使用下列服務:

  • DNS 子網域 secure-file-storage,屬於您自己的自訂 DNS 網域,由 IBM Cloud Internet Services (CIS) 服務管理。 為了簡化本指導教學中的步驟,我們將使用 example.com 作為自訂 DNS 網域的名稱,請務必在所有步驟中以您的自訂 DNS 網域取代。
  • Let 's Encrypt,以產生 TLS 憑證。
  • IBM Cloud Secrets Manager,以與 Let 's Encrypt 整合來產生 secure-file-storage.example.com 的 TLS 憑證並安全地儲存它。
  • Kubernetes 外部密鑰操作員,以直接從 Secrets Manager 取回密鑰 TLS 憑證

您也可以建立 CNAME (指向 DNS 提供者的應用程式 URI),產生 TLS 憑證並將其元件匯入至 Secrets Manager,而不是下列步驟。

配置CIS和Secrets Manager實例

  • 需要 IBM Cloud Internet Services 實例。 請使用現有的實例,或從這個 型錄項目 建立實例。 提供一些定價方案,包括免費試用。 新 CIS 的佈建處理程序將說明如何配置現有的 DNS 登記員 (可能不在 IBM Cloud中) 使用 CIS提供的網域名稱伺服器。 在 Shell 視窗中匯出自訂網域:
    export MYDOMAIN=example.com
    
  • 需要一個 Secrets Manager 的實例。 使用現有實例或建立 建立 Secrets Manager 服務實例 中說明的新實例。 如果建立新的實例,請將它命名為 secure-file-storage-sm。 您可以與先前建立的 Key Protect 實例整合,以加強靜態密鑰的安全。

使用 Kubernetes 叢集 Ingress 子網域 作為別名,在 CIS 實例中建立 DNS 項目。

  1. 開啟 CIS 服務實例,您可以在 資源清單 中找到它。
  2. 按一下左側的 可靠性 標籤。
  3. 按一下上方的 DNS 索引標籤。
  4. 向下捲動至「DNS 記錄」區段,然後按一下 新增 以建立新記錄:
    1. 類型: CNAME
    2. 名稱: secure-file-storage
    3. 別名: 叢集的 Ingress 子網域。 您可以執行下列指令,在 Shell 中取得正確的值:
      echo $INGRESS_SUBDOMAIN
      
    4. 按一下 新增 以新增記錄。

將 Secrets Manager 實例連接至 Let 's Encrypt。

  1. 需要 Let 's Encrypt ACME 帳戶及相關聯的 .pem 檔案。 使用現有的或 建立一個:

    1. 安裝 acme-account-creation-tool。 建立 Let 's Encrypt ACME 帳戶 包含建立工具的指示和鏈結。
    2. 執行 acme-account-creation-tool,以特別針對此安全檔案儲存體範例建立帳戶。 以下是範例:
      $ ./acme-account-creation-tool-darwin-amd64 -e YOUREMAIL -o secure-file-storage.example.com -d letsencrypt-prod
      INFO[2022-12-28T13:30:00-08:00] Registering a new account with the CA
      INFO[2022-12-28T13:30:00-08:00] Account information written to file : secure-file-storage.example.com-account-info.json
      INFO[2022-12-28T13:30:00-08:00] Private key written to file : secure-file-storage.example.com-private-key.pem
      
      Account Info
      {
         "email": "YOUREMAIL",
         "registration_uri": "https://acme-v02.api.letsencrypt.org/acme/acct/891897087",
         "registration_body": {
            "status": "valid",
            "contact": [
               "mailto:YOUREMAIL"
            ]
         }
      }%
      $ ls
      secure-file-storage.example.com-account-info.json secure-file-storage.example.com-private-key.pem
      
  2. 將 Let 's Encrypt ACME 帳戶連接至 Secrets Manager 實例。 如需詳細資料,請參閱 在使用者介面中新增憑證管理中心配置:

    1. 開啟 Secrets Manager 服務實例,您可以在 資源清單 中找到它。
    2. 開啟左側的 密鑰引擎,然後按一下 公用憑證。
    3. 在 憑證管理中心 下,按一下 新增。
    4. 名稱: LetsEncrypt 和 憑證管理中心: Let 's Encrypt。
    5. 在 選取檔案 下,按一下 新增檔案,然後從選擇器中選擇 secure-file-storage.example.com-private-key.pem 或現有的 .pem 檔案。
    6. 按一下新增。
  3. 以 DNS 提供者身分連接 CIS:

    1. 在 DNS 提供者下,按一下 新增。
    2. 命名 順,並從下拉清單中選擇 Cloud Internet Services。
    3. 按下一步。
    4. 在 授權 標籤中,選擇 CIS 實例。
    5. 按一下新增。
  4. 在 Secrets Manager 中訂購憑證

    1. 開啟 Secrets Manager 服務,並選取左側的 密鑰。
    2. 按一下新增。
    3. 按一下 公用憑證,然後按 下一步。
    4. 請完成下列表單:
      • 名稱-輸入您可以記住的名稱。
      • 說明-輸入您選擇的說明。
      • 按一下下一步。
      • 在 憑證管理中心 下,選取已配置的 Let 's Encrypt 憑證管理中心引擎。
      • 在 金鑰演算法下,挑選您偏好的演算法,
      • 組合憑證-離開
      • 自動憑證旋轉-離開
      • 在 DNS 提供者 下,選取已配置的 DNS 提供者實例
      • 按一下 選取網域 勾選 使用萬用字元選取,並保持不勾選網域本身,然後按一下 完成。
    5. 按下一步。
    6. 檢閱您的選擇,然後按一下 新增。
    7. 按一下作用中密鑰的三個垂直點功能表,然後選擇 詳細資料 並從對話框複製 CRN。 匯出 shell 中的值。 它看起來像這樣:
      export PUBLIC_CERT_CRN=crn:v1:bluemix:public:secrets-manager:eu-de:a/abc123abc123abc123abc123:99999999-9999-9999-9999-999999999999:secret:aaaaaaaa-9999-9999-aaaa-123456781234
      
  5. 本指導教學利用服務對服務授權,為叢集提供 Secrets Manager 服務實例及其受管理密碼的存取權。

    1. 移至 IAM 授權頁面,然後按一下 建立 以新增授權。
    2. 在 來源 下,選取 Kubernetes Service,然後按一下以挑選 特定資源。 然後,針對 來源服務實例,選擇叢集。
    3. 在 目標 下選取 Secrets Manager,然後使用 特定資源 及 實例 ID,選取 Secrets Manager 服務實例。
    4. 最後,在 角色 下選取 管理員,然後按一下 授權來授與授權。
  6. 驗證 MYDOMAIN 及 PUBLIC_CERT_CRN 的值已匯出至環境:

    echo MYDOMAIN $(printenv MYDOMAIN)
    echo PUBLIC_CERT_CRN $(printenv PUBLIC_CERT_CRN)
    
  7. 從新的 TLS 憑證建立 Ingress 密碼。

    ibmcloud ks ingress secret create --name secure-file-storage-certificate --cluster $MYCLUSTER --cert-crn $PUBLIC_CERT_CRN --namespace $TARGET_NAMESPACE
    
  8. 執行下列指令,以產生配置檔的新副本。 它將使用您配置的所有環境變數,以及範本檔案 secure-file-storage.template.yaml 和 secure-file-storage.template-ingress.yaml。 您可能想要先儲存現行版本:

    cp secure-file-storage.yaml /tmp
    cp secure-file-storage-ingress.yaml /tmp
    
    ./generate_yaml.sh
    
  9. 將配置變更套用至叢集:

    kubectl apply -f secure-file-storage-ingress.yaml
    
  10. 切換回瀏覽器。 在 IBM Cloud 資源清單中,找到先前建立並配置的 App ID 服務,然後啟動其管理儀表板。

  • 按一下左側的 管理鑑別,並按一下頂端的 鑑別設定 標籤。
  • 在新增網頁重定向 URL 表單中,新增 https://secure-file-storage.example.com/redirect_uri 為另一個 URL。
  1. 現在,一切應該都已就緒。 在您設定的自訂網域 https://secure-file-storage.<your custom domain> 上存取應用程式,以測試應用程式。

安全:替換服務認證

為了維護安全,服務認證、密碼及其他金鑰應該定期更換(替換)。 許多安全原則會要求每 90 天或依類似頻率變更密碼及認證。 此外,當員工離開團隊,或是發生(疑似)資安事件時,應該立即變更存取權。

在本教程中,服務被用於不同的用途,從儲存檔案和元資料,到確保應用程式存取安全,再到管理容器影像。 輪換服務認證通常涉及以下作業:

  • 重新命名現有服務金鑰,
  • 使用先前使用的名稱建立一組新的認證,
  • 取代現有 Kubernetes 密碼中的存取資料並套用變更,
  • 以及在驗證後,藉由刪除舊的服務金鑰來停用舊認證。

擴展指導教學

安全永無止境。 請嘗試以下建議來加強應用程式的安全。

共用資源

如果您想要與其他人一起使用此解決方案指導教學的資源,則可以共用所有或僅部分元件。IBM Cloud Identity and Access Management(IAM) 啟用使用者和服務 ID 的鑑別,以及雲端資源的存取控制。 若要授與對資源的存取權,您可以將 預先定義的存取角色 指派給使用者、服務 ID 或 存取群組。 您可以建立存取群組,將一組使用者和服務 ID 組織成單一實體。 它可讓您輕鬆指派存取權。 您可以將單一原則指派給群組,而不是針對每個個別使用者或服務 ID 指派相同的存取權多次。 因此,您可以在開發專案上組織角色的群組,並調整安全和專案管理。

您可以在這裡找到個別服務及其可用 IAM 存取角色的相關資訊:

若要開始使用,請參閱 存取權管理及如何定義存取群組的最佳作法。

移除資源

若要移除資源,請刪除部署的容器,然後刪除佈建的服務。

如果您與其他使用者共用帳戶,請務必僅刪除您自己的資源。

  1. 刪除已部署的網路配置及儲存器:

    kubectl delete -f secure-file-storage-ingress.yaml
    

    之後,執行下列指令:

    kubectl delete -f secure-file-storage.yaml
    
  2. 刪除用於部署的密碼:

    kubectl delete secret secure-file-storage-credentials
    
  3. 如果您已使用 Secrets Manager,請 移除服務授權的相關服務。

  4. 在 IBM Cloud 資源清單中,找到為此指導教學建立的資源。 使用搜尋方框和 secure-file-storage 作為模式。 藉由按一下每個服務旁邊的快速功能表,並選擇刪除服務來刪除每個服務。 請注意,Key Protect 服務只有在刪除金鑰後才能移除。 按一下該服務實例以前往相關儀表板,以及刪除金鑰。

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

相關內容