全部產品
Search
文件中心

ApsaraMQ for RocketMQ:通過RAM角色實現跨雲帳號授權

更新時間:Jul 01, 2024

使用企業A的阿里雲帳號(主帳號)建立RAM角色並為該角色授權,並將該角色賦予企業B,即可實現使用企業B的主帳號或其RAM使用者(子帳號)訪問企業A的阿里雲資源的目的。

背景資訊

企業A購買了雲訊息佇列 RocketMQ 版服務來開展業務,並希望將部分業務授權給企業B。

需求說明:

  • A希望能專註於業務系統,僅作為資源Owner;而訊息發布和訂閱等任務委託或授權給企業B。

  • 企業A希望當企業B的員工加入或離職時,無需做任何許可權變更。企業B可以進一步將A的資源存取權限分配給B的RAM使用者(員工或應用),並可以精細控制其員工或應用對資源的訪問和操作許可權。

  • 企業A希望如果雙方合約終止,企業A隨時可以撤銷對企業B的授權。

解決方案

企業A需要授予企業B的員工對雲訊息佇列 RocketMQ 版的資源進行操作。假設企業A和企業B分別有一個阿里雲帳號A和阿里雲帳號B,需要完成以下操作完成企業A和企業B的跨雲帳號授權及資源訪問:

  1. 步驟一:建立RAM角色並授權

    阿里雲帳號A建立一個RAM角色,並根據業務範圍和需求為RAM角色授予對應的許可權,並允許阿里雲帳號B下的RAM使用者扮演該角色。

  2. 步驟二:跨雲帳號訪問資源

    RAM角色授權完成後,阿里雲帳號B下的RAM使用者通過扮演RAM角色可擷取該角色對應的許可權。RAM使用者可通過以下方式訪問阿里雲帳號A的資源:

    • 通過SDK訪問資源

    • 通過控制台訪問資源

    • 通過API訪問資源

步驟一:建立RAM角色並授權

  1. 首先需要使用企業A的阿里雲帳號(主帳號)登入RAM控制台並為企業B的雲帳號建立RAM角色。

  2. 可選:企業A為剛建立的RAM角色建立自訂策略。

    具體步驟,請參見建立自訂權限原則

    目前,雲訊息佇列 RocketMQ 版支援執行個體、Topic和Group粒度的使用權限設定。更多資訊,請參見雲訊息佇列 RocketMQ 版自訂權限原則

  3. 新建立的角色沒有任何許可權,因此企業A必須為該角色添加許可權。可添加系統權限原則或自訂權限原則。

    具體步驟,請參見為RAM使用者授權

  4. 使用企業B的阿里雲帳號(主帳號)登入RAM控制台並建立RAM使用者。

    具體步驟,請參見為企業B建立RAM使用者

  5. 企業B為RAM使用者添加AliyunSTSAssumeRoleAccess許可權。

    具體步驟,請參見為RAM使用者授權

    企業B必須為其主帳號下的RAM使用者添加AliyunSTSAssumeRoleAccess許可權,RAM使用者才能扮演企業A建立的RAM角色。

步驟二:跨雲帳號訪問資源

  • 通過SDK訪問資源

    企業B的RAM使用者可通過SDK訪問企業A的雲訊息佇列 RocketMQ 版資源,完成訊息收發功能。SDK訪問有以下兩種配置方式:

    • 配置STS Token:使用STS Token方式,您必須在SDK代碼中提供RAM使用者的AccessKey ID、AccessKey Secret和SecurityToken(臨時安全性權杖),但是SecurityToken有時效性需要不斷更新。使用STS擷取臨時安全性權杖的方法,請參見AssumeRole

      重要
      • STS方式只適用於雲訊息佇列 RocketMQ 版的Java SDK 1.7.8.Final及以上版本。

      • 擷取AccessKey ID和AccessKey Secret,請參見建立AccessKey

      STS Token配置樣本

      • 初始化雲訊息佇列 RocketMQ 版的用戶端時,您只需將擷取到的AccessKey ID、AccessKey Secret和SecurityToken填入到以下屬性中即可:

        Properties properties = new Properties();
        // 請確保環境變數ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET和ALIBABA_CLOUD_SECURITY_TOKEN已設定。
        // STS的AccessKey ID。
        properties.put(PropertyKeyConst.AccessKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // STS的AccessKey Secret。
        properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // STS的SecurityToken。
        properties.put(PropertyKeyConst.SecurityToken, System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
        // 其他屬性。
        properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXX");
        ......
        Producer client = ONSFactory.createProducer(properties);
        client.start();                    
      • 當SecurityToken到期時,調用updateCredential方法動態更新。

        Properties properties = new Properties();
        // 請確保環境變數ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET和ALIBABA_CLOUD_SECURITY_TOKEN已設定。
        // STS的AccessKey ID。
        properties.put(PropertyKeyConst.AccessKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // STS的AccessKey Secret。
        properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // STS的SecurityToken。
        properties.put(PropertyKeyConst.SecurityToken, System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
        client.updateCredential(properties);                    
    • 配置ECS執行個體RAM角色:使用ECS執行個體RAM角色的方式,您無需在SDK中配置RAM使用者的AccessKey ID、AccessKey Secret和SecurityToken資訊,只需要輸入建立的RAM角色名稱即可,提高了代碼配置的便利性。但是您需要先將建立的RAM角色與應用程式所部署的ECS執行個體完成綁定,將RAM角色許可權授予ECS執行個體,具體步驟,請參見為執行個體授予RAM角色

      重要

      ECS執行個體RAM角色方式只適用於雲訊息佇列 RocketMQ 版的Java SDK 1.8.7.3.Final及以上版本。

      ECS執行個體RAM角色配置樣本

      Properties properties = new Properties();
      // 您建立的RAM角色的名稱,並且已將該RAM角色授予ECS執行個體。
      properties.put(PropertyKeyConst.RAM_ROLE_NAME,"XXX");
  • 通過控制台訪問資源

    企業B的RAM使用者可按照以下步驟登入控制台訪問企業A的雲訊息佇列 RocketMQ 版資源。

    1. 在瀏覽器中開啟RAM使用者登入入口

    2. RAM使用者登入頁面上,輸入RAM使用者登入名稱稱,單擊下一步,並輸入RAM使用者密碼,然後單擊登入

      說明

      RAM使用者登入名稱稱的格式為<$username>@<$AccountAlias><$username>@<$AccountAlias>.onaliyun.com<$AccountAlias>為帳號別名,如果沒有設定帳號別名,則預設值為阿里雲帳號(主帳號)的ID。

    3. 在阿里雲控制台登入頁面,將滑鼠指標移到右上方頭像上,並在浮層中單擊切換身份

    4. 阿里雲-角色切換頁面,輸入企業A的企業別名預設網域名稱主帳號UID中的任意一種,以及角色名稱,然後單擊提交

    5. 對企業A的雲訊息佇列 RocketMQ 版資源進行操作。

  • 通過API訪問資源

    企業B的RAM使用者可通過調用雲訊息佇列 RocketMQ 版提供的API介面訪問企業A的資源。調用API的方法,請參見API調用方式

更多資訊