如果借助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实例的网络环境为专有网络(VPC)。
步骤一:创建RAM角色并配置授权策略
步骤二:为ECS实例授予该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(); } } }
更多信息
- Access Key(AK)
- RAM(访问控制)
- 创建可信实体为阿里云服务的RAM角色
- 使用实例RAM角色访问其他云产品
- ACM Java Native SDK概述