移动应用使用临时凭证直传 本文主要讲解移动应用使用临时凭证直传文件的最佳实践。 实践背景 在移动互联网时代,从手机里的照片到各类文件,移动端APP需要上传到服务器的文件越来越多。开发者可以使用媒体存储来保存这些文件,媒体存储提供的SDK接口可以支持直接在移动端进行文件上传。 访问媒体存储需要使用密钥(AK/SK),但是如果在移动端直接使用长期密钥访问对象存储,遭受黑客攻击就可能会暴露长期密钥,导致对象存储中的文件泄露或被篡改,存在很大的风险。 媒体存储提供STS角色管理功能,可以为移动端颁发一个自定义时效和权限的访问凭证,无需在移动端暴露长期密钥。使用STS授权访问时,请务必按照业务情况,以最细粒度的权限原则进行授权,避免放大临时用户的权限,保证资源访问安全。 应用流程 使用临时凭证直传时,具体应用流程如下: 实践步骤 创建用于获取STS访问凭证的角色 通过媒体存储控制台,创建STS角色,并获取对应的arn信息,具体可参考 STS角色管理 。 对应角色授权并且获取STS临时密钥 具体可参照如下java示例: // STS endPoint String endPoint " "; // 在对象存储控制台访问密钥AccessKey和SecretKey。 String accessKey " "; String secretKey " "; // 填写步骤一获取的角色ARN。 String roleArn " "; // 设置临时访问凭证的名称. String roleSessionName " "; // 设置 Policy 允许上传对象 String policy "{"Version":"20121017"," + ""Statement":[" + "{"Effect":"Allow"," ""Action":["s3:PutObject"]," ""Resource":["arn:aws:s3::: /"]}" + "]}"; // 创建STS Client BasicAWSCredentials basicAWSCredentials new BasicAWSCredentials(accessKey, secretKey); AwsClientBuilder.EndpointConfiguration endpointConfiguration new AwsClientBuilder.EndpointConfiguration(endPoint, ""); AWSSecurityTokenService stsClient AWSSecurityTokenServiceClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials)) .withEndpointConfiguration(endpointConfiguration) .build(); AssumeRoleRequest assumeRoleRequest new AssumeRoleRequest(); assumeRoleRequest.setRoleArn(roleArn); assumeRoleRequest.setRoleSessionName(roleSessionName); assumeRoleRequest.setPolicy(policy); AssumeRoleResult assumeRoleRes stsClient.assumeRole(assumeRoleRequest); Credentials stsCredentials assumeRoleRes.getCredentials(); System.out.println("Expiration: " + stsCredentials.getExpiration()); System.out.println("Access Key Id: " + stsCredentials.getAccessKeyId()); System.out.println("Access Key Secret: " + stsCredentials.getSecretAccessKey()); System.out.println("Security Token: " + stsCredentials.getSessionToken());