跳到主要內容

這些題目為學習目的而獨立製作,並非 AWS 官方考題、實際考題、外流題或考題庫。

SAA-C03Secure Architectures難度:困難

SAA-034

依稽核要求,必須保證對某個 S3 儲存貯體的所有存取皆透過加密的通訊路徑進行。作為結構性地拒絕未加密 HTTP 請求的方法,下列哪項最為合適?

選項

解析與正確答案

閱讀解析與正確答案(劇透:建議先自行作答)

正確答案:B. 在儲存貯體政策中新增條件金鑰 aws:SecureTransport 為 false 時拒絕 s3:* 的陳述式

解析

若要強制傳輸時的加密,應於儲存貯體政策中明確拒絕 aws:SecureTransport 為 false 的請求。由於 IAM 的評估中明確的 Deny 恆優先,因此即使存在其他允許,以 HTTP 進行的存取也必定會遭拒絕。

各選項解析

A. 將儲存貯體的預設加密啟用為 SSE-S3

SSE-S3 為儲存於 S3 的資料(靜態)的加密,與用戶端和 S3 之間的通訊路徑無關。需求為傳輸時的加密,因此不符合。

B. 在儲存貯體政策中新增條件金鑰 aws:SecureTransport 為 false 時拒絕 s3:* 的陳述式

正解。明確的 Deny 優先於其他 Allow,因此可結構性地阻斷 HTTP 請求。

C. 將儲存貯體的封鎖公開存取全部啟用

封鎖公開存取為停用會導致公開的 ACL 或儲存貯體政策的功能,並不判定通訊路徑是否已加密。

D. 以 AWS Certificate Manager 發行憑證並指派給 S3 儲存貯體

無法將 ACM 憑證直接指派給 S3 儲存貯體。若需要以自訂網域進行 HTTPS 傳遞,則應將 ACM 憑證關聯至 CloudFront 分發。

實際使用情境

S3 的加密有「靜態(at rest)」與「傳輸中(in transit)」兩個面向,設定位置完全不同。靜態加密是透過儲存貯體的預設加密或請求標頭指定 SSE-S3 / SSE-KMS / DSSE-KMS / SSE-C 等加密方式。另一方面,傳輸中加密談的是是否使用 TLS,而 S3 的端點原本就同時接受 HTTPS 與 HTTP,因此若要「不讓人使用」HTTP,便需要以政策強制。用於此項強制的即為 AWS 全域條件內容金鑰 aws:SecureTransport,當請求經由 TLS 時其值為 true。 實作方式為在儲存貯體政策中寫入 Effect: Deny / Action: s3:* / Resource 同時列出儲存貯體 ARN 與物件 ARN / Condition 為 Bool 的 aws:SecureTransport false。此處若忘記在 Resource 同時列出儲存貯體 ARN(arn:aws:s3:::bucket)與物件 ARN(arn:aws:s3:::bucket/*)兩者,ListBucket 等部分操作便會通行無阻,須特別注意。由於 IAM 的政策評估中明確的 Deny 優先於所有 Allow,因此即使是同一帳戶內的管理員,HTTP 存取也會遭拒絕。相同的條件強制模式還有以 s3:x-amz-server-side-encryption 為條件強制靜態加密,或以 aws:SourceVpce 為條件限定僅能經由 VPC 端點存取等。 SAA-C03 中,「希望強制加密傳輸中的資料」「希望禁止以 HTTP 存取」等需求下,以 aws:SecureTransport 進行的 Deny 即為正解。誤答則排列出預設加密(靜態)、封鎖公開存取(公開控制)、指派 ACM 憑證(S3 單獨無法做到)等。混淆靜態與傳輸中是此領域最常見的誤答模式,因此務必判讀題目問的是哪一種。

相關連結

相關服務

相關術語