¿Sabe que STS autoriza temporalmente el acceso a OSS?

Prefacio

Recientemente, estoy haciendo algunas cosas relacionadas con la carga de oss. Al principio, el plan era cargar directamente desde el front-end, y las claves y secretos del oss fueron configurados por el front-end. Sin embargo, habrá algunos problemas de seguridad si se filtran los secretos de la cuenta de esta cuenta y no se controlan los permisos. Los delincuentes pueden
realizar diversas operaciones en los archivos de nuestro sistema operativo, eliminarlos, descargarlos, etc.

Dado que existe tal problema de seguridad, debemos resolverlo. Después de verificar los documentos oficiales, sé que Alibaba Cloud OSS admite el uso de tokens temporales. El front-end o el cargador pueden ejercer el derecho a responder siempre que obtengan este token, y este token tiene los permisos correspondientes para controlar, y porque es temporal Bueno, hay un tiempo de caducidad. Incluso si se filtra, podemos controlar los permisos. Solo puede cargar y no puede realizar otras operaciones. ¿Existe una operación tan conveniente? Echemos un vistazo a continuación.

Chismes sin importancia

Yo: Habla de otra cosa. En realidad, los documentos oficiales ya son más ricos. ¿Por qué debería escribir un blog?

Narrador: Blogueros mixtos, ¿ganar popularidad?

Yo: Uh, no. Debido a que era un poco grande después de leer la documentación oficial, la documentación era muy rica y algunos códigos de demostración no se ejecutaban después de ejecutarlos. Según la web y los terminales móviles, hay una gran cantidad de contenido diferente. Realmente se necesita un poco de investigación para comprender de qué se trata STS y cómo usarlo. Así que escribí sobre STS específicamente, para que los amigos del desarrollo que necesiten usar esta función en el futuro tengan una comprensión más clara. No tiene que leer documentos tan largos y dedicar tanto tiempo a comprender.

Narrador: ¿Entonces ha hecho una pequeña contribución?

Yo: Dices que sí, ¿verdad? Cabeza de perro manual

Proceso STS

El proceso STS en el documento oss:

STS (Security Token Service) para acceso de autorización temporal. A través de STS, puede emitir un certificado de acceso de permiso y límite de tiempo personalizado para aplicaciones de terceros o subusuarios (es decir, usuarios cuyas identidades de usuario las administra usted mismo).

En primer lugar, suponga que el lector no ha leído la documentación del sistema operativo y solo sabe que existe un token temporal. La configuración del token en oss es bastante problemática, en primer lugar, habrá tres cosas involucradas.

Usuario:
generalmente, se crea una subcuenta para actuar como usuario porque la cuenta principal tiene demasiada autoridad. Y es muy inconveniente decir que muchas personas usan la misma cuenta juntas. Usar otras te exprimirá.

Permiso:
qué operaciones puede realizar para un usuario o rol. Para oss, significa cargar archivos, eliminar archivos y leer archivos. Oss tiene un nombre especial como este: oss: PutObject (esto representa el permiso para cargar archivos) si desea ver qué permisos están disponibles o cómo configurar Puede consultar: Enlace de control de acceso basado en políticas de RAM

RAM:
es un administrador de acceso a recursos, traducido como administración de acceso a recursos. En realidad, podemos ser roles. Los roles deben entenderse mejor, es decir, un determinado rol tendrá funciones correspondientes. Por ejemplo, los médicos son responsables de tratar enfermedades. Definamos un putFileRole aquí, por ejemplo, que tiene permisos de carga.

La relación entre estos tres es: el usuario juega un cierto rol, el rol tiene ciertos permisos y el usuario también tiene algunos permisos . Al usar el token, colocamos la información del usuario (clave, secreto) y la información del rol del usuario ( arn) al servidor de Alibaba Cloud, el servidor devolverá el token.

Proceso de operación específico

1. Primero, tenemos que crear un usuario y darle permisos STS.
Narrador: Después de todo, para usar el token, el usuario primero debe tener la capacidad de usar el token

2. Luego, debemos crear permisos, que se otorgarán a los roles más adelante.

3. Finalmente tenemos que asignar permisos al rol

public Map<String, String> getToken() {
    
    
       String policy = "{\n" +
               "    \"Statement\": [\n" +
               "      {\n" +
               "        \"Action\": [\n" +
               "          \"oss:PutObject\"\n" +
               "        ],\n" +
               "        \"Effect\": \"Allow\",\n" +
               "        \"Resource\": [\"acs:oss:*:*:bucket-name/*\", \"acs:oss:*:*:bucket-name\"]\n" +
               "      }\n" +
               "    ],\n" +
               "    \"Version\": \"1\"\n" +
               "  }";
       Map<String, String> resultMap = Maps.newHashMap();
       try {
    
    
           // 添加endpoint(直接使用STS endpoint,前两个参数留空,无需添加region ID)
           // DefaultProfile.addEndpoint("", "cn-hangzhou", "Sts", endpoint);

           // 构造default profile(参数留空,无需添加region ID)
           IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
           // 用profile构造client
           DefaultAcsClient client = new DefaultAcsClient(profile);
           final AssumeRoleRequest request = new AssumeRoleRequest();
           request.setMethod(MethodType.POST);
           request.setRoleArn(ROLE_ARN);
           request.setRoleSessionName(SESSION_NAME);
           // 若policy为空,则用户将获得该角色下所有权限
           request.setPolicy(policy);
           // 设置凭证有效时间 单位秒  15分钟到1小时
           request.setDurationSeconds(3600L);

           final AssumeRoleResponse response = client.getAcsResponse(request);
           resultMap.put("expiration", response.getCredentials().getExpiration());
           resultMap.put("accessKeyId", response.getCredentials().getAccessKeyId());
           resultMap.put("accessKeySecret", response.getCredentials().getAccessKeySecret());
           resultMap.put("securityToken", response.getCredentials().getSecurityToken());
       } catch (Exception e) {
    
    
           log.info("上传异常:", e);
       }
       return resultMap;
   }

Los márgenes del subrayado superior e inferior de la figura son los parámetros a configurar en el archivo de clase.

Puntos a tener en cuenta:
1. Hay un agujero a tener en cuenta: el parámetro de punto final se agrega al documento oficial

// 添加endpoint(直接使用STS endpoint,前两个参数留空,无需添加region ID)
DefaultProfile.addEndpoint("", "cn-hangzhou", "Sts", endpoint);

Después de agregar esto, informé una excepción

com.aliyuncs.exceptions.ClientException: SDK.ServerUnreachable : Speicified endpoint or uri is not valid.

Entonces, si tiene esta excepción, recuerde eliminar la configuración del punto final.

2. La política se puede omitir en el código, para que se obtengan todos los permisos del rol. Si se establece una política, se tomará la intersección de los permisos de política configurados y los permisos de función.

3. Un punto a tener en cuenta sobre la duración es que la hora devuelta es UTC. Para nuestra audiencia en el distrito East Eight, necesitamos agregar 8 horas al tiempo que usamos. Luego, esta duración devuelve la última vez que expira el token. Solo se pueden configurar de 15 minutos a 1 hora y la unidad son los segundos.

4. Al usar el token, si los permisos no son suficientes o hay un problema con los permisos de configuración,
ocurrirán los siguientes errores:

You have no right to access this object because of bucket acl.

Recuerde verificar los permisos y la configuración del rol en este momento

5. Adjunte la dirección del código de github: dirección del proyecto

6. Para las excepciones que pueden ser reportadas por permisos, puede encontrar respuestas relacionadas en este documento: Enlace de manejo de problemas

Recientemente obtuve una cuenta pública, por favor, preste atención, más productos secos originales están esperando por usted ~

Supongo que te gusta

Origin blog.csdn.net/sc9018181134/article/details/104351247
Recomendado
Clasificación