Amazon s3 AWS S3 HTTPS API请求(URL)使用临时安全凭据签名以访问对象

Amazon s3 AWS S3 HTTPS API请求(URL)使用临时安全凭据签名以访问对象,amazon-s3,Amazon S3,如何生成使用临时安全凭据签名的HTTPS API请求(URL)以访问AWS S3对象。我可以使用amazon java sdk访问对象,但我希望使用临时安全凭据(如预签名URL)生成完整的URL。 包com.siriusxm.repo.test import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; impor

如何生成使用临时安全凭据签名的HTTPS API请求(URL)以访问AWS S3对象。我可以使用amazon java sdk访问对象,但我希望使用临时安全凭据(如预签名URL)生成完整的URL。 包com.siriusxm.repo.test

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.amazonaws.services.securitytoken.model.GetSessionTokenRequest;
import com.amazonaws.services.securitytoken.model.GetSessionTokenResult;
import com.siriusxm.repo.DownloadServiceImpl;

public class TemporaryCredential {

    private static String bucketName = "myrepo"; 
    private static String key  =  "test.pdf";

    public static void main(String[] args) {
        System.out.println("");

        AWSSecurityTokenServiceClient stsClient = new AWSSecurityTokenServiceClient(
                new ProfileCredentialsProvider());
    //  stsClient.setRegion(regionName);sts.us-west-2.amazonaws.com
        //
        // Start a session.
        GetSessionTokenRequest getSessionTokenRequest = new GetSessionTokenRequest();
        GetSessionTokenResult sessionTokenResult = stsClient
                .getSessionToken(getSessionTokenRequest);
        Credentials sessionCredentials = sessionTokenResult.getCredentials();
        System.out.println("Session Credentials: "
                + sessionCredentials.toString());
        // Package the session credentials as a BasicSessionCredentials
        // object for an S3 client object to use.
        BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(
                sessionCredentials.getAccessKeyId(),
                sessionCredentials.getSecretAccessKey(),
                sessionCredentials.getSessionToken());

        AmazonS3Client s3object = new AmazonS3Client(basicSessionCredentials);
        // Test. For example, get object keys for a given bucket.
        ObjectListing objects = s3object.listObjects(bucketName);
        s3object.getObject( new GetObjectRequest(bucketName, key));
        System.out.println("No. of Objects = "
                + objects.getObjectSummaries().size());
    }
}
这段代码生成动态访问密钥、密钥和安全令牌。现在我需要生成带有签名的授权头的url,这样我就可以直接访问S3对象了。有办法吗


根据这段代码,我想使用x-amz-security-token生成url,如果您想在java中这样做,您必须使用


如果要从控制台执行此操作,请转到s3 bucket,单击对象上的下载。这将显示一个框,您可以在其中单击“下载”。如果右键单击此链接并复制地址链接,则会获得此对象的预签名url

如果要在java中执行此操作,必须使用


如果要从控制台执行此操作,请转到s3 bucket,单击对象上的下载。这将显示一个框,您可以在其中单击“下载”。如果右键单击此链接并复制地址链接,则会获得此对象的预签名url

@Tom-I希望使用以下代码使用STS生成url-AWSSecurityTokenServiceClient stsClient=new AWSSecurityTokenServiceClient(new ProfileCredentialsProvider());如何使用x-amz-security-token使用临时安全凭据生成https url。请帮助STS是一种web服务,允许您为IAM用户或联合用户请求临时凭据,但这不是获取s3预签名url的方法。您可以做的是:首先使用sts获取临时IAM凭据(使用允许您从s3获取对象的策略),然后使用这些临时凭据使用GeneratePressignedUrl对URL进行预签名,如我的回答中所示。请注意,预签名的url是临时有效的,并且在后台“使用”临时凭据。如果需要,以下是如何使用临时凭据创建客户端:BasicSessionCredentials basic_session_creds=new BasicSessionCredentials(session_creds.getAccessKeyId(),session_creds.getSecretAccessKey(),session_creds.getSessionToken());AmazonS3Client s3=新的AmazonS3Client(基本会话)@Tom-我已经生成了临时凭证,如访问密钥、密钥和安全令牌。请查找附加的代码。.现在我需要使用这些凭证生成url,并带有签名“我想使用临时凭证(访问密钥、密钥和令牌)生成url,将此url共享给客户端以访问S3对象”==>这是预签名url的定义,请参阅。预签名的url不嵌入您的凭据,因此无需使用临时凭据生成它。@Tom-我想使用以下代码使用STS生成url-AWSSecurityTokenServiceClient stsClient=new AWSSecurityTokenServiceClient(new ProfileCredentialsProvider());如何使用x-amz-security-token使用临时安全凭据生成https url。请帮助STS是一种web服务,允许您为IAM用户或联合用户请求临时凭据,但这不是获取s3预签名url的方法。您可以做的是:首先使用sts获取临时IAM凭据(使用允许您从s3获取对象的策略),然后使用这些临时凭据使用GeneratePressignedUrl对URL进行预签名,如我的回答中所示。请注意,预签名的url是临时有效的,并且在后台“使用”临时凭据。如果需要,以下是如何使用临时凭据创建客户端:BasicSessionCredentials basic_session_creds=new BasicSessionCredentials(session_creds.getAccessKeyId(),session_creds.getSecretAccessKey(),session_creds.getSessionToken());AmazonS3Client s3=新的AmazonS3Client(基本会话)@Tom-我已经生成了临时凭证,如访问密钥、密钥和安全令牌。请查找附加的代码。.现在我需要使用这些凭证生成url,并带有签名“我想使用临时凭证(访问密钥、密钥和令牌)生成url,将此url共享给客户端以访问S3对象”==>这是预签名url的定义,请参阅。预签名的url不会嵌入您的凭据,因此无需使用临时凭据生成它。
AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); 

java.util.Date expiration = new java.util.Date();
long msec = expiration.getTime();
msec += 1000 * 60 * 60; // 1 hour.
expiration.setTime(msec);

GeneratePresignedUrlRequest generatePresignedUrlRequest = 
              new GeneratePresignedUrlRequest(bucketName, objectKey);
generatePresignedUrlRequest.setMethod(HttpMethod.GET); // Default.
generatePresignedUrlRequest.setExpiration(expiration);

URL s = s3client.generatePresignedUrl(generatePresignedUrlRequest);