Home » Computer » Network » Archive by category "Cloud" (Page 70)

Amazon CloudFront 上 Protected Content 的 URL Sign...

Amazon CloudFront 也可以設定要簽名才能抓檔案,只是 URL Sign 設計的觀念跟 Amazon S3 完全不一樣,這不一致的調調很... 詭異...

大致上有這些差異:

  • Amazon S3 用的是 HMAC-SHA1 的機制簽名 (shared secret,也就是 Amazon S3 與你都有同一把 key),而 Amazon CloudFront 則是用 RSA key 簽名 (public key,也就是 Amazon CloudFront 存放 public key,你自己存放 private key)。
  • 也因為是使用 RSA key,有人會誤解跟 Amazon EC2 用的 RSA key 相同。但實際上需要在 Security Credentials 頁裡設,有專門對 Amazon CloudFront 用的 RSA key 的段落。
  • 自己對 Base64 編碼再處理,避開使用 += 以及 /。但不是有標準可以用嗎,為什麼要自己發明呢...
  • 引入 Policy 的彈性機制,不僅可以對時間控制,也可以對 IP address 控制,但 Policy 這是帶在 URL 裡傳進去的... 你可以看到我的程式碼內產生出 $json_str 後簽完名帶到 URL 內了。

官方的 CloudFront Signed URLs in PHP 這篇的範例程式碼其實很清楚了,要直接拿去用其實也沒麼問題。我自己整理後是這樣:

<?php

$key_pair_id = 'APKA...';
$pem_file = '';
$resource = 'http://test2-cdn.gslin.org/test.txt';

$expires = time() + 3600;

$json_str = json_encode(
    array(
        'Statement' => array(
            array(
                'Resource' => $resource,
                'Condition' => array(
                    'DateLessThan' => array(
                        'AWS:EpochTime' => $expires
                    )
                )
            )
        )
    ),
    JSON_UNESCAPED_SLASHES
);

$buf = file_get_contents($pem_file);
$key = openssl_get_privatekey($buf);

openssl_sign($json_str, $signed_policy, $key, OPENSSL_ALGO_SHA1);

openssl_free_key($key);

$signature = str_replace(
    array('+', '=', '/'),
    array('-', '_', '~'),
    base64_encode($signed_policy)
);

echo "${resource}?",
    "Expires=${expires}&",
    "Signature=${signature}&",
    "Key-Pair-Id=${key_pair_id}\n";

反正你搞不太懂 Amazon 為什麼要這樣設計的... =_=

Amazon S3 上 Protected Content 的 URL Sign...

Amazon S3 可以在上傳時設定為 non-public,這種檔案如果要讓使用者讀取,就必須透過 URL 簽名的方式...

官方的文件是「Authenticating REST Requests」這篇,不過官方文件把所有細節都寫上去,如果第一次接觸的人反而不知道要怎麼辦...

Thomas Riboulet 給了一個 Quickstart 的範例:「Signing Amazon S3 URLs」,裡面雖然是 Ruby code,不過 code 的邏輯很簡單...

以 test.gslin.org 為例,想要產生出從現在開始 3600 秒內有效的 url 可以這樣寫,用過一次後再回去看官方文件,就會發現其實就是官方文件的「REST Authentication Example 3: Query String Authentication Example」這段,如果以 PHP 寫會長這樣:

<?php

$access_key = "";
$secret_key = "";

$timestamp = time() + 3600;
$data = "GET\n\n\n${timestamp}\n/test.gslin.org/test.txt";

$sign = urlencode(
    base64_encode(
        hash_hmac('sha1', $data, $secret_key, true)
    )
);

echo "http://test.gslin.org.s3.amazonaws.com/test.txt?" .
    "AWSAccessKeyId=${access_key}&" .
    "Expires=${timestamp}&" .
    "Signature=${sign}\n";

接下來來研究 CloudFront 的部份...

iOS 7 的下載與 Akamai...

剛好看到「By My Estimates, Apple’s iOS7 Download Business Is Worth About $10-$12M To Akamai」這篇,講到這次蘋果 iOS 7 的下載讓 Akamai 有一筆不小的收入...

正想要下載 VirtualBox,沒遇過 HiNet 機房的 Akamai 這麼慢... XD

gslin@GSLIN-DESKTOP [~/tmp] [13:31/W3] wget http://download.virtualbox.org/virtualbox/4.2.18/virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb
--2013-09-19 13:32:17--  http://download.virtualbox.org/virtualbox/4.2.18/virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb
正在查找主機 download.virtualbox.org (download.virtualbox.org)... 137.254.120.26
正在連接 download.virtualbox.org (download.virtualbox.org)|137.254.120.26|:80... 連上了。
已送出 HTTP 要求,正在等候回應... 302 Moved Temporarily
位置:http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb [跟隨連結]
--2013-09-19 13:32:18--  http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb
正在查找主機 dlc.sun.com.edgesuite.net (dlc.sun.com.edgesuite.net)... 203.69.141.82, 203.69.141.10
正在連接 dlc.sun.com.edgesuite.net (dlc.sun.com.edgesuite.net)|203.69.141.82|:80... 連上了。
已送出 HTTP 要求,正在等候回應... 200 OK
長度: 64206462 (61M) [application/x-debian-package]
Saving to: `virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb'

2013-09-19 13:35:47 (301 KB/s) - `virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb' saved [64206462/64206462]

試了幾次,有些還會導到美國機房分流... 量真的太大了 :o

Outlook.com 支援 IMAP...

其實我不知道 Outlook.com 一直都沒支援 IMAP...

剛剛 Zite 上看到微軟公佈 Outlook.com 的 IMAP 功能:「Outlook.com now has IMAP」。這篇文章有點長,後面還有「Developers interested in connecting to IMAP should refer to the below technical information.」然後列出支援的 IMAP 指令,這些指令對於搬家應該是夠用了...

雖然搬來搬去都還是美國公司...

另外是 IMAP 與 OAuth2 的結合,看起來是透過 HTTPS 網站拿到 token 後,透過 IMAP 存取資料...

EdgeCast 與 HiNet 合作...

剛剛看到 EdgeCast 放出來的新聞稿,EdgeCast 跟 HiNet 合作:「EdgeCast Partners with HiNet on Taiwan Market」。

AdobeEdge Web Fonts 服務來看 (使用 use.edgefonts.net 這個名稱,指到 use.wac.0F88.edgecastcdn.net),如果在 HiNet 下面 (然後以 168.95.192.1) 仍然是指到香港的 PoP (s6.gp1.wac.edgecastcdn.net,目前是 117.18.237.110)。

官網 www.edgecast.com 也是香港的 PoP。

回頭來看新聞稿,看起來是 HiNet 用 EdgeCast 的技術建立 CDN,變成 Taiwanese CDN:

HiNet will use EdgeCast technology to build a high-performance CDN within Taiwan and provide caching, streaming, acceleration and security services to Taiwanese media and content providers. The Taiwanese CDN will be directly connected to EdgeCast’s global network and to users within HiNet’s regions, dramatically improving global performance for HiNet customers and Taiwan performance for EdgeCast customers.

相當於中華購買技術補齊產品線,另外 EdgeCast 也可以使用... (不過目前還沒建立好?)

如果都建好,那麼在台灣有 PoP 的 CDN 就有 AkamaiCDNetworks、Windows Azure CDN 以及 EdgeCast 這四家。

Amazon RDS 可以直接產生 Read Replica Replication 了...

以往要在 Amazon RDS 產生 Read Replica Replication 需要複雜的 snapshot 處理,但現在 AWS 直接提供這個功能了,而且可以同時生很多台:「New Read Replica Capabilities for Amazon RDS」。

這有多重要呢?以前因應流量瞬間爆增時的方式是增加 web server,並且利用 cache (可能是 memcached) 降低對後端的 query 數量。但因為引入 cache,平常就得處理 cache invalidate 的問題。

而這個方式平常只要處理讀寫分離就可以了。當量爆增時除了 web server 增加,直接增加後端的 RDS server (Read Replica Replication),甚至可以分層:

以目前的步調來看,之後有可能會推出 Master-Master 的 HA 架構?

Update:照 comment 提到的,Multi-AZ 本身就是 HA 架構了...

Archives