我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
适用于 Java 的 亚马逊云科技 开发工具包 2.x 现在支持亚马逊 CloudFront 签名 URL 和 Cookie
我们很高兴地宣布,适用于
新的软件开发工具包 2.x CloudFrontUtilities
组件提供了许多客户在适用于 Java 的 亚马逊云科技 开发工具包 1.x 中缺少的备受要求的签名功能。SDK 2.x API 中的新 API 已通过一个入口点进行了重新设计,以简化使用体验。
动机
您可以使用签名 URL 或签名 Cookie 来控制对内容的访问权限。签名 URL 允许您创建一个新的 URL,该网址可以临时访问您受保护的 CloudFront 资源之一。签名 Cookie 允许您创建一组临时证书,您的客户可以使用这些证书直接访问一个或多个受保护的 CloudFront 资源。
使用云端签名
1) 为 CloudFront 添加依赖关系
入门的第一步是在您的项目中添加 CloudFront 的依赖关系。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>cloudfront</artifactId>
<version>2.18.26</version> <!-- Update to use the latest version. -->
</dependency>
我们建议使用
2) 实例化 CloudFrontUtilities 类
要实例化实用程序类,你只需要调用 c reate ()
。
import software.amazon.awssdk.services.cloudfront.CloudFrontUtilities;
CloudFrontUtilities cloudFrontUtilities = CloudFrontUtilities.create();
3) 创建 CloudfrontSigner 请求
接下来,你要使用生成器创建 CloudFrontSignerReques
t。请求可以同时用于网址和 cookie。
示例 #1:带有固定政策的已签名请求
对于带有固定策略的 URL/Cookie,请创建 c annedSignerRequest
,指定资源网址、私钥、公钥 ID 和到期日期。
import software.amazon.awssdk.services.cloudfront.model.CannedSignerRequest;
import java.security.PrivateKey;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
Instant expirationDate = Instant.now().plus(7, ChronoUnit.DAYS);
String resourceUrl = "https://d1npcfkc2mojrf.cloudfront.net/s3ObjectKey";
String keyPairId = "myKeyPairId";
PrivateKey privateKey = myPrivateKey; // Either PrivateKey or Path can be passed in
CannedSignerRequest cannedRequest = CannedSignerRequest.builder()
.resourceUrl(resourceUrl)
.privateKey(privateKey)
.keyPairId(keyPairId)
.expirationDate(expirationDate)
.build();
示例 #2:使用自定义策略签名的请求
对于具有自定义策略的 URL/Cookie,请创建一个 Cu stomSignerRequ
es t,您还可以在其中指定有效日期和/或 IP 范围。在此示例中,我们指定了活动日期和 IP 范围,但您可以选择仅指定其中一个。
import software.amazon.awssdk.services.cloudfront.model.CustomSignerRequest;
import java.nio.file.Path;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
Instant expirationDate = Instant.now().plus(7, ChronoUnit.DAYS);
String resourceUrl = "https://d111111abcdef8.cloudfront.net/s3ObjectKey";
String keyPairId = "myKeyPairId";
Instant activeDate = Instant.now().plus(2, ChronoUnit.DAYS);
String ipRange = "192.168.0.1/24";
Path keyFile = myKeyFile; // Either PrivateKey or Path can be passed in
CustomSignerRequest customRequest = CustomSignerRequest.builder()
.resourceUrl(resourceUrl)
.privateKey(keyFile)
.keyPairId(keyPairId)
.expirationDate(expirationDate)
.activeDate(activeDate) //optional
.ipRange(ipRange) //optional
.build();
4) 创建签名网址/签名 Cookie
生成请求后,创建签名 URL 或签名 cookie,您可以选择从中生成由 HTTP 客户端执行的 sdkHttpRequest
。
示例 #1:采用固定政策的签名 URL
要创建 带有固定策略的
SigneDurl
,你只需要调用 getSigneDurlwithcannedPolicy (),传入 cannedSignerRequ
est 实例。 使用
SigneDurl
对象,您可以调用 url () 来返回签名的 网址
字符串。
import software.amazon.awssdk.services.cloudfront.model.CannedSignerRequest;
import software.amazon.awssdk.services.cloudfront.url.SignedUrl;
SignedUrl signedUrl = cloudFrontUtilities.getSignedUrlWithCannedPolicy(cannedRequest);
// Returns a signed URL String that you can provide to users which will allow them to access your content
String url = signedUrl.url()
示例 #2:带有自定义策略的签名 Cookie
要创建
使用 CookiesForCustomPolicy ,你只需要调用 getCookiesforCustomPol
icy (),传入 customSignerRequest 实例
。 CookieSforCustom
Policy 对象,您可以调用相应的方法来返回策略、签名和密钥对 ID cookie 标头值,然后您可以将其
import software.amazon.awssdk.services.cloudfront.cookie.CookiesForCustomPolicy;
import software.amazon.awssdk.services.cloudfront.model.CustomSignerRequest;
CookiesForCustomPolicy cookies = cloudFrontUtilities.getCookiesForCustomPolicy(customRequest);
// Generates Set-Cookie header values to send to the viewer to allow access
String signatureHeaderValue = cookies.signatureHeaderValue();
String keyPairIdHeaderValue = cookies.keyPairIdHeaderValue();
String policyHeaderValue = cookies.policyHeaderValue();
清理
您生成的 CloudFront 签名 URL/Cookie 将在指定的到期日期之前有效,在此之后,用户将无法访问您的私有内容。如果您希望在到期日期之前撤消访问权限,则只需要从 CloudFront 分配中删除可信签名人即可。
要完全拆除和清理所有资源,您必须先禁用 CloudFront 分配。然后,您可以在 CloudFront 中删除您的分配、密钥组和公钥。最后,您可以清空和删除 S3 存储桶。
结论
在这篇博客文章中,我们介绍了 CloudFront 签名 URL 和签名 Cookie 的基本功能。我们还展示了带有固定政策的签名网址和带有自定义策略的签名 Cookie 的代码示例。要了解有关如何设置和开始使用该功能的更多信息,请访问我们的
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。