为了提高应用部署的安全性的同时提升便利性,阿里云SDK支持通过
实例元数据,ECS Metadata Service 服务来获取RAM角色的授权信息来访问阿里云资源和服务。在这种方式中,您部署在ECS上的应用程序,无需在SDK上配置授权信息即可访问阿里云API(“无AK”访问),拥有这个RAM角色的权限。
如果要使用这种方式,您需要首先创建一个与RAM角色关联的ECS实例,具体步骤请参考文档
借助于实例 RAM 角色访问其它云产品 API。
代码样例
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您的代码样例中,有两处需要填入具体信息的地方:
DefaultProfile.getProfile("");
这里的空字符串(""
)需要替换为您的目标地域ID(Region ID)。例如,如果您想访问华东1(杭州)区域的资源,应填写"cn-hangzhou"
。阿里云的地域ID列表可以在官方文档中找到。
InstanceProfileCredentialsProvider provider = new InstanceProfileCredentialsProvider("");
这里的空字符串也需要替换,但不是直接填地域ID或其它直接标识,而是留空即可。因为InstanceProfileCredentialsProvider
会自动从ECS实例元数据服务中获取与该实例关联的RAM角色的临时凭证,无需您手动指定角色名称。ECS实例在启动时通过其关联的RAM角色自动获取权限,所以这里不需要填写具体的RAM角色名称。
综上,修正后的代码示例关键部分如下:
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou"); // 根据实际需求替换为正确的地域ID
InstanceProfileCredentialsProvider provider = new InstanceProfileCredentialsProvider();
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
确保您的ECS实例已经正确关联了RAM角色,并且该角色拥有调用所需API的权限。这样,部署在ECS上的应用程序就可以无须AK(AccessKey ID和AccessKey Secret),直接通过实例元数据服务安全地访问阿里云资源了。