edit-icon download-icon

認可されたアクセス

最終更新日: Mar 14, 2018

URL 署名を使用してアクセスを承認する

署名付きの URL を生成することで、ユーザーに一時的なアクセス URL を提供できます。URL の生成時に URL の有効期限を指定して、ユーザーのアクセス時間を制限することができます。

注意:

  • 以下のシナリオの完全なコードは、 GitHub にあります

プライベートダウンロードリンクを使用する

GetObject の署名付き URL を生成する例を以下に示します。

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func HandleError(err error) {
  8. // Handle Error
  9. }
  10. func main() {
  11. client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
  12. if err != nil {
  13. HandleError(err)
  14. }
  15. bucket, err := client.Bucket("BucketName")
  16. if err != nil {
  17. HandleError(err)
  18. }
  19. // get object
  20. signedURL, err := bucket.SignURL("ObjectName", oss.HTTPGet, 60)
  21. if err != nil {
  22. HandleError(err)
  23. }
  24. body, err := bucket.GetObjectWithURL(signedURL)
  25. if err != nil {
  26. HandleError(err)
  27. }
  28. // read content
  29. data, err := ioutil.ReadAll(body)
  30. body.Close()
  31. data = data // use data
  32. err = bucket.GetObjectToFileWithURL(signedURL, "localFile")
  33. if err != nil {
  34. HandleError(err)
  35. }
  36. }

注意:

  • 生成された URL により、ユーザーは関連する Web サイトのコンテンツに直接アクセスできます。

プライベートアップロードリンクを使用する

ユーザーが他の一時的な操作(ファイルのアップロードや削除など)を実行できるようにするには、別のメソッドの URL に署名する必要があります。例:

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func HandleError(err error) {
  8. // Handle Error
  9. }
  10. func main() {
  11. client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
  12. if err != nil {
  13. HandleError(err)
  14. }
  15. bucket, err := client.Bucket("BucketName")
  16. if err != nil {
  17. HandleError(err)
  18. }
  19. // put object
  20. signedURL, err := bucket.SignURL("ObjectName", oss.HTTPPut, 60)
  21. if err != nil {
  22. HandleError(err)
  23. }
  24. var val = "To be or not to be, that is the question."
  25. err = bucket.PutObjectWithURL(signedURL, strings.NewReader(val))
  26. if err != nil {
  27. HandleError(err)
  28. }
  29. // put object with option
  30. options := []oss.Option{
  31. oss.Meta("myprop", "mypropval"),
  32. oss.ContentType("image/tiff"),
  33. }
  34. signedURL, err = bucket.SignURL("ObjectName", oss.HTTPPut, 60, options...)
  35. if err != nil {
  36. HandleError(err)
  37. }
  38. err = bucket.PutObjectFromFileWithURL(signedURL, "localFile", options...)
  39. if err != nil {
  40. HandleError(err)
  41. }
  42. }

一時的な資格情報(STS)でアップロードしてダウンロードする

前書き

OSS は、Alibaba Cloud STS サービスを使用してアクセス許可を一時的に付与することができます。Alibaba Cloud STS(Security Token Service)は、クラウドコンピューティングのユーザーに一時的なアクセストークンを提供する Web サービスです。STS を使用すると、サードパーティのアプリケーションまたは連合ユーザー(ユーザー ID を管理できます)に、カスタム有効期間とアクセス権を持つアクセス資格情報を割り当てることができます。STS の詳細については STS Introduction をご参照してください。

STS クレデンシャルを使用して OSSClient を作成する

STS の一時的な信用証明書を取得した後、ユーザーのクライアントは、含まれているセキュリティー・トークンと一時的な AccessKey(AccessKeyID および AccessKeySecret)を使用してクライアントを生成します。

次のコードを使用して、STS の一時的な資格情報を使用してクライアントを作成できます。

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func HandleError(err error) {
  8. // Handle Error
  9. }
  10. func main() {
  11. client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret", oss.SecurityToken("StsToken"))
  12. if err != nil {
  13. HandleError(err)
  14. }
  15. bucket, err := client.Bucket("BucketName")
  16. if err != nil {
  17. HandleError(err)
  18. }
  19. err = bucket.PutObject("my-object", bytes.NewReader([]byte("MyObjectValue")))
  20. if err != nil {
  21. HandleError(err)
  22. }
  23. fmt.Printf("Completed\n")
  24. }