Amazon s3 AWS S3 HTTPS API请求(URL)使用临时安全凭据签名以访问对象
如何生成使用临时安全凭据签名的HTTPS API请求(URL)以访问AWS S3对象。我可以使用amazon java sdk访问对象,但我希望使用临时安全凭据(如预签名URL)生成完整的URL。 包com.siriusxm.repo.testAmazon 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
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);