使用 Amazon CLI 的 Amazon S3 入门
您可以通过使用 Amazon Command Line Interface(Amazon CLI)来处理通用存储桶和对象,从而开始使用 Amazon S3。存储桶是对象的容器。对象指的是一个文件和描述该文件的任何元数据。
要在 Amazon S3 中存储对象,您需要创建存储桶,然后将该对象上传到存储桶。当对象位于存储桶时,您可以将其打开、下载并移动它。当您不再需要对象或存储桶时,可以清理您的资源。
使用 Amazon S3,您只需按实际用量付费。有关 Amazon S3 特征和定价的更多信息,请参阅 Amazon S3
注意
有关将 Amazon S3 Express One Zone 存储类与目录存储桶配合使用的更多信息,请参阅 教程:开始使用 S3 Express One Zone 和使用目录存储桶。
设置
在开始将 Amazon CLI 与 Amazon S3 结合使用之前,请确保您已经:
-
注册了 Amazon 账户。有关说明,请参阅设置 Amazon S3。
-
创建了具有
s3:*
权限的用户。有关说明,请参阅设置 Amazon S3。 -
安装并配置了 Amazon CLI。有关说明,请参阅 Amazon Command Line Interface 用户指南中的安装或更新最新版本的 Amazon CLI。
要验证是否正确地配置了 Amazon CLI,请运行以下命令:
aws sts get-caller-identity
有关更多信息,请参阅《Amazon CLI Command Reference》中的 get-caller-identity。
如果正确安装和配置了 Amazon CLI,此命令将显示可用 Amazon S3 命令的列表。
步骤 1:创建第一个 Amazon S3 存储桶
设置 Amazon CLI 后,您就可以在 Amazon S3 中创建存储桶了。Amazon S3 中的每个对象都存储在存储桶中。必须先创建一个存储桶,然后才能在 Amazon S3 中存储数据。
注意
您无需为创建存储桶付费。只有将对象存储到存储桶中以及从存储桶传入和传出对象才需要付费。仿照本指南中的示例操作产生的费用非常少(不到 1 USD)。有关存储费用的更多信息,请参阅 Amazon S3 定价
创建存储桶
-
使用
s3api create-bucket
命令创建存储桶。将
替换为唯一的存储桶名称,并将amzn-s3-demo-bucket
us-east-1
替换为您所需的区域:aws s3api create-bucket --bucket
amzn-s3-demo-bucket
--regionus-east-1
对于 us-east-1 以外的区域,您需要指定位置限制:
aws s3api create-bucket --bucket
amzn-s3-demo-bucket
--regionus-west-2
--create-bucket-configuration LocationConstraint=us-west-2
注意
-
存储桶创建后,便无法再更改其区域。
-
要最大程度地减少延迟和成本以及满足法规要求,请选择一个靠近您的区域。在某一区域存储的对象将一直留在该区域,除非您特意将其转移到其他区域。有关 Amazon S3 Amazon 区域的列表,请参阅《Amazon Web Services 一般参考》中的 Amazon 服务端点。
-
存储桶名称必须满足以下要求:
-
在分区中是唯一的。分区是区域的分组。Amazon 目前有三个分区:
aws
(商用区域)、aws-cn
(中国区域)和aws-us-gov
(Amazon GovCloud (US) 区域)。 -
长度必须介于 3 到 63 个字符之间。
-
只能由小写字母、数字、句点(.)和连字符(-)组成。为了获得最佳兼容性,我们建议您避免在存储桶名称中使用句点(.),但仅用于静态网站托管的存储桶除外。
-
以字母或数字开头和结尾。
-
-
创建存储桶后,便无法更改其名称。
-
请勿在存储桶名称中包含敏感信息。存储桶名称会显示在指向存储桶中的对象的 URL 中。
-
-
通过列出所有存储桶来验证是否创建了您的存储桶:
aws s3 ls
-
对于对象所有权,您可以禁用或启用 ACL,并控制上传到存储桶的对象的所有权。
已禁用 ACL
要设置强制存储桶拥有者(默认):ACL 已禁用,存储桶拥有者自动拥有并完全控制通用存储桶中的每个对象:
aws s3api put-bucket-ownership-controls --bucket
amzn-s3-demo-bucket
--ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"注意
默认情况下,ACL 处于禁用状态。Amazon S3 中的大多数现代使用案例不再需要使用 ACL。我们建议您将 ACL 保持为禁用状态,除非有必须单独控制每个对象的访问权限的特殊情况。有关更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。。
已启用 ACL
-
要设置存储桶拥有者优先:存储桶拥有者拥有并完全控制其它账户使用
bucket-owner-full-control
标准 ACL 写入存储桶的新对象:aws s3api put-bucket-ownership-controls --bucket
amzn-s3-demo-bucket
--ownership-controls="Rules=[{ObjectOwnership=BucketOwnerPreferred}]"如果您应用存储桶拥有者优先设置并希望要求所有 Amazon S3 上传都包含
bucket-owner-full-control
标准 ACL,则可以要求 Amazon S3 PUT 操作使用存储桶拥有者完全控制的标准 ACL(首选存储桶拥有者),该策略只支持使用此 ACL 上传对象。 -
要设置对象编写者:上传对象的 Amazon 账户拥有该对象,对其拥有完全控制权,并且可以通过 ACL 授予其他用户访问该对象的权限:
aws s3api put-bucket-ownership-controls --bucket
amzn-s3-demo-bucket
--ownership-controls="Rules=[{ObjectOwnership=ObjectWriter}]"
注意
默认设置为强制存储桶拥有者。要应用默认设置并将 ACL 保持为禁用状态,只需要
s3:CreateBucket
权限。要启用 ACL,您必须具有s3:PutBucketOwnershipControls
权限。检查存储桶的当前对象所有权设置:
aws s3api get-bucket-ownership-controls --bucket
amzn-s3-demo-bucket
-
-
验证是否已启用屏蔽公共访问权限(默认情况下,对于新存储桶启用此设置):
aws s3api get-public-access-block --bucket
amzn-s3-demo-bucket
默认情况下,为新的存储桶启用所有四个屏蔽公共访问权限设置。我们建议您将所有设置保持为启用状态,除非您知道您需要为您的特定使用案例关闭其中一个或多个设置。有关屏蔽公共访问权限的更多信息,请参阅阻止对您的 Amazon S3 存储的公有访问。
如果您需要启用屏蔽公共访问权限,请使用以下命令:
aws s3api put-public-access-block --bucket
amzn-s3-demo-bucket
--public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"注意
要启用所有“屏蔽公共访问权限”设置,只需要
s3:CreateBucket
权限。要关闭任何“屏蔽公共访问权限”设置,您必须拥有s3:PutBucketPublicAccessBlock
权限。 -
为存储桶启用版本控制:
aws s3api put-bucket-versioning --bucket
amzn-s3-demo-bucket
--versioning-configuration Status=Enabled默认情况下,存储桶版本控制处于禁用状态。版本控制是在相同的存储桶中保留对象的多个变量的方法。对于 存储桶中存储的每个对象,您可以使用版本控制功能来保留、检索和还原它们的各个版本。使用版本控制能够更加轻松地从用户意外操作和应用程序故障中恢复数据。有关版本控制的更多信息,请参阅使用 S3 版本控制保留对象的多个版本。
-
Amazon S3 对象锁定有助于保护新对象不被删除或覆盖。有关更多信息,请参阅 使用对象锁定以锁定对象。要启用使用对象锁定以锁定对象(需要存储桶版本控制),请执行以下操作:
对于新存储桶:
aws s3api create-bucket --bucket
amzn-s3-demo-bucket
--regionus-east-1
--object-lock-enabled-for-bucket对于现有存储桶:
aws s3api put-object-lock-configuration --bucket
amzn-s3-demo-bucket
--object-lock-configuration '{"ObjectLockEnabled": "Enabled"}'如果要在启用对象锁定的同时设置默认的使用对象锁定以锁定对象,可以使用:
aws s3api put-object-lock-configuration --bucket
amzn-s3-demo-bucket
--object-lock-configuration '{"ObjectLockEnabled":"Enabled","Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Days":30}}}'您可以将
"COMPLIANCE"
替换为"GOVERNANCE"
以使用限制较少的模式,并根据需要调整天数。注意
要创建启用了对象锁定的存储桶,您必须具有以下权限:
s3:CreateBucket
、s3:PutBucketVersioning
和s3:PutBucketObjectLockConfiguration
。 -
您可以向存储桶添加标签。利用 Amazon 成本分配功能,可以使用存储桶标签来对存储桶的使用计费添加注释。一个标签即为一个键值对,用于表示用户分配给存储桶的标记。有关更多信息,请参阅 使用成本分配 S3 存储桶标签。
向存储桶添加标签:
aws s3api put-bucket-tagging --bucket
amzn-s3-demo-bucket
--tagging 'TagSet=[{Key=Purpose,Value=Testing},{Key=Environment,Value=Development}]' -
通过将具有 Amazon S3 托管式密钥的服务器端加密 (
SSE-S3
) 用作基本加密配置级别,对存储桶和新对象进行加密。要验证存储桶的默认加密,请使用以下命令:aws s3api get-bucket-encryption --bucket
amzn-s3-demo-bucket
您还可以为存储桶配置具有 Amazon KMS 密钥的服务器端加密 (
SSE-KMS
) 或具有 Amazon KMS 密钥的双层服务器加密 (DSSE-KMS
)。Amazon 托管式密钥 (aws/s3
) 和客户自主管理型密钥都可用作SSE-KMS
和DSSE-KMS
加密配置的 Amazon KMS 密钥。有关客户自主管理型密钥的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的客户密钥和 Amazon 密钥。有关创建 Amazon KMS 密钥的更多信息,请参阅《Amazon Key Management Service Developer Guide》中的 Creating keys。重要
Amazon KMS 密钥必须与 Amazon S3 存储桶位于同一 Amazon 区域中。Amazon S3 存储桶加密不支持跨区域 KMS 密钥。
当您将存储桶配置为使用具有 SSE-KMS 的默认加密时,您也可以使用 Amazon S3 存储桶密钥。Amazon S3 存储桶密钥可通过减少从 Amazon S3 到 Amazon KMS 的请求流量,来降低加密成本。有关更多信息,请参阅 使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本。DSSE-KMS 不支持 Amazon S3 存储桶密钥。在 Amazon CLI 中,当创建新的存储桶时,Amazon S3 存储桶密钥默认处于未启用状态。这与默认启用它们的控制台行为不同。
配置
SSE-KMS
并启用 Amazon S3 存储桶密钥:aws s3api put-bucket-encryption --bucket
amzn-s3-demo-bucket
--server-side-encryption-configuration "{\"Rules\":[{\"ApplyServerSideEncryptionByDefault\":{\"SSEAlgorithm\":\"aws:kms\",\"KMSMasterKeyID\":\"YOUR-KMS-KEY-ARN\"},\"BucketKeyEnabled\":true}]}"检查是否为存储桶启用了 Amazon S3 存储桶密钥:
aws s3api get-bucket-encryption --bucket
amzn-s3-demo-bucket
输出将包括一个设置为
true
或false
的BucketKeyEnabled
字段。要配置
DSSE-KMS
,请使用以下命令:aws s3api put-bucket-encryption --bucket
amzn-s3-demo-bucket
--server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms:dsse","KMSMasterKeyID":"YOUR-KMS-KEY-ARN
"}}]}'有关默认加密的更多信息,请参阅为 Amazon S3 存储桶设置默认服务器端加密行为。有关 SSE-S3 的更多信息,请参阅使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)。
重要
如果您将 SSE-KMS 或 DSSE-KMS 选项用于默认加密配置,则您将受到 Amazon KMS 的每秒请求数(RPS)配额限制。可以通过启用 Amazon S3 存储桶密钥来减少 KMS API 调用,这样可以减少发送到 Amazon KMS 的请求数量。有关 Amazon KMS 限额以及如何请求增加限额的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的限额。
您已在 Amazon S3 中完成存储桶创建。下一步是将对象上传到存储桶。
步骤 2:将对象上传到存储桶
在 Amazon S3 中创建存储桶后,您就可以将对象上传到存储桶了。对象可以是任何类型的文件:文本文件、图片、视频等等。
将对象上传到存储桶
-
创建要上传的简单文本文件。您可以使用任何文本编辑器或运行以下命令:
echo 'Hello, Amazon S3!' > example.txt
-
使用 s3 cp 命令将文件上传到存储桶:
aws s3 cp example.txt s3://
amzn-s3-demo-bucket
/如果上传成功,您将看到类似于以下内容的输出:
upload: ./example.txt to s3://
amzn-s3-demo-bucket
/example.txt -
通过列出存储桶的内容来验证对象是否已上传:
aws s3 ls s3://
amzn-s3-demo-bucket
/
您已成功将对象上传到存储桶。下一步是下载对象。
步骤 3:下载对象
当您将对象上传到存储桶后,您可以查看有关对象的信息并将对象下载到本地计算机上。
从 Amazon S3 存储桶下载对象
-
获取有关对象的信息:
aws s3api head-object --bucket
amzn-s3-demo-bucket
--key example.txt此命令返回有关对象的元数据,包括其内容类型、内容长度和上次修改日期。
-
将对象下载到您的本地计算机:
aws s3 cp s3://
amzn-s3-demo-bucket
/example.txt downloaded-example.txt如果下载成功,您将看到类似于以下内容的输出:
download: s3://
amzn-s3-demo-bucket
/example.txt to ./downloaded-example.txt -
验证已下载文件的内容:
cat downloaded-example.txt
注意
-
与控制台不同,Amazon CLI 可以使用通配符或
--recursive
标志一次下载多个对象。 -
使用 Amazon CLI 下载对象时,对象键名称末尾的句点(.)会保留,这与在控制台中移除句点的行为不同。如果对象键以句点结尾,则这一点很重要。
下载多个对象的示例:
要从 Amazon S3 存储桶下载具有特定文件扩展名的多个对象,请使用带有 exclude
和 include
筛选条件的递归复制命令,如示例所示。
aws s3 cp s3://
amzn-s3-demo-bucket
/ . --recursive --exclude "*" --include "*.txt"
您已成功下载您的对象。下一步是将对象复制到文件夹中。
步骤 4:将对象复制到文件夹
您已向存储桶添加一个对象并已下载该对象。现在,您创建一个文件夹并将对象复制到该文件夹中。
将对象复制到文件夹中
-
在 Amazon S3 中,文件夹由对象键中的前缀表示。通过复制带有前缀的对象来创建“文件夹”:
aws s3 cp s3://
amzn-s3-demo-source-bucket
/example.txt s3://amzn-s3-demo-destination-bucket
/favorite-files/example.txt如果复制成功,您将看到类似于以下内容的输出:
copy: s3://
amzn-s3-demo-source-bucket
/example.txt to s3://amzn-s3-demo-destination-bucket
/favorite-files/example.txt -
通过列出文件夹的内容来验证对象是否已复制:
aws s3 ls s3://
amzn-s3-demo-destination-bucket
/favorite-files/
您已成功将对象复制到文件夹中。下一步是删除对象和存储桶。
步骤 5:删除对象和存储桶
当您不再需要对象或存储桶时,我们建议您删除它们以防止发生进一步的费用。如果您将此入门演练作为练习完成,并且不打算使用您的存储桶或对象,我们建议您删除存储桶和对象,从而不再产生费用。
在删除存储桶之前,请清空存储桶或删除存储桶中的对象。删除对象和存储桶后,它们将不再可用。
如果要继续使用相同的存储桶名称,我们建议您删除对象或清空存储桶,但不要删除存储桶。删除存储桶后,该名称可供重复使用。但是,在您有机会重复使用此名称之前,其他Amazon账户可能会创建具有相同名称的存储桶。
删除对象
如果您希望选择要删除的对象而不清空存储桶中的所有对象,则可以删除单个对象。
删除特定对象:
aws s3 rm s3://
amzn-s3-demo-bucket
/example.txt
如果删除成功,您将看到类似于以下内容的输出:
delete: s3://
amzn-s3-demo-bucket
/example.txt
清空存储桶
如果您计划删除存储桶,则必须首先清空存储桶,这会删除存储桶中的所有对象、版本和删除标记。
清空存储桶
重要
无法撤消清空存储桶操作。当正在执行清空存储桶操作时添加到存储桶的对象将被删除。
-
选项 1:对于较小的存储桶,可以使用带有
--recursive
标志的rm
命令来删除存储桶中的所有对象:aws s3 rm s3://
amzn-s3-demo-bucket
--recursive此命令删除存储桶中的所有对象,包括文件夹中的对象。
注意
如果存储桶包含许多对象或大型对象,则此命令可能会超时。对于包含大量数据的存储桶,请使用 Amazon S3 生命周期规则使存储桶中的对象过期。
选项 2:使用 Amazon S3 生命周期规则(建议用于大型存储桶)
对于包含许多对象或大型对象的存储桶,请使用 Amazon S3 生命周期规则自动使所有对象过期并删除它们。等待生命周期规则进行处理(这可能需要长达 24 小时)。有关使用生命周期规则清空存储桶的更多信息,请参阅如何使用生命周期配置规则清空 Amazon S3 存储桶?
-
验证存储桶是否为空:
aws s3 ls s3://
amzn-s3-demo-bucket
-
如果存储桶启用了版本控制,请使用以下命令来删除受版本控制的对象和删除标记。
移除受版本控制的对象:
aws s3api delete-objects --bucket
amzn-s3-demo-bucket
--delete "$(aws s3api list-object-versions --bucketamzn-s3-demo-bucket
--output json --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"移除删除标记:
aws s3api delete-objects --bucket
amzn-s3-demo-bucket
--delete "$(aws s3api list-object-versions --bucketamzn-s3-demo-bucket
--output json --query='{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}')" -
验证存储桶是否已清空了所有对象版本和删除标记:
aws s3api list-object-versions --bucket
amzn-s3-demo-bucket
输出应显示没有剩余任何版本或删除标记。
删除存储桶
清空存储桶或从存储桶中删除所有对象后,您可以删除存储桶。
重要
无法撤消删除存储桶的操作。存储桶名称是唯一的。如果您删除存储桶,则其他 Amazon 用户可以使用该名称。如果您希望继续使用相同的存储桶名称,请不要删除该存储桶。相反,清空并保留存储桶。
删除存储桶
-
删除存储桶:
aws s3api delete-bucket --bucket
amzn-s3-demo-bucket
-
通过列出所有存储桶来验证是否已删除了该存储桶:
aws s3 ls
后续步骤
在前面的示例中,您了解了如何使用 Amazon CLI 执行一些基本 Amazon S3 任务。
下列主题介绍了各种可促使您深入了解 Amazon S3,进而在应用程序中实施服务的方式。
以下列表显示了 Amazon S3 的常见 Amazon CLI 命令:
-
cp:在本地文件系统和 Amazon S3 之间或者在 Amazon S3 位置之间复制文件或对象
-
ls:列出指定存储桶和前缀下的 Amazon S3 对象和通用前缀
-
mb:创建 Amazon S3 存储桶
-
mv:在本地文件系统和 Amazon S3 之间或在 Amazon S3 位置之间移动文件或对象
-
presign:为 Amazon S3 对象生成预签名 URL,以支持在没有 Amazon 凭证的情况下进行临时访问
-
rb:移除空的 Amazon S3 存储桶。您可以使用
--force
标志通过单个命令自动清空和删除包含内容的存储桶。此操作无法撤消。 -
rm:从 Amazon S3 中删除对象
-
sync:通过以递归方式将新的和更新的文件从源目录复制到目标,来同步目录和 Amazon S3 前缀。
-
website:将存储桶配置为静态网站
有关 Amazon S3 的 Amazon CLI 命令的更多信息,请参阅以下资源: