AWS入门实践-S3对象存储的基本用法

AWS S3(Simple Storage Service)是亚马逊云服务提供的一种高度可扩展、安全且经济高效的对象存储服务。它允许用户在任何位置存储和检索任意数量的数据,非常适合存储和分发静态文件、备份数据以及作为数据湖的存储层。

一、S3上传和下载文件(AWS门户)

1、创建 S3 存储桶

  1. 登录AWS控制台

    访问 https://console.aws.amazon.com/ 并使用您的AWS账户凭证登录。

  2. 打开S3服务控制台

    在AWS服务列表中,找到"存储"部分,然后选择"S3"服务。

  3. 创建存储桶

    在S3控制台中,单击"创建存储桶"按钮。

  4. 命名存储桶

    输入一个全局唯一的存储桶名称。存储桶名称必须遵循特定的命名规则,例如只能包含小写字母、数字和连字符(-)。

  5. 选择AWS区域

    选择要在其中创建存储桶的AWS区域。通常选择离您的应用程序或用户最近的区域,以获得更好的性能和更低的延迟。

  6. 配置存储桶设置(可选)

    根据您的需求,您可以配置存储桶的其他设置,例如:

    • 存储桶所有权
    • 存储桶版本控制
    • 存储桶加密
    • 对象锁定
    • 标签
    • 静态网站托管等
  7. 创建存储桶

    检查您的设置,然后单击"创建存储桶"按钮。

2、上传文件

  • 选择要上传文件的目标存储桶
  • 点击 "上传" 按钮
  • 点击 "添加文件" 或"添加文件夹"并从本地选择要上传的文件
  • 可以选择加密、元数据等高级选项(可选)
  • 点击 "上传" 开始上传文件

3、下载文件

  1. 选择包含目标文件的存储桶

    • 在 S3 控制台中,找到并选择包含您要下载文件的存储桶
  2. 选择要下载的文件

    • 在存储桶内容列表中,找到并选中您要下载的文件
    • 您可以通过文件名、前缀等条件过滤文件列表
  3. 下载文件

    • 选中文件后,点击顶部的 "下载" 按钮
    • 或者右键单击文件,选择 "下载" 选项
    • 浏览器会提示您保存文件到本地
  4. 选择保存位置并确认下载

    • 选择要将文件保存到本地的目录路径
    • 点击 "保存" 按钮开始下载文件
  5. 等待下载完成

    • 根据文件大小,下载可能需要一些时间
    • 下载完成后,您可以在指定的本地目录中找到该文件

二、S3上传和下载文件(AWS命令行)

1、AWS命令行工具的安装

在 Windows 上安装和配置 AWS CLI 的步骤如下:

  1. 安装 AWS CLI

  2. 验证 AWS CLI 安装

    打开命令提示符或 PowerShell,输入以下命令验证安装:

    复制代码
    aws --version

    如果安装成功,将显示 AWS CLI 版本。

  3. 配置 AWS 凭证

    AWS CLI 需要使用 AWS 访问密钥和秘密访问密钥进行身份验证。您可以使用以下两种方式之一来配置凭证:

    • 使用 aws configure 命令

      在命令提示符或 PowerShell 中输入:

      复制代码
      aws configure

      系统将提示您输入 AWS Access Key ID、AWS Secret Access Key、默认区域名称和默认输出格式。您可以从 AWS 管理控制台获取访问密钥和秘密访问密钥。

    • 手动创建凭证文件

      转到 %USERPROFILE%\.aws 目录(如果不存在则创建),在该目录下创建一个名为 credentials 的文件,并添加以下内容:

      复制代码
      [default]
      aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
      aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY

      YOUR_AWS_ACCESS_KEY_IDYOUR_AWS_SECRET_ACCESS_KEY 替换为您的实际凭证。

  4. 验证配置

    您可以运行以下命令来验证配置是否正确:

    复制代码
    aws iam get-user

    如果一切配置正确,该命令将显示关于您的 AWS 用户的信息。如果出现错误,请检查您的凭证是否正确。

  5. 其他配置选项

    您还可以配置其他选项,如默认区域和输出格式。例如:

    复制代码
    aws configure set default.region us-west-2
    aws configure set default.output json

    这将把默认区域设置为 us-west-2,默认输出格式设置为 JSON。

2、AWS S3 存储桶创建

bash 复制代码
aws S3 mb s3://my-bucket

3、AWS S3 文件上传

bash 复制代码
aws s3 cp example.txt s3://my-bucket/

4、AWS S3 文件下载

bash 复制代码
aws s3 cp s3://my-bucket/example.txt .

上面命令是将S3文件下载到当前目录

5、AWS S3 文件批量上传和下载

AWS S3 SYNC 命令用于同步本地目录或 S3 存储桶中的内容与另一个 S3 存储桶。它可以上传、更新和删除对象,以确保源和目标之间的内容保持同步。

(1). 将本地目录同步到 S3 存储桶

复制代码
aws s3 sync /path/to/local/dir s3://my-bucket

这将把本地目录 /path/to/local/dir 中的所有文件和子目录上传到 S3 存储桶 my-bucket。如果存储桶中已经存在同名对象,它们将被覆盖。

(2). 将 S3 存储桶同步到本地目录

复制代码
aws s3 sync s3://my-bucket /path/to/local/dir

这将把 S3 存储桶 my-bucket 中的所有对象下载到本地目录 /path/to/local/dir。如果本地目录中已经存在同名文件,它们将被覆盖。

(3). 在两个 S3 存储桶之间同步

复制代码
aws s3 sync s3://source-bucket s3://destination-bucket

这将把 S3 存储桶 source-bucket 中的所有对象复制到 destination-bucket。如果目标存储桶中已经存在同名对象,它们将被覆盖。

(4). 排除某些文件或目录

您可以使用 --exclude 参数排除某些文件或目录。例如:

复制代码
aws s3 sync /path/to/local/dir s3://my-bucket --exclude "*.tmp" --exclude "temp/*"

这将同步本地目录,但排除所有以 .tmp 结尾的文件和 temp 子目录中的所有文件。

(5). 删除目标中多余的对象

默认情况下,sync 命令不会删除目标中多余的对象。如果您希望在同步过程中删除目标中多余的对象,可以使用 --delete 参数:

复制代码
aws s3 sync /path/to/local/dir s3://my-bucket --delete

这将同步本地目录,并删除 S3 存储桶 my-bucket 中多余的对象。

aws s3 sync 命令还支持许多其他选项,如设置 ACL、元数据、存储类和加密等。您可以使用 aws s3 sync help 获取更多信息。

三、通过签名数据共享S3上的数据

AWS S3 提供了一种通过签名 URL 或签名 Cookie 共享存储桶或对象的方法,无需提供您的 AWS 访问密钥。这种方式可以安全地向他人授予临时访问权限,而不会泄露您的凭证。

以下是通过签名共享 S3 上数据的步骤:

1. 签名 URL

签名 URL 可以提供对特定对象的临时访问权限。您可以使用 AWS CLI 或 AWS SDK 生成签名 URL。

使用 AWS CLI 生成签名 URL:

复制代码
aws s3 presign s3://my-bucket/my-object --expires-in 3600

这将为 my-bucket 存储桶中的 my-object 对象生成一个签名 URL,有效期为 1 小时(3600 秒)。您可以将此 URL 共享给其他人,他们就可以在有效期内访问该对象。

签名 Cookie 可以提供对整个存储桶的临时访问权限。您需要使用 AWS SDK 生成签名 Cookie。

使用 AWS SDK for Java 生成签名 Cookie:

复制代码
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;

AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
String bucketName = "my-bucket";

// 生成签名 Cookie
String signedCookie = s3Client.generatePresignedUrl(
    new GeneratePresignedUrlRequest(bucketName, null)
    .withMethod(HttpMethod.GET)
    .withExpiration(DateTime.now().plusHours(1))
).toString();

这将为 my-bucket 存储桶生成一个签名 Cookie,有效期为 1 小时。您可以将此 Cookie 共享给其他人,他们就可以在有效期内访问该存储桶中的所有对象。

3. 限制访问权限

您可以在生成签名 URL 或签名 Cookie 时设置一些限制,例如:

  • 过期时间: 设置访问权限的有效期。
  • IP 地址范围: 限制只有特定 IP 地址范围可以访问。
  • HTTP 方法: 限制只允许特定的 HTTP 方法(GET、PUT 等)。
  • 请求头和查询参数: 限制只有特定的请求头和查询参数才能访问。

例如,以下命令将生成一个只允许从 192.168.1.0/24 IP 范围进行 GET 请求访问的签名 URL:

复制代码
aws s3 presign s3://my-bucket/my-object \
  --expires-in 3600 \
  --ip-range 192.168.1.0/24 \
  --allowed-method GET

通过签名 URL 或签名 Cookie 共享 S3 上的数据是一种安全且灵活的方式,可以根据您的需求设置不同的访问权限。但请记住,一旦共享了签名 URL 或签名 Cookie,任何拥有它们的人都可以在有效期内访问相应的对象或存储桶,因此请谨慎共享。

相关推荐
新钛云服2 小时前
如何构建一套自动化的阿里云费用报告系统
运维·阿里云·自动化·云计算
人工智能知识库3 小时前
阿里云大模型ACA题库(知识点统计)
阿里云·大模型·云计算·阿里云aca·aca
彩旗工作室5 小时前
腾讯云上调用大模型的全部入口整理(2026最新版)
人工智能·大模型·云计算·腾讯云
gaize12136 小时前
阿里云轻量适配宝塔
阿里云·云计算
云飞云共享云桌面7 小时前
东莞智能装备工厂10个solidworks共享一台服务器做装配体设计
运维·服务器·网络·云计算·电脑
easy_coder8 小时前
从 ManifestRender 到 Certificate:一次 Kubernetes 应用发布故障的深度排障实录
云原生·云计算
TG_yunshuguoji8 小时前
阿里云代理商:百炼声音复刻实战 3 步生成专属语音模型
服务器·人工智能·阿里云·云计算
安全渗透Hacker9 小时前
阿里云百炼 + VS Code + Kilo 完整实战教程
人工智能·阿里云·ai·云计算·ai编程
duoduo_sing10 小时前
反向操作!将天翼云/阿里云/腾讯云“虚拟磁盘”作为备份目标盘
阿里云·云计算·腾讯云·异地备份·松鼠备份·3-2-1备份原则
亚马逊云开发者11 小时前
Bedrock 调用次数比预期多了一倍?CloudTrail 5 分钟定位元凶
aws