设置身份认证服务功能

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

基于适用于服务账户的RAM角色(简称RRSA)功能,可以在实例维度实现OpenAPI权限的细粒度隔离,从而更精细地控制云资源访问权限。相比于直接使用密钥对来访问阿里云OpenAPI,使用RRSA可以有效防止AK泄露问题,降低安全风险。本文将以Serverless 应用引擎首次使用RRSA功能为例进行介绍。

测试代码

本文以深圳地域的Java应用为例演示如何通过OIDC调用阿里云SAE服务的接口。

  • pom.xml文件中引入以下依赖项。

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>sae20190506</artifactId>
        <version>1.25.0</version>
    </dependency>
    
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>sts20150401</artifactId>
        <version>1.1.4</version>
    </dependency>
    
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>credentials-java</artifactId>
        <version>0.3.4</version>
    </dependency>
  • 测试代码如下所示。

    public static void main(String[] args) throws Exception {
        Client cred = newOidcCred();
        callAPI(cred);
    }
        
    public static void callAPI(com.aliyun.credentials.Client cred) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
        config.credential = cred;
        // 将cn-shenzhen修改为对应的Region。
        config.endpoint = "sae-vpc.cn-shenzhen.aliyuncs.com";
    
        // 初始化客户端。这个客户端是用于调用阿里云SAE服务API的。
        com.aliyun.sae20190506.Client client = new com.aliyun.sae20190506.Client(config);
    
        // 调用阿里云SAE服务的OpenAPI来获取集群列表。
        com.aliyun.sae20190506.models.ListApplicationsRequest listApplicationsRequest = new com.aliyun.sae20190506.models.ListApplicationsRequest();
        ListApplicationsResponse listApplicationsResponse = client.listApplications(listApplicationsRequest);
        System.out.println("listApplicationsResponse->" + JSON.toJSONString(listApplicationsResponse));
    }
    
    private static com.aliyun.credentials.Client newOidcCred() throws Exception {
        // 创建OIDC凭证。
        com.aliyun.credentials.models.Config credConf = new com.aliyun.credentials.models.Config();
        credConf.type = "oidc_role_arn";
        credConf.roleArn = System.getenv("ALIBABA_CLOUD_ROLE_ARN");
        credConf.oidcProviderArn = System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN");
        credConf.oidcTokenFilePath = System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE");
        credConf.roleSessionName = "test-rrsa-oidc-token";
        // https://next.api.aliyun.com/product/Sts,通过此链接可以帮助您了解更多关于STS服务的详细信息和使用方法。
         credConf.setSTSEndpoint("sts-vpc.cn-shenzhen.aliyuncs.com");
        return new com.aliyun.credentials.Client(credConf);
    }
    重要
    • 测试代码中,ALIBABA_CLOUD_ROLE_ARN、ALIBABA_CLOUD_OIDC_PROVIDER_ARN和ALIBABA_CLOUD_OIDC_TOKEN_FILE几个环境变量已经内置在了SAE中,可以直接获取。使用这些环境变量进行身份验证后,请求能够成功返回ACS集群列表。

    • 在使用newOidcCred返回的com.aliyun.credentials.Client时,由于该客户端会请求RAM接口以获取临时Token,而此Token的有效期为1小时。因此,建议您自行实现缓存机制,以避免在高流量情况下频繁请求RAM接口,从而可能触发限流问题。

前提条件

  • 您的阿里云账号已进行了实名认证。具体操作,请参见个人实名认证企业实名认证

    重要

    访问控制为免费产品,只要经过实名认证的阿里云账号就可以直接使用,该产品暂不支持关闭。

  • 已创建命名空间。具体操作,请参见管理命名空间

步骤一:开启RRSA OIDC

在创建应用过程中开启RRSA OIDC

  1. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间,最后单击创建应用

    image

    说明

    本文只介绍开启RRSA OIDC的步骤。创建应用的详细步骤,请参见应用部署

  2. 创建应用高级设置页面。找到并展开身份认证服务区域,然后开启 RRSA OIDC

    pBMaDKigq8

在部署应用过程中开启RRSA OIDC

警告

修改应用配置后,该应用将会被重启。为避免业务中断等不可预知的错误,请在业务低峰期进行操作。

  1. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间,最后单击目标应用名称。

  2. 在目标应用的基础信息页面,单击部署应用

    wYZsdfSTz7

  3. 部署应用面板,找到并展开身份认证服务区域,然后开启 RRSA OIDC

    AhRwUK3Bgs

步骤二:创建RAM角色

查看系统创建的身份供应商角色

  1. 身份认证服务区域单击创建RAM角色,进入RAM控制台。

    BP6hYD5ksn

  2. 在RAM控制台的左侧导航栏,单击SSO 管理

  3. SSO 管理页面的OIDC页签,查看系统自动创建的身份供应商角色。

    Kc5aV6T6WP

    重要
    • 当您在SAE侧开启RRSA OIDC后,系统会自动创建一个身份供应商角色,此身份供应商角色名称的格式为sae-rrsa-{regionId},且该名称不可修改。

    • 在同一地域下,如果您是在SAE侧第一次使用身份认证服务功能,系统会自动为您创建一个身份提供商角色。如果您不是第一次使用此功能,系统将不会再次创建新的身份提供商角色,但您可以继续使用之前自动创建的身份提供商角色。

创建RAM角色并为其授权

  1. 在RAM控制台的左侧导航栏,单击角色,然后在角色页面,单击创建角色

    DNAwUON00z

  2. 创建角色页面,配置以下信息。

    1. 选择类型向导页面,选择可信实体类型身份提供商,然后单击下一步

      ueLoWopSMZ

    2. 配置角色向导页面,根据以下说明配置相关信息,然后单击完成

      kx0fvGJUK2

      配置项

      示例

      说明

      角色名称

      sae-test

      自定义RAM角色名称。

      身份提供商类型

      OIDC

      在下拉框中选择身份供应商类型为OIDC。

      选择身份提供商

      sae-rrsa-cn-shenzhen

      选择系统自动创建的身份提供商角色。

      限制条件

      • oidc:iss的值:https://******

      • oidc:aud的值:sts.aliyuncs.com

      • oidc:sub的值:system:serviceaccount:sl-123456******-cn-shenzhen-test:sae-oidc-sa

      在限制条件的表格中,根据以下三个条件关键词对身份提供商进行条件限制:

      • oidc:iss:表示OIDC颁发者(Issuer)。其值是创建身份提供商角色时由系统自动生成的,并且不支持修改。

      • oidc:aud:表示OIDC受众(Audience)。其值应选择为sts.aliyuncs.com,此客户端ID是在创建身份提供商角色时由系统自动生成的。

      • oidc:sub:表示OIDC主体(Subject)。其值的格式为system:serviceaccount:sl-{阿里云主账号ID}-{SAE命名空间ID}:sae-oidc-sa

        重要

        此处的SAE命名空间ID格式需要进行转换,需要将命名空间ID中的:转换成-。例如,在SAE侧查到的命名空间ID为cn-shenzhen:test,转换后应为cn-shenzhen-test

  3. 为目标角色授予只读访问Serverless应用引擎(SAE)的权限

    1. 角色页面,单击目标角色名称。

      VmmiRlKL8n

    2. 在目标角色详情页面的权限管理页签下,单击新增授权

      iKxOMH0ow8

    3. 在新增授权面板,授予目标角色AliyunSAEReadOnlyAccess的权限,然后单击确认新增授权

      bRV3zkyvbJ

步骤三:为微服务应用关联RAM角色

在创建应用时关联RAM角色

  1. 返回步骤一中的高级设置页面,然后在身份认证服务区域选择步骤二中创建的RAM角色。

    2NWKQhZ3s7

  2. 单击创建应用

在部署应用时关联RAM角色

  1. 返回步骤一中的部署应用面板,然后在身份认证服务区域选择步骤二中创建的RAM角色。

    XWORL9BOsx

  2. 单击确定

步骤四:结果验证

  1. 基础信息页面的实例列表页签,单击目标实例操作列的Webshell,进入目标实例的字符界面。

    NP6KKXMFlV

  2. 在字符界面输入curl 127.0.0.1:容器端口,进行访问验证。

  3. 在左侧导航栏,选择日志管理 > 实时日志,然后选择进行了访问验证的实例。

    3BUasiDIRO

  4. 实时日志页面查看是否成功调用了阿里云SAE服务的接口。