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 小时。

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在 Bucket name (存储桶名称) 列表中,选择要为其配置 Amazon S3 清单的存储桶的名称。

  3. 选择 Management (管理) 选项卡,然后选择 Inventory (清单)。

  4. 选择 Add new (新增)。

  5. 键入清单的名称并进行设置。

选择要将报告保存到的目标存储桶。目标存储桶必须位于与您为其设置清单的存储桶相同的 AWS 区域中。目标存储桶可处于不同的 AWS 账户中。

应用场景

API Operations

  1. 创建 Policy,命名为 AppInEC2AccessS3

    {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "VisualEditor0",
             "Effect": "Allow",
             "Action": "s3:*",
             "Resource": "*"
         }
     ]
    }
    
  2. 将 Policy 附加到 EC2 关联的 IAM Role 上

  3. 创建存储桶

  4. Name and region

  5. 选择启用 Server access logging (服务器访问日志记录),将详细地记录下该存储桶收到的各种请求。 Target bucket设置为当前bucket,Target prefix设置为logs/。

  6. 编写应用程序代码

    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;
     }
    
  7. 遇到的问题 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

  1. 需求:将账号 111122223333 下的 S3 source-bucket 数据迁移到账号 444455556666 下的 S3 target-bucket 中。

  2. 方案:

    1. 在 111122223333 中创建 source-bucket 的 Inventory;
    2. 设置 Inventory 的存储地址为 target-bucket;
    3. 每半天在 target-bucket 中检查一下 Inventory 是否生成;
    4. 在 444455556666 的 IAM 中创建附加相应权限的角色 S3BatchOperationsRole;
    5. 在 444455556666 的 S3 中创建 Batch operations jobs,并指定 S3BatchOperationsRole;
    6. 启动 Batch operations jobs。
  3. 创建 S3BatchOperationsRole 的过程参考官方文档

    https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/batch-ops-create-job.html#create-job-permissions

跨账号 EC2 接入 S3

参考 https://amazonaws-china.com/cn/premiumsupport/knowledge-center/s3-instance-access-bucket/

results matching ""

    No results matching ""