Site icon Mr. 沙先生

Amazon Kinesis Firehose 落地到 S3 時確保全程加密 (encryption in transit)

這是今天回答的一個問題,很通識但也很常有人問到,在 AWS 上因為 Amazon S3 Standard Class 的 SLA 高達 11 個 9 (99.9999999%) 以及價格便宜的因素,多數人都會將資料放在 S3 上保存,但因為在網際網路上保存使用者個資是一件很平常的事情,但是出事的賠償通常會要人命,除了確保 S3 設定 Access Control 以外,加密 (Encryption) 就變成了首要項目。

為了保證 Amazon S3 在傳輸過程 (in transit) 中仍然是加密狀態,在「Security Best Practices for Amazon S3」 提到了許多如何保護資料的做法,其中一條就是 Enforce encryption of data in transit 強制僅能使用 HTTPS (TLS) 和 Amazon S3 作為傳輸,要開啟這個做法可以在 Bucket policy 加上這條:

{
  "Id": "AllowSSLOnly",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSSLOnly",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::${bucketName}",
        "arn:aws:s3:::${bucketName}/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      },
      "Principal": "*"
    }
  ]
}

aws:SecureTransport 可以用來判斷是否使用 HTTPS 作為傳輸,而這條 Policy 判斷當 “aws:SecureTransport”: “false” 時就 Deny。

另外同場加映 AWS Config 也支援 Amazon S3 in transit 的 Check Rule:s3-bucket-ssl-requests-only 當有 S3 Bucket 沒有這條 Policy Rule 就會跳出警告,甚至強制修復 (Remediating Noncompliant) 這個 S3 Bucket。

References

Exit mobile version