聯合使用者和工作負載的可信設定檔

無需管理憑證即可授予存取權。 在運算資源中,對具有 SAML 屬性或工作負載身分的聯合使用者使用可信設定檔。

您可以使用受信任的設定檔來授權不同的 IBM Cloud® 身分存取帳戶中的資源。 根據企業目錄 SAML 的屬性,自動授予聯合使用者存取您帳戶的條件。 或者,使用可信設定檔為運行在計算資源中的應用程式設定細粒度授權。 這樣,您就不需要為運算資源建立服務 ID 或 API 金鑰。 您也可以與 IBM Cloud 服務或另一個帳戶中的服務 ID 建立信任,以授予跨帳戶存取權。

使用者不需要是帳號的成員,就可以擔任可信賴的設定檔。 如果使用者的身分提供者 ( IdP ) 符合信任條件中使用的 IdP,使用者就可以使用設定檔。

最初建立信任設定檔時,您可以與下列實體類型建立信任條件:聯合使用者、運算資源、服務 ID 或 IBM Cloud 服務。 建立受信任的設定檔後,您可以新增更多的條件,在同一個設定檔中結合多個實體類型。

您可以使用 Activity Tracker 監控哪些聯合使用者的運算資源、服務 ID 和 IBM Cloud 服務套用了可信賴的設定檔。 如需詳細資訊,請參閱 監控受信任設定檔的登入階段

開始之前

如果您有以下存取權限,就可以建立受信任的設定檔:

  • 帳戶擁有者
  • 所有帳戶管理服務的管理員角色
  • IAM Identity Service 上的管理員角色。 如需詳細資訊,請參閱 IAM 身分服務

在主控台中與聯合使用者建立信任

完成以下步驟,定義哪些聯合使用者可以存取特定資源:

  1. 啟用外部身分提供者的驗證

  2. 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後選擇受信任的設定檔

  3. 按一下建立

  4. 透過提供姓名、電子郵件和描述來描述您的個人資料,然後按一下「繼續」。

    在電子郵件中,您可以新增個人電子郵件 ID 或傳送清單。

    在描述中,提供此受信任設定檔可用的動作清單。

  5. 您可以選取稍後再決定,在新增詳細資訊之前建立信任的設定檔。 或者,通過完成以下步驟來建立信任:

    1. 從清單中選擇聯邦使用者作為信任的實體類型。

    2. 選擇由 IBMid 聯結的使用者由 IBM Cloud 聯結的使用者 App ID 作為驗證方法,並輸入您在步驟 1 中啟用的預設身分提供者 ( IdP )。

      如果您要建立信任的設定檔的使用者使用 IBM Cloud App ID,請將信任的設定檔建立為 App ID 使用者,同樣地,IBMid。 如此一來,您自己的 SAML 屬性就可以讓您知道如何架構可信賴的設定檔條件。 具有相同 IdP 的其他使用者可以具有不同的 SAML 屬性。 僅使用您自己的屬性作為提示。 若要在索賠中使用與您自己不同的屬性,請手動輸入。 {: tip}

      1. 選擇由 IBMid 聯結的使用者由 IBM Cloud 聯結的使用者 App ID由 IBM Cloud 聯結的使用者 SAML 作為驗證方法,並輸入您在步驟 1 中啟用的預設身分提供者 ( IdP )。
    3. 根據您的 IdP 資料新增條件,以定義聯合使用者如何以及何時可以套用設定檔。

      • 按一下新增條件,即可定義多個條件。 聯邦使用者必須符合所有條件,才能納入受信任的設定檔。 關於用於建立條件的欄位的詳細資訊,請參閱 IAM 條件屬性
      • 按一下檢視身分提供者 ( IdP ) 資料,即可從您的 IdP 搜尋個人資料中的屬性名和值。 如需詳細資訊,請參閱 使用 IdP 資料建立可信的設定檔
    4. 定義使用者在必須重新驗證之前,可以套用設定檔多久的階段持續時間。

  6. 按一下繼續

  7. (可選) 指定受信任設定檔的存取權限

  8. 或按一下建立,但不指定任何存取權限。

如需詳細資訊,請參閱 IAM Condition properties

與主控台中的運算資源建立信任

完成下列步驟,以設定更佳的控制,授予對運算資源的存取權。

IBM Cloud Kubernetes Service 只支援 1.21 及更新版本的可信設定檔。 免費的 IBM Cloud Kubernetes Service 集群只會建立較早的版本。 您可以選擇使用標準方案的早期版本建立叢集,因此請務必選擇 1.21 或更新的版本。

  1. 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後選擇受信任的設定檔

  2. 按一下建立設定檔

  3. 提供名稱和描述來描述您的個人資料,然後按一下「繼續」。

  4. 您可以選取稍後再決定,在新增詳細資訊之前建立信任的設定檔。 或者,通過完成以下步驟來建立信任:

    1. 選取運算資源,然後從清單中選取運算服務類型。

    2. 如果選擇 All service resources(所有服務資源 )選項,您可以按一下 Add a condition(新增條件),定義多個條件來篩選所選計算服務類型的資源。 這些條件以資源群組或位置等屬性為基礎,適用於所有現有和未來的資源。 資源必須符合所有條件,才能包含在受信任的設定檔中。

      您輸入的 Kubernetes 名稱空間和服務帳戶名稱不必已經存在。 未來任何使用這些名稱的名稱空間或服務帳戶都可以建立信任。 若要列出現有的命名空間,請登入群集並執行 kubectl get ns。 若要列出現有的服務帳戶,請登入群集並執行 kubectl get sa -n <namespace>。 您也可以同時輸入 default

    3. 如果選擇特定資源,您可以直接與一個或多個現有計算資源實體建立信任,而不需要條件。 例如,Kubernetes 集群。

  5. 按一下繼續

  6. (可選) 指定受信任設定檔的存取權限

  7. 或按一下建立,但不指定任何存取權限。

如需詳細資訊,請參閱 IAM Condition properties

在主控台中與 IBM Cloud 服務建立信任

您帳戶或其他帳戶中的 IBM Cloud 服務可能需要令牌才能執行您帳戶中的操作。

範例 1
另一個帳戶中的專案服務實體可以假設可信賴的設定檔,以安全地部署您帳戶中的架構,而無需輪換金鑰。 如需詳細資訊,請參閱 使用可信設定檔授權專案部署架構
範例 2
私有目錄是由 CRN 識別的目錄管理服務實例。 您可能希望在一個獨立於包含您目錄的帳戶中驗證您私人目錄中的產品。 您可以透過在目標帳戶中建立受信任的設定檔,賦予私人目錄在目標帳戶中建立資源以進行驗證的權限。 然後透過使用目錄 CRN 將服務實例連結至受信任的設定檔,與目錄建立信任。 如需詳細資訊,請參閱 將軟體加入您的私人目錄

透過使用可信賴的設定檔來跨帳戶共用資源,只適用於有限的服務,並非服務跨帳戶存取的一般方法。

完成下列步驟,以定義 IBM Cloud 服務如何存取帳戶中的特定資源:

  1. 向服務管理員查詢唯一識別服務實例的 Cloud Resource Name (CRN)。 CRN 用來授權作業。

    服務管理員可前往導覽功能表圖示導覽功能表圖示 > 資源清單,然後按一下目標服務的名稱,即可找到 CRN。 在詳細資料部分,複製 CRN。 對於私有目錄 CRN,請移至管理 > 目錄 > 私有目錄,然後選擇私有目錄。 按一下 Actions... > 編輯目錄詳細資料,尋找目錄 CRN。

  2. 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後選擇受信任的設定檔

  3. 按一下建立設定檔

  4. 提供名稱和描述來定義您的個人資料,然後按一下「繼續」。

    在描述中,提供受信任設定檔可用的動作清單。

  5. 您可以選取稍後再決定,在新增詳細資訊之前建立信任的設定檔。 或者,通過完成以下步驟來建立信任:

    1. 選擇 IBM Cloud® 服務
    2. 輸入服務管理員提供給您的 CRN。

    IBM Cloud 服務是不使用條件來建立信任的靜態身分。 取而代之的是,您使用 CRN 與受信任的實體建立直接連結,從而建立信任。

  6. 按一下繼續

  7. (可選) 指定受信任設定檔的存取權限

  8. 或按一下建立,但不指定任何存取權限。

在主控台中與服務 ID 建立信任

您可以使用受信任的設定檔,賦予服務 ID 跨帳號存取權和呼叫傳統基礎結構服務的存取權。 若要允許一個帳戶中的服務 ID 存取目標帳戶,請在目標帳戶中建立受信任的設定檔。 完成以下步驟,定義服務 ID 如何存取帳戶中的特定資源:

  1. 向其他帳戶的管理員查詢可識別服務 ID 的服務 ID 值。

    管理員可前往管理 > 存取 (IAM) > 服務 ID,然後選擇要針對的服務 ID,即可找到服務 ID 值。 按一下詳細資料,然後複製以 ServiceId 開頭的 ID。

  2. 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後選擇受信任的設定檔

  3. 按一下建立設定檔

  4. 提供名稱和描述來定義您的個人資料,然後按一下「繼續」。

    在描述中,提供此受信任設定檔可用的動作清單。

  5. 您可以選取稍後再決定,在新增詳細資訊之前建立信任的設定檔。 或者,通過完成以下步驟來建立信任:

    1. 選擇服務 ID
    2. 輸入管理員提供給您的服務 ID 值。
  6. 按一下繼續

  7. (可選) 指定受信任設定檔的存取權限

  8. 或按一下建立,但不指定任何存取權限。

服務 ID 是不使用條件來建立信任的靜態身分。 取而代之的是,您使用服務 ID 元資料中的 ID 值來與受信任的實體建立直接連結,從而建立信任。

指派受信任設定檔的存取權

與聯合使用者、運算資源、IBM Cloud 服務或服務 ID 建立信任後,您就可以指派存取權。

只有當您的帳戶與 Softlayer 帳戶連結時,才能指派經典基礎架構存取權限。

  1. 指定存取權限。
    • 將受信任的設定檔加入一個或多個存取群組,以指定存取權限。 這樣,您就可以使用已建立的存取群組中存在的政策。
      1. 選取存取群組,然後選取所有要加入受信任設定檔的群組。 您只能將使用者指派到您有權限管理的存取群組。
      2. 按一下新增
    • 使用存取政策指定受信任設定檔的存取權。
      1. 選取存取政策。 根據您的存取層級,您可以指派 IAM 政策和傳統基礎結構權限。
      2. 選擇單一服務或一組服務,例如「所有啟用身分與存取的服務」、「所有帳戶管理服務」或「所有 IAM 帳戶管理服務」。 然後按下一步
      3. 根據選取的屬性,設定存取所有資源特定資源的範圍。 然後按下一步
      4. 選擇角色和權限的任意組合,以定義存取範圍,然後按一下檢閱
      5. 按一下新增,將您的政策組態新增至摘要。
      6. 您可以透過選擇使用者、裝置或服務,然後再任意組合細緻的權限,來指派 Classic 基礎架構存取權限。
  2. 按一下建立

自訂控制台體驗

身為可信賴的設定檔管理員,您可以自訂哪些導覽項目會出現在 IBM Cloud 主控台橫幅中,供套用可信賴的設定檔的使用者使用。 此功能可隱藏使用者不需要存取的導覽元素,並防止使用者探索缺乏權限的區域,有助於簡化主控台體驗。

若要自訂受信任設定檔的主控台導覽,請完成下列步驟:

  1. 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後按一下受信任的設定檔
  2. 選取您要自訂的受信任設定檔,然後按一下控制台經驗
  3. 選擇要用作預設登陸頁面的登陸頁面,然後按一下儲存
  4. 選取要包含在主控台橫幅中的導覽項目。
  5. 選取受信任設定檔可以存取特定產品的私人目錄,然後按一下儲存

使用 CLI 與聯合使用者建立信任

完成以下步驟,定義哪些聯合使用者可以存取特定資源:

  1. 啟用外部身分提供者的驗證

  2. 執行下列指令建立受信任的設定檔:

    ibmcloud iam trusted-profile-create my-profile -d "sample trusted profile"
    

    如需相關資訊,請參閱 CLI 參考資料

  3. 若要為您的信任設定檔建立條件,請執行 ibmcloud iam trusted-profile-rule-create 指令:

    ibmcloud iam trusted-profile-rule-create my-profile --name my-rule --type Profile-SAML --conditions claim:cn,operator:EQUALS,value:my_user --realm-name https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20 --expiration 1200
    

    如需相關資訊,請參閱 CLI 參考資料

  4. 執行下列指令,為帳戶中的所有資源建立 Viewer 角色的存取政策:

    ibmcloud iam trusted-profile-policy-create --roles Viewer
    

    如需相關資訊,請參閱 CLI 參考資料

使用 CLI 與運算資源建立信任

完成下列步驟,以設定更佳的控制,授予對運算資源的存取權。

IBM Cloud Kubernetes Service 只支援 1.21 及更新版本的可信設定檔。 免費的 IBM Cloud Kubernetes Service 集群只會建立較早的版本。 您可以選擇使用標準方案的早期版本建立叢集,因此請務必選擇 1.21 或更新的版本。

  1. 執行下列指令建立受信任的設定檔:

    ibmcloud iam trusted-profile-create sample-compute-profile -d "sample trusted profile for compute resources"
    

    如需相關資訊,請參閱 CLI 參考資料

  2. 使用 ibmcloud iam trusted-profile-rule-create 指令為您的信任設定檔建立條件:

    ibmcloud iam trusted-profile-rule-create sample-compute-profile --name cr-rule --type Profile-CR --conditions claim:namespace,operator:EQUALS,value:default --conditions claim:crn,operator:EQUALS,value:crn:test:bluemix:public:containers-kubernetes:us-south:a/test:: --cr-type IKS_SA
    

    如需相關資訊,請參閱 CLI 參考資料

    您也可以建立直接連結:

    ibmcloud iam trusted-profile-link-create sample-compute-profile --name my_link --cr-type IKS_SA --link-name default  --link-namespace default --link-crn my_compute_resource_crn
    

    如需相關資訊,請參閱 CLI 參考資料

  3. 執行下列指令建立存取政策:

    ibmcloud iam trusted-profile-policy-create --roles Viewer
    

    如需相關資訊,請參閱 CLI 參考資料

使用 CLI 與 IBM Cloud 服務建立信任

另一個帳戶中的 IBM Cloud 服務可能需要令牌才能執行您帳戶中的操作。 完成下列步驟,以定義 IBM Cloud 服務如何存取帳戶中的特定資源:

  1. 向另一個帳戶的服務管理員查詢唯一識別服務實例的 CRN。 CRN 用來授權作業。

    服務管理員可前往導覽功能表圖示導覽功能表圖示 > 資源清單,然後按一下您的目標服務,即可找到 CRN。 在詳細資料部分,複製 CRN。

  2. 以直接連結建立信任關係:

    ibmcloud iam trusted-profile-link-create sample-cloudservice-profile --name my_cloudservice_link --link-crn `crn:version:cname:ctype:service-name:location:scope:service-instance:resource-type:resource`
    

    如需相關資訊,請參閱 CLI 參考資料

  3. 執行下列指令建立存取政策:

    ibmcloud iam trusted-profile-policy-create --roles Viewer
    

    如需相關資訊,請參閱 CLI 參考資料

使用 CLI 與服務 ID 建立信任

完成以下步驟,定義服務 ID 如何存取帳戶中的特定資源:

您可以使用受信任的設定檔,賦予服務 ID 跨帳號存取權和呼叫 Classic Infrastructure 服務的存取權。

  1. 向其他帳戶的管理員查詢可識別服務 ID 的服務 ID 值。

    管理員可前往管理 > 存取 (IAM) > 服務 ID,然後選擇要針對的服務 ID,即可找到服務 ID 值。 按一下詳細資料,然後複製以 ServiceId 開頭的 ID。

  2. 以直接連結建立信任關係:

    ibmcloud iam trusted-profile-link-create sample-serviceid-profile --name my_serviceid_link --link-crn `crn:version:cname:ctype:service-name:location:scope:service-instance:resource-type:resource`
    

    如需相關資訊,請參閱 CLI 參考資料

  3. 執行下列指令建立存取政策:

    ibmcloud iam trusted-profile-policy-create --roles Viewer
    

    如需相關資訊,請參閱 CLI 參考資料

使用 CLI 將存取指派給受信任的設定檔

與聯合使用者、運算資源、IBM Cloud 服務或服務 ID 建立信任後,您就可以指派存取權。

只有當您的帳戶與 Softlayer 帳戶連結時,才能指派經典基礎架構存取權限。

使用指令 trusted-profile-policy-create 將存取政策指定給受信任的設定檔。 以下範例在 All Account Management 服務上指定具有管理員角色的政策:

ibmcloud iam trusted-profile-policy-create Profile-36f5c562-1t36-4442-b7f0-2663c85386f1 --roles Administrator --attributes serviceType=service

使用 API 與聯合使用者建立信任

完成以下步驟,定義哪些聯合使用者可以存取特定資源:

  1. 啟用外部身分提供者的驗證

  2. 指定您的帳戶 ID,建立受信任的設定檔。

    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "name": "My Nice Profile",
    "description": "My Nice Profile - desc",
    "account_id": "ACCOUNT_ID"
    }'
    

    在描述中,提供此受信任設定檔可用的動作清單。

  3. 為您信任的個人資料建立條件。 對於聯合使用者,請將 type 屬性設定為 Profile-SAMLrealm-name 就是 IdP URL。 如需詳細資訊,請參閱 IAM 身分服務 API

    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/rules' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "type": "Profile-SAML",
    "realm_name": "https://www.example.org/my-nice-idp",
    "expiration": 43200,
    "conditions": [
    {
    "claim": "groups",
    "operator": "EQUALS",
    "value": "\"cloud-docs-dev\""
       }
       ]
    }'
    

    每個可信賴的設定檔有 20 個索賠規則的限制。

  4. (可選) 指定受信任設定檔的存取權限

透過 API 與運算資源建立信任

完成下列步驟,以設定更佳的控制,授予對運算資源的存取權。

IBM Cloud Kubernetes Service 只支援 1.21 及更新版本的可信設定檔。 免費的 IBM Cloud Kubernetes Service 集群只會建立較早的版本。 您可以選擇使用標準方案的早期版本建立叢集,因此請務必選擇 1.21 或更新的版本。

  1. 指定您的帳戶 ID,建立受信任的設定檔。

    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "name": "My Nice Profile",
    "description": "My Nice Profile - desc",
    "account_id": "ACCOUNT_ID"
    }'
    

    在描述中,提供此受信任設定檔可用的動作清單。

  2. 為您的受信任設定檔製作聲稱規則,透過指定僅針對需要存取的資源的條件,遵循最少權限原則。 條件適用於所有現有的未來資源。 您也可以與特定的現有資源建立直接連結。

    創造條件
    對於計算資源,請將 type 屬性設定為 Profile-CR。 如需詳細資訊,請參閱 IAM 身分服務 API
    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/rules' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "type": "Profile-CR",
    "conditions": [
    {
    "claim": "namespace",
    "operator": "EQUALS",
    "value": "\"default123\""
       }
       ]
    }'
    

    每個可信賴的設定檔有 20 個索賠規則的限制。

    建立直接鏈結
    您可以與特定的現有資源建立直接連結。
    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/links' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "name": "my link",
    "cr_type": "VSI",
    "is_cross_account": true,
    "link": {
    "crn": "crn:v1:staging:public:iam-identity::a/18e3020749ce4744b0b472466d61fdb4::computeresource:Fake-Compute-Resource",
    "namespace": "default",
    "name": "my compute resource name"
    }
    }'
    
  3. (可選) 指定受信任設定檔的存取權限

使用 API 將存取權指定給受信任的設定檔

與聯合使用者、運算資源、IBM Cloud 服務或服務 ID 建立信任後,您就可以指派存取權。

只有當您的帳戶與 Softlayer 帳戶連結時,才能指派經典基礎架構存取權限。

以下範例在 All Account Management 服務上指定具有管理員角色的政策:

curl -X POST \
'https://iam.cloud.ibm.com/v1/policies' \
-H 'Authorization: $TOKEN'\
-H 'Content-Type: application/json'\
-d '{
  "type": "access",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9"
        }
      ]
    }'
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:iam::::role:Administrator"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceType",
          "value": "platform-service"
        }
      ]
    }
  ]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
        .name("iam_id")
        .value("Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9")
        .build();

PolicySubject policySubjects = new PolicySubject.Builder()
        .addAttributes(subjectAttribute)
        .build();

PolicyRole policyRoles = new PolicyRole.Builder()
        .roleId("crn:v1:bluemix:public:iam::::role:Administrator")
        .build();

ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
        .name("accountId")
        .value("exampleAccountId")
        .operator("stringEquals")
        .build();

ResourceAttribute serviceTypeResourceAttribute = new ResourceAttribute.Builder()
        .name("serviceType")
        .value("platform-service")
        .operator("stringEquals")
        .build();

PolicyResource policyResources = new PolicyResource.Builder()
        .addAttributes(accountIdResourceAttribute)
        .addAttributes(serviceTypeResourceAttribute)
        .build();

CreatePolicyOptions options = new CreatePolicyOptions.Builder()
        .type("access")
        .subjects(Arrays.asList(policySubjects))
        .roles(Arrays.asList(policyRoles))
        .resources(Arrays.asList(policyResources))
        .build();

Response<Policy> response = service.createPolicy(options).execute();
Policy policy = response.getResult();

System.out.println(policy);
const policySubjects = [
  {
    attributes: [
      {
        name: 'iam_id',
        value: "Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9",
      },
    ],
  },
];
const policyRoles = [
  {
    role_id: 'crn:v1:bluemix:public:iam::::role:Administrator',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: 'exampleAccountId',
  operator: 'stringEquals',
};
const serviceTypeResourceAttribute = {
  name: 'serviceType',
  value: 'platform-service',
  operator: 'stringEquals',
};
const policyResources = [
  {
    attributes: [accountIdResourceAttribute, serviceTypeResourceAttribute]
  },
];
const params = {
  type: 'access',
  subjects: policySubjects,
  roles: policyRoles,
  resources: policyResources,
};

iamPolicyManagementService.createPolicy(params)
  .then(res => {
    examplePolicyId = res.result.id;
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
policy_subjects = PolicySubject(
  attributes=[SubjectAttribute(name='iam_id', value='Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9')])
policy_roles = PolicyRole(
  role_id='crn:v1:bluemix:public:iam::::role:Administrator')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
  name='serviceType', value='platform-service')
policy_resources = PolicyResource(
  attributes=[account_id_resource_attribute,
        service_type_resource_attribute])

policy = iam_policy_management_service.create_policy(
  type='access',
  subjects=[policy_subjects],
  roles=[policy_roles],
  resources=[policy_resources]
).get_result()

print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
  Name:  core.StringPtr("iam_id"),
  Value: core.StringPtr("Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9"),
}
policySubjects := &iampolicymanagementv1.PolicySubject{
  Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
  RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Administrator"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("accountId"),
  Value:    core.StringPtr("ACCOUNT_ID"),
  Operator: core.StringPtr("stringEquals"),
}
serviceTypeResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("serviceType"),
  Value:    core.StringPtr("platform-service"),
  Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
  Attributes: []iampolicymanagementv1.ResourceAttribute{
    *accountIDResourceAttribute, *serviceTypeResourceAttribute},
}

options := iamPolicyManagementService.NewCreatePolicyOptions(
  "access",
  []iampolicymanagementv1.PolicySubject{*policySubjects},
  []iampolicymanagementv1.PolicyRole{*policyRoles},
  []iampolicymanagementv1.PolicyResource{*policyResources},
)

policy, response, err := iamPolicyManagementService.CreatePolicy(options)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(policy, "", "  ")
fmt.Println(string(b))