【Day 26】S3 on AWS Outpost 限制与建置流程

tags: 铁人赛 AWS S3 Outposts S3 Bucket

前言

  • 昨天我们成功把 K8S 的资源,部署到 AWS Outpost EKS 环境中。
  • 因为即将进入尾声,我觉得差不多最後一篇关於 Outpost 的文章就来讨论 S3。

前置作业

当你已拥有一个隶属於 AWS Outposts 组织下的帐号,并且被共享了相关资源後⋯⋯

参考资料

  1. Amazon S3 on Outposts
  2. CreateBucket on AWS Outposts
  3. Run applications on premises and access Amazon S3 objects from AWS Outposts

限制

  • 完整的资料请参考 AWS 文件
    • Outposts 储存贮体大小上限为 50 TB
    • 每座 Outpost 内的 S3 Bucket (储存贮体)上限为 100
    • 只能使用 Access Point 和 Endpoint 存取 Outposts S3 Bucket
    • 每个 Outpost Bucket Access Point 上限为 10
    • Access Point policy 的大小限制为 20 KB
    • 所有储存在 S3 on Outposts 上的物件都储存在 OUTPOSTS 储存类别中。
    • 存放在 OUTPOSTS 储存体类别中的所有物件预设为使用服务器端加密与 Amazon S3 受管加密金钥 (SSE-S3) 进行储存
    • 您也可以明确选择使用服务器端加密与客户提供的加密金钥 (SSE-C) 来存放物件
  • 了解以上限制後,确定这些步骤只能透过指令或程序去建立 S3 Bucket on Outpost

详细作法

四步骤:建 Bucket, 建 Access Point, 建 Endpoint, 开心使用

  • s3control 指令文件连结
  1. 以 Outpost Owner 身份,建立 S3 on Outposts bucket

    • 执行命令 (需由 Outpost Owner AWS account 执行)
      aws s3control create-bucket \
          --bucket nipapa-dev-s3-bucket \
          --outpost-id op-xxxxxxxxxxxx \
          --profile xxx
      

    Outpost Owner 在 Outpost 上建立 Bucket;

    *目前尚不支援透过 RAM 分享这个建立权限给 Linked Account

    • Outpost Owner console
    • Linked Account console (对照上图,左侧功能栏没有 Outposts 的限定功能)
    • 从 Outposts console 可以叫出这个秘密功能!!
  2. 以 Outpost Owner 身份,建立 Access Point for an S3 on Outposts bucket 输入指令

    • 所谓的 S3 Access Point 指的是,开放给其他 AWS 服务,使那些服务可以透过 AWS Private Network,长得像是 arn:aws:s3:<region>:<account-id>:<access-point-name>
    • 这个 Access Point 是要用来接取 VPCAWS (也就是 S3 Bucket on Outpost)
    • 建立 Access Point
      • 可以允许同 Region 下,不同 Account 的 VPC Endpoint 接进来
      • 参考架构示意图
    • 执行命令
      aws s3control create-access-point \
          --account-id 111111111111<outpost owner> \
          --name nipapa-dev-s3-bucket \
          --bucket "arn:aws:s3-outposts:ap-northeast-1:111111111111:outpost/op-xxxxxxxxxxxx/bucket/nipapa-dev-s3-bucket" \
          --vpc-configuration VpcId=vpc-1234567890abcedf0 \
          --profile xxx
      
      • 其中,VPC 可为
        • Outposts 管理者所建立,并且分享给 Linked Account 的
        • 由 Linked Account 分享给的 Outposts 管理者的
    • 回传结果
      {
          "AccessPointArn": "arn:aws:s3-outposts:ap-northeast-1:111111111111:outpost/op-xxxxxxxxxxxx/accesspoint/nipapa-dev-s3-bucket"
      }
      (END)
      
    • 再来,建立第二个 S3 Access Point
      {
          "AccessPointArn": "arn:aws:s3-outposts:ap-northeast-1:111111111111:outpost/op-xxxxxxxxxxxx/accesspoint/boss-seop-accesspoint"
      }
      (END)
      
    • 刚刚的指令建立 Access Point 名字打错了,不是我想要的,所以用下列指令查看
      aws s3control list-access-points \
          --account-id 111111111111 \
          --bucket "arn:aws:s3-outposts:ap-northeast-1:111111111111:outpost/op-xxxxxxxxxxxx/bucket/nipapa-dev-s3-bucket" \
          --profile xxx
      
    • 使用下列指令删除
      aws s3control delete-access-point \
          --account-id 111111111111 \
          --name "arn:aws:s3-outposts:ap-northeast-1:111111111111:outpost/op-xxxxxxxxxxxx/accesspoint/boss-seop-accesspoint" \
          --profile xxx
      
    • 重新建立第二个 Access Point
      aws s3control create-access-point \
          --account-id 111111111111 \
          --name boss-s3op-accesspoint \
          --bucket "arn:aws:s3-outposts:ap-northeast-1:111111111111:outpost/op-xxxxxxxxxxxx/bucket/nipapa-dev-s3-bucket" \
          --vpc-configuration VpcId=vpc-1234567890abcedf0 \
          --profile xxx
      
      {
          "AccessPointArn": "arn:aws:s3-outposts:ap-northeast-1:111111111111:outpost/op-xxxxxxxxxxxx/accesspoint/boss-s3op-accesspoint"
      }
      (END)
      
  3. 建立 Endpoint on an Outpost

    • 上面我们提到 AP 是连结 VPC 和 服务之间的通道,那麽光有这个通道还不够啊...
    • 那个 Access point 本身要如何跟其他服务沟通咧?
      • 我们需要替他装上 Endpoint 啊!
      • Endpoint 会在子网段中建出四个 eni,并且提供一条服务网址来和别人沟通
    • 这边用到的指令是 s3outposts,该指令只有三种用法,建立、删除、列出 Outposts 上的 S3 endpoint。
    • 执行命令
      aws s3outposts create-endpoint \
          --outpost-id op-xxxxxxxxxxxx \
          --subnet-id subnet-0341959a4ebef5b98 \
          --security-group-id sg-02a2747f6477e0783 \
          --profile xxx
      
    • 若刻意使用 Linked Account 触发指令,则会显示 Access Denied
      aws s3outposts create-endpoint --outpost-id op-xxxxxxxxxxxx --subnet-id subnet-0341959a4ebef5b98 --security-group-id sg-02a2747f6477e0783
      
  4. 操作 S3 Objects

    • 快乐使用服务⋯⋯还有什麽能比在 VPC 内存取 Outpost 上的 S3 还快乐呢?

      明明就有啊,浪味仙快乐火锅
      备注:浪味仙的爸爸、眼明手快的衍明蔡快乐,我就不快乐!

    • 使用 s3api 操作,以下列出资料作为范例
     aws s3api list-objects-v2 --bucket "arn:aws:s3-outposts:ap-northeast-1:111111111111:outpost/op-xxxxxxxxxxxx/accesspoint/nipapa-dev-s3-bucket" --profile xxx
    

结论

  • AWS Outpost 的介面仍然持续改善中
  • 欲使用 S3 on Outpost 这个功能必须取得 Outpost 机柜本身的管理帐号的 AdministratorAccess Permission
  • 或者请管理员进行指令,稍微麻烦了一点
  • 这个广泛使用的功能,目前乍看只适用在企业内网、由 IT 管理者操作的环境较为适合
  • 明天应该会写云端萝卜服务的功能!

<<:  21 | WordPress 短代码区块 Shortcode Block

>>:  D21/ 怎麽结合 ViewModel 和 Compose? - ViewModel

[Day 01] 纲要

前言 HIYO!又是阿峻我啦~ 不知从何时开始,Deep Learning 跟 AI 这两个名词好像...

[Day17] - 在 Vue 中引入现成的 Web Component

当我们拿到一个现有的 Web Component 时 , 如果直接在 Vue 专案中使用会抱错 今天...

EC的农地辣麽大,作物辣麽多,来认真找作物了(2)ES的逐一说文解字-Range & 常用的旁支末节

来到了倒数第二天 真是快被榨乾了呢(还真是没料 (┐「﹃゚。)) 但说好写三十篇技术文就是要灌满三十...

【Day 27】好用的 JavaScript 动态提示工具库 - Tippy.js

Tippy.js Tippy.js 是一款轻量的 JavaScript 动态提示工具库,提供完整的...

this指向who(下)

调用function时,常会在function内的一堆动作中看到this关键字,而this就是记录呼...