iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0

前言

  • 雖然在 Mobile Develop 組寫文章,大多都只談到如何使用別人弄出來的 SaaS 或 PaaS,著重在功能的使用與操作,鮮少談及這些平台如何被實作出來的。
  • 本篇將試圖以規劃分析的角度來思考,如何實作刪除相簿裡的相片,從這些行為中找出潛在的安全隱憂。
  • 首先將會以提供 Amplify Storage 的 S3 Bucket 著手查看設定。
    https://ithelp.ithome.com.tw/upload/images/20231001/20130149YDUYePFFhu.png

預設的權限

  • 在 Storage 帶起來的 S3 配置的權限邏輯分成「登入者」「未登入者」
  • 登入者可以執行:上傳檔案瀏覽檔案刪除檔案 權限
  • 未登入者則僅給予 瀏覽檔案 權限
  • 預設的 Amplify DataStorage 產生的 S3 Bucket 的 設定 如下一段

S3 設定

Block Public Access -> 官方建議要打開,不過因為 Amplify 目前還不支援

https://ithelp.ithome.com.tw/upload/images/20231001/20130149IV9YRCWFYh.png

  • Block all public access 為 Off
    • Block public access to buckets and objects granted through new access control lists (ACLs) / 禁止公開訪問、並且透過 ACL 來特許請求來源存取

    S3 will block public access permissions applied to newly added buckets or objects, and prevent the creation of new public access ACLs for existing buckets and objects. This setting doesn’t change any existing permissions that allow public access to S3 resources using ACLs.
    套用本規則後,就會禁止增添白名單,而原有的 ACLs 規則可以繼續沿用

    • Block public access to buckets and objects granted through any access control lists (ACLs) / 禁用所有 ACLs 授權的公開連線

    S3 will ignore all ACLs that grant public access to buckets and objects.
    封殺所有公開請求,包含白名單也封殺

    • Block public access to buckets and objects granted through new public bucket or access point policies / 禁止從新的 Bucket Policies 或是 Access Point Policies 去允許公開存取

    S3 will block new bucket and access point policies that grant public access to buckets and objects. This setting doesn't change any existing policies that allow public access to S3 resources.
    套用本規則後,就會禁止從 Bucket / AP Policies 增添新的 Public Access,而原有的規則可以繼續沿用

    • Block public and cross-account access to buckets and objects through any public bucket or access point policies / 禁止從 Bucket / AP Policies 允許的跨帳戶存取

    S3 will ignore public and cross-account access for buckets or access points with policies that grant public access to buckets and objects.

  • 以上,都沒有被勾選

Bucket Policy

  • Amplify 預設並未透過 Bucket Policy 去控管,所以是空白的。

Access control list (ACL)

https://ithelp.ithome.com.tw/upload/images/20231001/201301490zBEVsqlXR.png

  • Canonical ID 是指 AWS 正式使用者 ID
  • 備註:Canonical ID 會是在建立跨 AWS 帳號存取 S3 時所使用的識別。 You can use this ID to identify an AWS account when granting cross-account access to buckets and objects using Amazon S3.
  • 若有安裝 aws cli,則以下指令可以拿到 Canonical ID
aws s3api list-buckets --query Owner.ID --output text
  • Bucket ACL
    • 從上圖中的表格和文件中可看出 身份區別有四種 x 權限控管有兩種
    • ObjectsBucket ACL
      https://ithelp.ithome.com.tw/upload/images/20231001/20130149vsOiXDpUxP.png
  • 這邊確認了,只有 Bucket Owner 可以擁有所有權限

Cross-origin resource sharing (CORS)

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "HEAD",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "x-amz-server-side-encryption",
            "x-amz-request-id",
            "x-amz-id-2",
            "ETag"
        ],
        "MaxAgeSeconds": 3000
    }
]
  • CORS 的設定主要是使用 S3 作為圖床時,如果某個人連的網站是 https://hackmd.io/ 而圖床使用的網址是 S3 綁 CloudFront (CDN) 提供別人透過網址(如:https://hackmd.io/_uploads/xxxxx)請求拿回圖片,這時可以在 CORS 中設定哪些 HTTP Method 是允許,哪些是被禁止的。於是他們限定了只有同為 hackmd.io 的來源請求是被允許,以避免被以外的網址用來當作圖床徒增資料傳輸。
  • https://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/cors.html

後續討論

刪除的作法

延伸問題

  • 這邊會探討直接用 Amplify Storage 預設公開的 Bucket 雖然很方便,但究竟會帶來什麼負面影響。
  • 使用不同的 Bucket Policy, CORS 設定和 Public Access 的設定不同,會間接影響如何存取。

上一篇
【Day 25】 會員專屬相簿: 透過 Amplify Auth 識別、建立 S3 目錄結構
下一篇
【Day 27】 @State property 的 init 賦值議題:集郵冊的初始郵票載入
系列文
依然無法成為釣魚大師也要努力摸魚!!辣個吃魚神器 APP 第二彈33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言