URL 署名を使用してアクセスを承認する
署名付きの URL を生成することで、ユーザーに一時的なアクセス URL を提供できます。URL の生成時に URL の有効期限を指定して、ユーザーのアクセス時間を制限することができます。
注意:
- 以下のシナリオの完全なコードは、 GitHub にあります
プライベートダウンロードリンクを使用する
GetObject の署名付き URL を生成する例を以下に示します。
package main
import (
"fmt"
"io/ioutil"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
// Handle Error
}
func main() {
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
HandleError(err)
}
bucket, err := client.Bucket("BucketName")
if err != nil {
HandleError(err)
}
// get object
signedURL, err := bucket.SignURL("ObjectName", oss.HTTPGet, 60)
if err != nil {
HandleError(err)
}
body, err := bucket.GetObjectWithURL(signedURL)
if err != nil {
HandleError(err)
}
// read content
data, err := ioutil.ReadAll(body)
body.Close()
data = data // use data
err = bucket.GetObjectToFileWithURL(signedURL, "localFile")
if err != nil {
HandleError(err)
}
}
注意:
- 生成された URL により、ユーザーは関連する Web サイトのコンテンツに直接アクセスできます。
プライベートアップロードリンクを使用する
ユーザーが他の一時的な操作(ファイルのアップロードや削除など)を実行できるようにするには、別のメソッドの URL に署名する必要があります。例:
package main
import (
"fmt"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
// Handle Error
}
func main() {
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
HandleError(err)
}
bucket, err := client.Bucket("BucketName")
if err != nil {
HandleError(err)
}
// put object
signedURL, err := bucket.SignURL("ObjectName", oss.HTTPPut, 60)
if err != nil {
HandleError(err)
}
var val = "To be or not to be, that is the question."
err = bucket.PutObjectWithURL(signedURL, strings.NewReader(val))
if err != nil {
HandleError(err)
}
// put object with option
options := []oss.Option{
oss.Meta("myprop", "mypropval"),
oss.ContentType("image/tiff"),
}
signedURL, err = bucket.SignURL("ObjectName", oss.HTTPPut, 60, options...)
if err != nil {
HandleError(err)
}
err = bucket.PutObjectFromFileWithURL(signedURL, "localFile", options...)
if err != nil {
HandleError(err)
}
}
一時的な資格情報(STS)でアップロードしてダウンロードする
前書き
OSS は、Alibaba Cloud STS サービスを使用してアクセス許可を一時的に付与することができます。Alibaba Cloud STS(Security Token Service)は、クラウドコンピューティングのユーザーに一時的なアクセストークンを提供する Web サービスです。STS を使用すると、サードパーティのアプリケーションまたは連合ユーザー(ユーザー ID を管理できます)に、カスタム有効期間とアクセス権を持つアクセス資格情報を割り当てることができます。STS の詳細については STS Introduction をご参照してください。
STS クレデンシャルを使用して OSSClient を作成する
STS の一時的な信用証明書を取得した後、ユーザーのクライアントは、含まれているセキュリティー・トークンと一時的な AccessKey(AccessKeyID および AccessKeySecret)を使用してクライアントを生成します。
次のコードを使用して、STS の一時的な資格情報を使用してクライアントを作成できます。
package main
import (
"bytes"
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
// Handle Error
}
func main() {
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret", oss.SecurityToken("StsToken"))
if err != nil {
HandleError(err)
}
bucket, err := client.Bucket("BucketName")
if err != nil {
HandleError(err)
}
err = bucket.PutObject("my-object", bytes.NewReader([]byte("MyObjectValue")))
if err != nil {
HandleError(err)
}
fmt.Printf("Completed\n")
}