PolarDB-X的部分操作会调用RDS的OpenAPI,因此在使用RAM之前,需要先激活PolarDB-X访问RDS服务的授权,创建一个供PolarDB-X访问RDS的RAM服务角色。本文将介绍如何通过控制台和OpenAPI激活授权。

在控制台上激活RAM授权

  1. 登录云原生分布式数据库控制台
  2. 在左侧导航栏,单击资源授权
  3. 云资源授权管理页面,单击激活授权
    1C
  4. 在弹出的对话框中单击同意授权
    2c
    警告 激活授权的同时, RAM控制台上会默认创建一个名称为AliyunDRDSDefaultRole的RAM角色供PolarDB-X访问该账户下RDS资源,同时授权PolarDB-X访问RDS的OpenAPI,请勿随意删除该RAM角色。

通过RAM的OpenAPI激活RAM授权

若暂时无法访问控制台,您也可以通过调用相关OpenAPI创建RAM服务角色,角色创建完成即意味着PolarDB-X访问RDS资源的授权也被激活。

  • 创建角色(假设要创建的RAM角色名是Jack)。
    • 调用CreateRole接口并输入以下参数创建RAM角色:
      参数名 说明
      Action CreateRole
      RoleName Jack
      AssumeRolePolicyDocument 信任策略,格式如下所示。
      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "drds.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }         
    • 通过Java SDK创建RAM角色,Demo如下:
      // 创建角色
      String rolePolicyDoc = "{\"Statement\":[{\"Action\": \"sts:AssumeRole\", \"Effect\": \"Allow\",\"Principal\":{\"Service\":[\"drds.aliyuncs.com\"]}}],\"Version\": \"1\"}";
      String roleName = "Jack";
      CreateRoleRequest request = new CreateRoleRequest();
      request.setAssumeRolePolicyDocument(rolePolicyDoc);
      request.setAssumeRolePolicyDocument(rolePolicyDoc);
      client.getAcsResponse(request);
      // 为角色授予策略
      AttachPolicyToRoleRequest attachRequest = new AttachPolicyToRoleRequest();
      attachRequest.setPolicyType("System");
      attachRequest.setPolicyName("AliyunDRDSRolePolicy");
      attachRequest.setRoleName("AliyunDRDSDefaultRole");
      client.getAcsResponse(attachRequest);
  • 查验角色是否创建成功(假设创建的RAM角色为Jack)。
    • 通过GetRole接口并输入以下参数查看角色详情:
      参数名 说明
      Action CreateRole
      RoleName Jack
    • 通过Java SDK查看RAM角色详情,Demo如下:
      String roleName = "AliyunDRDSDefaultRole";
      GetRoleRequest request = new GetRoleRequest();
      request.setRoleName(roleName);
      GetRoleResponse resp = client.getAcsResponse(request);
      GetRoleResponse.Role role = resp.getRole();