开发者社区 问答 正文

Java SDK:在ECS上“无AK”访问



为了提高应用部署的安全性的同时提升便利性,阿里云SDK支持通过 实例元数据,ECS Metadata Service 服务来获取RAM角色的授权信息来访问阿里云资源和服务。在这种方式中,您部署在ECS上的应用程序,无需在SDK上配置授权信息即可访问阿里云API(“无AK”访问),拥有这个RAM角色的权限。
如果要使用这种方式,您需要首先创建一个与RAM角色关联的ECS实例,具体步骤请参考文档 借助于实例 RAM 角色访问其它云产品 API

代码样例

  1. import com.aliyuncs.DefaultAcsClient;
  2. import com.aliyuncs.auth.InstanceProfileCredentialsProvider;
  3. import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;
  4. import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;
  5. import com.aliyuncs.exceptions.ClientException;
  6. import com.aliyuncs.profile.DefaultProfile;
  7. public class NoAKAccessSample {
  8.     public static void main(String[] args) {
  9.         DefaultProfile profile = DefaultProfile.getProfile("<your-region-id>");
  10.         InstanceProfileCredentialsProvider provider = new InstanceProfileCredentialsProvider(
  11.             "<your-role-name>"
  12.         );
  13.         DefaultAcsClient client = new DefaultAcsClient(profile, provider);
  14.         DescribeInstancesRequest request = new DescribeInstancesRequest();
  15.         try {
  16.             DescribeInstancesResponse response = client.getAcsResponse(request);
  17.         } catch (ClientException e) {
  18.             System.err.println(e.toString());
  19.         }
  20.     }
  21. }

其中:
  • <your-role-name>即与ECS实例关联的RAM角色名称。
  • <your-region-id>是您正在使用的地域的Region ID,详情请看地域列表。请注意,这个Region ID是RAM角色有权访问的服务API所在的Region ID,不一定等于这个ECS实例的Region ID。

展开
收起
行者武松 2017-10-23 14:48:13 1779 分享 版权
阿里云 AI 助理回答

在您的代码样例中,有两处需要填入具体信息的地方:

  1. DefaultProfile.getProfile(""); 这里的空字符串("")需要替换为您的目标地域ID(Region ID)。例如,如果您想访问华东1(杭州)区域的资源,应填写"cn-hangzhou"。阿里云的地域ID列表可以在官方文档中找到。

  2. 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),直接通过实例元数据服务安全地访问阿里云资源了。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答