使用 ZenCoder 與 S3 搭配使用

Zencoder 可以從您的 Amazon S3 存儲桶上傳和下載文件。要讓 Zencoder 下載文件,它們要么需要每個人都可以訪問,要么需要將存儲桶策略添加到您的存儲桶中以授予 Zencoder 訪問權限,或者您必須將憑據保存到您的帳戶以訪問存儲桶。

簡介

Zencoder 可以從您的 Amazon S3 存儲桶上傳和下載文件。要讓 Zencoder 下載文件,它們要么需要每個人都可以訪問,要么需要將存儲桶策略添加到您的存儲桶中以授予 Zencoder 訪問權限,或者您必須將憑據保存到您的帳戶以訪問存儲桶。

使用憑據

您可以將 憑據 保存到您的帳戶,這樣我們就可以使用您的帳戶而不是我們的帳戶來上傳文件。這意味著您的帳戶是該文件的所有者,對其擁有全部權利和特權。您可以將憑據設置為所有上傳和下載的默認憑據,或在每個請求中引用它們,但請記住,如果您將它們設置為 S3 的默認憑據,它們將用於所有 S3 上傳和下載。通常這不是問題,但如果稍後您想上傳到第三方的存儲桶,這可能會導致問題。

使用存儲桶策略

另一種選擇是使用存儲桶策略,它允許您對存儲桶中的所有文件設置權限。要開始使用,請訪問 AWS 控制台。在屏幕左側選擇您的存儲桶,然後單擊“屬性”。在最後一行單擊“添加存儲桶策略”。我們將在下面匯總一個 Bucket Policy,您可以將其複製到 Bucket Policy 文本框中。

我們推薦的存儲桶策略:

 {
"Version": "2012-10-17",
"Id": "ZencoderBucketPolicy",
"Statement": [
  {
      "Sid": "Stmt1295042087538",
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::395540211253:root"
      },
      "Action": [
      "s3:GetObjectAcl",
      "s3:GetObject",
      "s3:PutObjectAcl",
      "s3:PutObject",
      "s3:ListMultipartUploadParts"
      ],
      "Resource": "arn:aws:s3:::MY-BUCKET/*"
  },
  {
      "Sid": "Stmt1295042087538",
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::395540211253:root"
      },
      "Action": [
      "s3:ListBucketMultipartUploads",
      "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::MY-BUCKET"
  }
]
}

在準備好之前 ,您只需對該存儲桶策略進行一項更改

  1. 將 MY-BUCKET 替換為您的存儲桶名稱。將 /* 留在行尾,因為這會將策略應用於存儲桶中的每個文件。
  2. 或者,您可以使用您要允許的動作來取代動作陣列。Zencoder 可能需要的有效操作是:

    對象權限-上面的例子中的第一個動作數組

    • s3:PutObject -允許 ZENCODER 將文件上傳到存儲桶
    • s3:GetObject -允許 ZENCODER 從存儲桶下載文件
    • s3:GetObjectAcl -允許 ZENCODER 取得檔案的 ACL 權限
    • s3:PutObjectAcl -允許 ZENCODER 為其他用戶設置文件上的 ACL 權限
    • s3:ListMultipartUploadParts -允許 Zencoder 列出多部分文件的哪些部分已上傳到存儲桶

    存儲桶權限-上面的例子中的第二個動作數組

    • s3:GetBucketLocation -允許 Zencoder 獲取桶的位置(美國,歐盟,亞洲等)
    • s3:ListBucketMultipartUploads -允許 Zencoder 查看當前發生在存儲桶上的任何多部分上傳

      ex:如果您希望 Zencoder 能夠下載並上傳文件,請將第一個動作數組替換為:

      ["s3:PutObject", "s3:GetObject"]

請注意,原則中有兩個陳述式。第一個語句影響桶內的鍵,而第二部分影響桶本身。

政策的其餘部分可以單獨留下,它會正常工作。亞馬遜的文檔包含有關存儲桶政策的元素的更多信息。

Zencoder 還可以為我們為您創建的視頻和縮略圖設置 ACL 權限。這記錄在我們的 S3 API 文檔中。

注意:使用存儲桶策略時,您應該始終使用 s3://BUCKET/KEY 格式的 URL,以便 Zencoder 確保將它們識別為 S3 URL 並適當地簽署請求。

如果您想構建自己的 Bucket Policy,可以使用 Amazon 的 Policy Generator 。使用 arn:aws:iam::395540211253:root 作為 AWS Principal 以允許 Zencoder 訪問。

具體文件

我可以只授予特定文件的權限嗎?

你絕對可以。雖然 Bucket Policy 方法通常更容易、更快速,但它並不適合所有人。如果是這樣,您可以向我們的 Amazon AWS 帳戶授予許可aws@zencoder.com

如果您需要使用我們的標準 ID,則可以使用6c8583d84664a381db0c6af0e79b285ede571885fbe768e7ea50e5d3760597dd

故障排除

我的權限仍然被拒絕!

如果訪問被拒絕或找不到文件,S3 將以“拒絕訪問”作為響應。如果您認為自己已正確設置 S3 憑據或存儲桶策略,但仍然收到“拒絕訪問”錯誤,請仔細檢查您提交的 URL。如果輸入看起來像"s3://my-bucket/this+file+is+great.mp4",那麼你真正想要的是一個很好的機會"s3://my-bucket/this file is great.mp4"

使用歐盟法蘭克福地區時出現錯誤!

為了將 EU 法蘭克福地區與 Zencoder 一起使用,您必須生成包含地區名稱的 S3 URL。要做到這一點,只需創建這樣的 URL "s3+eu-central-1://my-bucket/file.mp4"