Amazon Simple Storage Service
Amazon S3 提供的访问策略选项大致可分为基于资源的策略和用户策略两类。附加到资源 (存储桶和对象) 的访问策略称为基于资源的策略。例如,存储桶策略和访问控制列表 (ACL) 就是基于资源的策略。您也可以将访问策略附加到您账户中的用户。这些策略称为用户策略。您可以选择使用基于资源的策略、用户策略或这些策略的某种组合来管理您的 Amazon S3 资源权限。
跨源资源共享 (CORS)
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/cors.html
Inventory
Amazon S3 清单提供您的对象和元数据的平面文件列表,该列表将有计划地取代 Amazon S3 同步 List API 操作。Amazon S3 清单每天或每周为 S3 存储桶或共享前缀的对象(即,其名称以相同字符串开头的对象)提供用于列出您的对象及其对应元数据的逗号分隔值 (CSV)、Apache 优化的行列式 (ORC) 或 Apache Parquet (Parquet) 输出文件。有关更多信息,请参阅Amazon Simple Storage Service 开发人员指南中的 Amazon S3 清单。
配置方法
注意:交付第一份报告可能需要多达 48 小时。
登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/ 。
在 Bucket name (存储桶名称) 列表中,选择要为其配置 Amazon S3 清单的存储桶的名称。
选择 Management (管理) 选项卡,然后选择 Inventory (清单)。
选择 Add new (新增)。
键入清单的名称并进行设置。
选择要将报告保存到的目标存储桶。目标存储桶必须位于与您为其设置清单的存储桶相同的 AWS 区域中。目标存储桶可处于不同的 AWS 账户中。
应用场景
API Operations
创建 Policy,命名为
AppInEC2AccessS3{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:*", "Resource": "*" } ] }将 Policy 附加到 EC2 关联的 IAM Role 上
创建存储桶
Name and region
选择启用 Server access logging (服务器访问日志记录),将详细地记录下该存储桶收到的各种请求。 Target bucket设置为当前bucket,Target prefix设置为logs/。
编写应用程序代码
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $bucket = 'test-20191209'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Retrieve the list of buckets. $result = $s3->listBuckets(); try { // Retrieve a paginator for listing objects. $objects = $s3->getPaginator('ListObjects', [ 'Bucket' => $bucket ]); echo "Keys retrieved!" . PHP_EOL; // Print the list of objects to the page. foreach ($objects as $object) { echo $object['Key'] . PHP_EOL; } // Upload the first object. $keyname = 'helloworld.md'; $result = $s3->putObject([ 'Bucket' => $bucket, 'Key' => $keyname, 'Body' => 'Hello, world!', ]); echo $result['ObjectURL'] . PHP_EOL; // Upload the second object. $keyname = 'welcome.jpg'; $result = $s3->putObject([ 'Bucket' => $bucket, 'Key' => $keyname, 'SourceFile' => 'images/welcome-bg.jpg', 'ContentType' => 'image/jpeg', ]); echo $result['ObjectURL'] . PHP_EOL; // Delete an object. $result = $s3->deleteObject([ 'Bucket' => $bucket, // REQUIRED 'Key' => $keyname, // REQUIRED ]); } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }遇到的问题 https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html
{ "Version": "2012-10-17", "Statement": [ { "Sid": "abcdTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"Service": "ec2.amazonaws.com"} } ] }问题解答:https://stackoverflow.com/questions/45478585/aws-trust-policy-has-prohibited-field-principal
Batch Operations
需求:将账号 111122223333 下的 S3 source-bucket 数据迁移到账号 444455556666 下的 S3 target-bucket 中。
方案:
- 在 111122223333 中创建 source-bucket 的 Inventory;
- 设置 Inventory 的存储地址为 target-bucket;
- 每半天在 target-bucket 中检查一下 Inventory 是否生成;
- 在 444455556666 的 IAM 中创建附加相应权限的角色 S3BatchOperationsRole;
- 在 444455556666 的 S3 中创建 Batch operations jobs,并指定 S3BatchOperationsRole;
- 启动 Batch operations jobs。
创建 S3BatchOperationsRole 的过程参考官方文档
跨账号 EC2 接入 S3
参考 https://amazonaws-china.com/cn/premiumsupport/knowledge-center/s3-instance-access-bucket/