暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何在OCI对象存储中兼容使用AWS S3 预签名 URL

1611

Oracle Cloud Infrastructure(OCI)的Amazon S3 Compatibility API允许客户将他们现有的S3工具(例如 SDK 客户端和 CLI)与OCI对象存储服务结合使用。只需进行极少的更改即可使依赖于S3的应用程序和操作与OCI对象存储一起工作。其中一项功能是预签名URL,它允许用户访问S3而无需他们自己的凭据。

客户创建预签名URL时,客户将其与特定操作和到期日期相关联。任何拥有该URL的人都可以执行嵌入在URL中的操作,并且该URL在其到期时间后将不再有效。由于预签名URL是不记名令牌,我们建议适当地分发和保护它们。

先决条件

在使用对象存储生成有效的预签名URL之前,请执行以下步骤:

  • 有权访问OCI租赁。如果您没有访问权限,请注册免费的OCI试用版。

  • 确保创建预签名URL的用户具有适当的对象存储权限。如果您需要这方面的帮助,请参阅通用政策和我们的政策参考。

  • 创建客户密钥。客户密钥由访问密钥和秘密密钥对组成。

要创建客户密钥,请导航至您的用户设置。

从那里向下滚动,在左侧您可以看到客户密钥。生成一个。

复制生成的密钥,因为关闭此窗口后将不会再显示它。

测  试

出于测试目的,我创建了一个名为PresignedBlog的对象存储桶并上传了一个显示“Your presigned url works !”的对象 PresignedBlogTest.txt。

收集参数

Python和Javascript SDK都需要使用以下参数。您现在可以更轻松地收集它们。

  • 访问密钥ID:指定与IAM用户或角色关联的访问密钥。通过导航到我们之前创建的客户端密钥,在OCI控制台中找到它。

  • 访问密钥:指定与访问密钥关联的秘密密钥,是访问密钥的密码。创建后您将无法访问此密钥。如果您没有保存它,请创建一个客户密钥。

  • 区域标识符:将请求发送到的OCI区域。在我们的文档中找到OCI的区域标识符。我使用的是新加坡区域,所以我的标识符是ap-singapore-1。

  • 端点:服务端点,包括您的命名空间名称和区域标识符,格式为yournamespace.compat.objectstorage.regionidentifier.oraclecloud.com。

  • Bucket:您的对象存储桶的名称。我的是PresignedBlog。

  • 键:对象的名称。我的是PresignedBlogTest.txt。

  • 到期时间:预签名URL到期前的秒数。默认值为3,600 秒。

获取对象示例

使用适用于Python的AWS开发工具包创建预签名URL(Boto3)

获取对象示例,以下代码块显示了基本代码:
import boto3
s3 = boto3.client(
        's3',
        region_name = ' ap-singapore-1',
        aws_access_key_id = '78d9ef8fb9934e322myaccessid',
        aws_secret_access_key = 'srjGwrOnMktlp26nFdeqmysecretkey',
        endpoint_url = 'https://mynamespace.compat. objectstorage.ap-singapore-1.oraclecloud.com'
)
url = s3.generate_presigned_url(
        'get_object',
        Params = {'Bucket': 'PresignedBlog', 'Key': 'PresignedBlogTest.txt'},
        ExpiresIn = 3600)
print('URL: ' + url)

运行脚本会生成一个URL,您可以在浏览器中输入该URL以访问该对象。

创建预签名

使用适用于JavaScript的AWS开发工具包创建预签名URL。

var
  AWS = require("aws-sdk"),
  util = require('util')
AWS.config.update({
  'accessKeyId': '78d9ef8fb9934e322myaccessid',
  'secretAccessKey': 'srjGwrOnMktlp26nFdeqmysecretkey',
  'region': ' ap-singapore-1',
  'endpoint': ' https://mynamespace.compat. objectstorage.ap-singapore-1.oraclecloud.com ',
  's3ForcePathStyle': true,
  'signatureVersion': 'v4',
});
const S3 = new AWS.S3()
const url = S3.getSignedUrl('getObject', {
  Bucket: 'PresignedBlog',
  Key: 'PresignedBlogTest.txt',
  Expires: 3600
});
console.log(url);

运行脚本会生成一个URL,您可以在浏览器中输入该URL同样可以访问该对象。

创建对象的注意事项

对象存储和S3使用相似的概念和术语,都将数据作为对象存储在桶中。但是,S3不使用隔间。隔离区是相关资源的逻辑分组,允许您组织和控制对云资源的访问。如果您曾经使用过OCI,您就会知道它们是多么方便和有用。因为S3没有隔离区的概念,所以默认情况下,使用S3兼容性API创建的存储桶是在根隔离区中创建的。如果您想要更改此位置,您可以为S3兼容性API指定一个不同的隔间以在其中创建存储桶。

结   论

当您希望为用户提供对S3或对象存储的访问权限而无需他们自己的IAM凭据时,预签名URL会派上用场。本文展示了如何轻松地使您的S3预签名URL与OCI对象存储一起使用。我们遍历了先决条件,收集了必要的参数,并创建了代码示例以使用AWS的Python(Boto3)和Javascript SDK生成预签名的URL。


作者简介

刘腾蛟,甲骨文云架构团队资深咨询顾问,专注于云服务基础设施的应用架构解决方案。具有15+年的金融、制造、电商等行业的企业IT架构咨询及相关技术解决方案经验。您可以通过tengjiao.liu@oracle.com联系他。

 

文章转载自甲骨文开发者社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论