使用 IAM 受信任設定檔授權資源

虛擬私有雲 經典基礎設施 Satellite

瞭解如何使用受信任的設定檔來設定資源存取權限。

您可以執行 ibmcloud oc cluster master refresh 指令來啟用 IAM 授信設定檔。

在 IAM 中
首先建立 IAM 可信賴的設定檔。 然後,透過選擇與叢集相匹配的條件,將可信設定檔與您的 Red Hat OpenShift on IBM Cloud 計算資源連結,包括叢集中的 Kubernetes 命名空間和服務帳戶。 最後,為您希望應用程式使用的 IBM Cloud 服務指定存取政策。
在您的群集中
透過 Kubernetes 服務帳號令牌容量推算,在您連結群集的 Kubernetes 命名空間中執行並使用該命名空間服務帳號的應用程式,可以交換服務帳號公開金鑰,以取得 IBM Cloud IAM 存取令牌。 您的應用程式可以使用此存取標記驗證對 IBM Cloud 服務 (例如資料庫、Watson 或 VPC 基礎架構) 的 API 請求。 透過可信賴設定檔的存取政策,您可以控制令牌讓應用程式執行哪些動作。

建立 IAM 可信賴的設定檔

若要在帳戶中建立受信任的設定檔,請參閱 IAM 文件中的 建立受信任的設定檔。 請注意,若要建立信任的設定檔,您必須是帳戶所有人。 此外,還需要以下存取角色。

設定群集的預設信任設定檔

若要為單一群集設定信任設定檔,請執行 ibmcloud oc experimental trusted-profile set 指令

如果您希望資源群組中的所有群集使用相同的受信任設定檔,請執行 ibmcloud oc experimental trusted-profile default set 指令

查看您信賴的個人檔案詳情

若要取得同一資源群組中叢集的預設信任設定檔,請執行 ibmcloud oc experimental trusted-profile default get 指令

配置應用程式 Pod 以向 IBM Cloud 服務進行鑑別

透過在 IAM 中使用可信設定檔,讓在 Red Hat® OpenShift® on IBM Cloud® 叢集 IBM CloudIdentity and Access Management 內運行的應用程式 Pod 存取 IBM Cloud 服務。 身為開發人員,您可以設定應用程式的 Pod 對連接到已設定 IAM 信任 IBM Cloud 設定檔的叢集中的服務進行驗證。

要完成這些步驟,您不需要擁有管理員存取角色。 然而,您必須滿足以下要求:具備檢視者平台 存取角色;針對 IAM IBM Cloud 中的叢集擁有寫入者服務 存取角色; Kubernetes Service 以及 IAM 身分識別服務 的 和 iam-identity.profile.linkToResource 操作 iam-identity.profile.create 權限。

開始之前:

若要配置應用程式 Pod 以向 IBM Cloud 服務進行鑑別,請執行下列動作:

  1. 設計 Pod 配置檔以使用 服務帳戶記號磁區投射

    1. containers 區段中,裝載 volumeMounts 區段中的身分記號。
        ...
            volumeMounts:
            - mountPath: /var/run/secrets/tokens
              name: sa-token
        ```
    1.  `volumes` 區段中,設定服務帳戶記號磁區投射。
    
        修改 `expirationSeconds` 欄位,以控制記號有效的時間長度。 若要擷取 IAM 記號,服務帳戶記號有效期限必須小於或等於 1 小時。
        {: tip}
    
        ```yaml {: codeblock}
        ...
        volumes:
          - name: sa-token
            projected:
              sources:
              - serviceAccountToken:
                  path: sa-token
                  expirationSeconds: 3600
                  audience: iam
        ...
        ```
    
  2. 設計應用程式以針對 IAM 記號交換服務帳戶預測記號,您可以使用該記號對 IBM Cloud 服務進行後續 API 呼叫。 請檢閱下列鑑別要求範例。 將 ${profile_id} 取代為叢集所鏈結之授信設定檔的 ID。 若要列出可用的設定檔 ID,您或帳戶管理者可以使用 ibmcloud iam tps 指令、GET 'https://iam.cloud.ibm.com/v1/profiles/?account_id=<account_id>',或者您可以在 IAM 主控台中檢視授信設定檔。

    curl -s -X POST \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -H "Accept: application/json" \
        -d grant_type=urn:ibm:params:oauth:grant-type:cr-token \
        -d cr_token=$(cat /var/run/secrets/tokens/sa-token) \
        -d profile_id=${profile_id} \
        https://iam.cloud.ibm.com/identity/token
    
  3. 在部署應用程式之前,請嘗試下列範例 Kubernetes 工作來測試記號交換。 在下列 Kubernetes 工作中,curl Pod 向 IBM Cloud IAM 發出 API 要求,以驗證叢集的公開金鑰已交換 IAM 存取記號。 您的應用程式可能會呼叫授信設定檔授權的其他 IBM Cloud 服務。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: token-exchange-job
      namespace: default
    spec:
      template:
        spec:
          containers:
          - name: curl
            image: curlimages/curl:7.77.0
            command: ["/bin/sh"]
            args: ["-c", "curl -s -H \"Content-Type: application/x-www-form-urlencoded\" -H \"Accept: application/json\" -d grant_type=urn:ibm:params:oauth:grant-type:cr-token -d cr_token=$(cat /var/run/secrets/tokens/sa-token) -d profile_id=<profile_id> https://iam.cloud.ibm.com/identity/token"]
            volumeMounts:
            - mountPath: /var/run/secrets/tokens
              name: sa-token
          restartPolicy: Never
          serviceAccountName: default
          volumes:
          - name: sa-token
            projected:
              sources:
              - serviceAccountToken:
                  path: sa-token
                  expirationSeconds: 3600
                  audience: iam
    
  4. 部署工作。

    kubectl apply -f exchange-job.yaml
    
  5. 請檢閱工作詳細資料,以驗證它是否成功。

    oc describe job token-exchange-job
    
  6. 檢閱 job completedsucceeded 訊息的輸出,以驗證工作是否成功。

  7. 如果工作成功,請檢查法蘭克福的 Activity Tracker 廣域事件,以驗證日誌行與「授信設定檔」要求的詳細資料。 如果工作失敗,請檢閱您的配置,然後再試一次。