全部產品
Search
文件中心

Application Configuration Management(Deprecated):通過ECS執行個體RAM角色訪問ACM

更新時間:Jul 06, 2024

如果藉助ECS執行個體RAM角色,則無需配置AccessKey(AK)即可訪問ACM,從而提高安全性。

遷移到MSE Nacos

ACM進入下線狀態,所有組態管理相關的需求由MSE中的Nacos承接(ACM獨享版,更好的安全和穩定性)。您需要在ACM控制台匯出配置,然後在MSE控制台匯入之前置出的配置即可完成遷移。具體操作,請參見將應用配置從ACM遷移到MSE Nacos

背景資訊

以往,如果部署在ECS執行個體中的應用程式需要訪問ACM,必須將AccessKey以設定檔或其他形式儲存在ECS執行個體中,這在一定程度上增加了AccessKey管理的複雜性,並且降低了AccessKey的保密性。建立AccessKey的具體操作,請參見建立AccessKey

現在,藉助ECS執行個體RAM角色,您可以將RAM角色和ECS執行個體關聯起來,然後將RAM角色名稱告知ACM SDK(1.0.8及以上版本),此後無需配置AccessKey即可訪問ACM。另外,藉助RAM(存取控制),您可以通過角色和授權策略實現不同執行個體對ACM具有不同存取權限的目的。例如,如果配置唯讀策略,關聯了該角色的ECS就只能讀取ACM的配置,而無法新增或修改ACM配置。

前提條件

您已成功建立ECS執行個體,且ECS執行個體的網路環境為Virtual Private Cloud。

步驟一:建立RAM角色並配置授權策略

  1. 雲帳號登入RAM控制台
  2. 在左側導覽列,單擊RAM角色管理
  3. 單擊建立RAM角色,選擇可信實體類型為阿里雲服務,單擊下一步
  4. 選擇角色類型,輸入角色名稱備忘,選擇受信服務為雲端服務器,然後單擊完成
  5. RAM角色名稱列,找到剛建立的RAM角色。
  6. 操作列單擊添加許可權
  7. 添加許可權對話方塊中,通過關鍵詞搜尋授權策略AliyunACMFullAccess,並單擊該授權策略將其添加至右側的已選授列表,然後單擊確定
    說明 如果需要用到加解密配置功能,則還要添加AliyunKMSCryptoAdminAccess授權策略。
    此時,該角色已具備ACM的所有操作許可權。

步驟二:為ECS執行個體授予該RAM角色

  1. 登入ECS控制台,單擊左側導覽列的執行個體
  2. 單擊執行個體列表中目標ECS執行個體操作欄的更多 > 執行個體設定 > 授予/收回RAM角色
    執行個體配置
  3. 授予/收回RAM角色對話方塊中選擇RAM角色步驟一建立的RAM角色。
    說明 若您還未建立RAM角色,請單擊建立RAM角色進行建立。
    RAM執行個體角色授權

步驟三:將RAM角色名稱告知ACM SDK並訪問配置

將RAM角色名稱告知ACM SDK(版本1.0.8及以上)方法有兩種:通過JVM參數設定和通過代碼傳參設定。

說明 JVM參數設定方式優先順序高於代碼傳參方式。
  • 通過JVM參數設定:

    • 格式:-Dram.role.name=$ramRoleName

    • 樣本:-Dram.role.name=ECS-RAM

  • 通過代碼傳參設定:

    import java.util.Properties;
    import com.alibaba.edas.acm.ConfigService;
    import com.alibaba.edas.acm.exception.ConfigException;
    // 範例程式碼,僅用於樣本測試public class ACMTest {
        public static void main(String[] args) {
            try {
                Properties properties = new Properties();
                // endpoint可以從ACM控制台“命名空間詳情”或“範例程式碼”中擷取properties.put("endpoint", "$endpoint");
                // namespace可以從ACM控制台“命名空間詳情”或“範例程式碼”中擷取properties.put("namespace", "$namespace");
                // 剛剛建立並綁定到ECS執行個體的RAM角色名稱,如“ECS-RAM”properties.put("ramRoleName", "$ramRoleName");
                ConfigService.init(properties);
                // 主動擷取配置String content = ConfigService.getConfig("${dataId}", "${group}", 6000);
                System.out.println(content);
            } catch (ConfigException e) {
                e.printStackTrace();
            }
        }
    }

更多資訊