使用 Ruby 3.0 計算 AWS S3 Authorization 簽署值

最近在工作上需要使用 AWS S3 下載檔案,對方給了我關於該 AWS S3 的 Bucket name、Access Key 與 Secret Key,需要按照 AWS S3 的文件前去下載該檔案。

從 AWS 的文件中可以看出來,為了要計算簽署值,需要先準備簽署的本體,本體裡面有一段 CanonicalizedResource,他的格式如下

[ "/" + Bucket ] + <HTTP-Request-URI, from the protocol name up to the query string> + [ subresource, if present. For example "?acl", "?location", or "?logging"];

上面的格式裡的第一個字 "/" 千萬不要漏掉,我在這邊卡了好久,就是因為漏了這個字。

翻譯白話的意思就是說,假設我要去下載 https://glee-bucket.s3.amazonaws.com/files/abc.jpg,那麼這個網址的 Bucket name 就叫做 glee-bucket,URI 就是 /files/abc.jpg,最終做出的 CanonicalizedResource 就是:

/glee-bucket/files/abc.jpg

最後再把這個請求的資料

GET /glee-bucket/files/abc.jpg
Content-MD5 = 沒有(因為不是上傳)
Content-Type = 沒有
CanonicalizedAmzHeaders = 沒有用到

依據整個本體的格式

StringToSign = HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedAmzHeaders + CanonicalizedResource;

做成

GET\n\n\nFri, 29 Jul 2022 09:00:00 GMT\n/glee-bucket/files/abc.jpg

然後就可以用 Ruby 中的 HMAC-SHA1-Digest 來計算了:

require 'OpenSSL'
require 'base64'
key = "在這裡放入 Secret Key"
data = "GET\n\n\nFri, 29 Jul 2022 09:00:00 GMT\n/glee-bucket/files/abc.jpg"
hmac = OpenSSL::HMAC.digest("sha1",key,data)
Base64.encode64(hmac) #簽署值在這裡

用 Shell Script 測試簽署值是否可以下載檔案

curl "https://glee-bucket.s3.amazonaws.com/files/abc.jpg" \-H 'Authorization: AWS AccessKey:簽署值' \-H 'Date: Fri, 29 Jul 2022 09:00:00 GMT' #這邊要放入剛才簽署時所代入的時間字串

Read more

Apple 生態系的真實威脅—我們都可能是目標

Apple 生態系的真實威脅—我們都可能是目標

從一場分享開始的警醒 前陣子在 Jamf Nation Live Taipei 分享了 2024-2025 年 Apple 裝置威脅報告,深入探討了全球 Apple 生態系正面臨的資訊安全威脅。 許多人對 Apple 產品有一種根深蒂固的信心—拿著 Mac 或 iPhone,就像拿到了數位世界的「免死金牌」。說實話,Apple 在軟硬體整合上的安全設計確實領先業界,這不是誇大其詞。但也正因為這份信心,我開始想更深入地了解真實情況。 從 Jamf Security 360 報告開始,我觀察了全球情報機構(如 Citizen Lab、Google TAG、Kaspersky)揭露的真實案例。那時我才意識到一個有點殘酷的事實,也正好對應了同事最常對我說的那句話:Apple 設備並非堅不可摧,使用者自身往往才是最大的弱點。 為什麼 Apple 用戶成了高價值目標

By Glee Tsai

從 Jamf Pro 自定義註冊畫面帶使用者資訊至 Jamf Connect 失敗的處理方式

Jamf Pro 在設定裡面的 Enrollment Customization,本來可以設定在使用者完成設備註冊的當下,同步把 SAML 裡的資訊帶給後面的 Jamf Connect Login,這樣就可以減少一步使用者還需要登入的步驟。但在撰文的當下,Jamf Pro 11.1 仍在這個功能上有問題,在跟 Jamf Support Team 了解後,大概能用一種 Workaround 來解決,只是要特別留意以下事情: 1. 在 Jamf Pro 裡的 Enrollment Customization 不要再打勾 Enable Jamf Pro to pass user information to Jamf Connect 了(因為勾了也沒有用) 2. 確保

By Glee Tsai

在 Apple 零接觸部署下僅允許某個群組啟動設備

在 Jamf Pro 有整合 Single Sign On 的情況下,可以前往 Settings > Enrollment Customization 設定僅允許一個群組中的成員啟用設備。如果這個成員沒有在這個群組裡面的話,就不能夠開箱設備。如果以 Entra ID 為例,需要把 Object ID 填在下方的欄位即可。 對照到我在 Entra ID 上的群組設置: 至於如果不是 Entra ID,而是其它的 SSO Provider 的話,最好可以用 SAML Tracer 這一套 Google Chrome 外掛去看一下自己的 SAML 文件是如何表達群組的,例如下圖能看到這個使用者屬於以下五個群組。 接著有另外一個很重要的事情要提醒,如果你要阻擋註冊的成員,可以登入到 Jamf Pro

By Glee Tsai

在 Conditional Access 條件下設置 Jamf Connect Login 的 MFA 挑戰

Mac 世界的零接觸話題,每年都可以有新的話題出現。圍繞著使用者體驗,讓用戶在拿到電腦的那一刻,就能自動化配置所有公司要求的設定,不需 IT 人員幫忙。這不僅是節省 IT 人員的時間而已,更是讓整個出機流程變得更為流暢。 除了軟體與設定可以全自動化部署以外,使用者帳號當然也可以自助化的設定在電腦裡,而且完全按照公司的規範。所以如果公司正在使用 Entra ID 這樣的目錄服務時,當然也可以把 Entra ID 上面的帳密同步化成電腦本機電腦上的帳密,減少人員帳密疲疺的風險。然而,要求更高等級的公司,可能會要求人員在登入 Entra ID 時必須通過兩階段驗證,而這可能就為同步密碼帶來挑戰。 以 Jamf Connect 來說,這一套軟體可以在 Mac 設備開箱時自動就安裝在電腦上,並且出現一個可客製化的登入視窗給用戶登入 Entra ID。剖析這套軟體,事實上是由兩個 OIDC 授權類別完成的,一個是 Authorization Code Grant,

By Glee Tsai