すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS Go SDK V2

最終更新日:Jun 04, 2026

GitHub | OSS Go SDK V2 開発者ガイド | OSS SDK for Go API

クイックスタート

事前準備

Go 1.18 以降が必要です。

go -version コマンドを使用して Go のバージョンを確認します。Go がインストールされていない場合、またはバージョンが 1.18 より古い場合は、Golang をインストールしてください。

SDK のインストール

  • プロジェクトディレクトリを作成し、Go モジュールを初期化します。

    mkdir oss-go-example && cd oss-go-example && go mod init oss-go-example
  • 次のコマンドを実行してパッケージを取得します。コード例が正しく動作するように、最新バージョンを推奨します。

    go get github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss
  • SDK パッケージをインポートします。

    import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"

アクセス認証情報の設定

RAM ユーザーの AccessKey を使用して、アクセス認証情報を設定します。

  1. RAM コンソールで、[永続的な AccessKey によるアクセス] を使用して RAM ユーザーを作成し、AccessKey を保存した後、その RAM ユーザーに AliyunOSSFullAccess 権限を付与します。

  2. RAM ユーザーの AccessKey を使用して環境変数を設定します。

    Linux

    1. 次のコマンドを実行して、環境変数を ~/.bashrc ファイルに追加します。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 次のコマンドを実行して変更を適用します。

        source ~/.bashrc
      2. 次のコマンドを実行して、環境変数が設定されていることを確認します。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. ターミナルで次のコマンドを実行して、デフォルトのシェルを確認します。

      echo $SHELL
      1. デフォルトのシェルに応じて環境変数を設定します。

        Zsh

        1. 次のコマンドを実行して、環境変数を ~/.zshrc ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 次のコマンドを実行して変更を適用します。

          source ~/.zshrc
        3. 次のコマンドを実行して、環境変数が設定されていることを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 次のコマンドを実行して、環境変数を ~/.bash_profile ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. 次のコマンドを実行して変更を適用します。

          source ~/.bash_profile
        3. 次のコマンドを実行して、環境変数が設定されていることを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. CMD で次のコマンドを実行します。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 次のコマンドを実行して、環境変数が設定されていることを確認します。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. PowerShell で次のコマンドを実行します。

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. 次のコマンドを実行して、環境変数が設定されていることを確認します。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

クライアントの初期化

重要

コンプライアンスとセキュリティを向上させるためのポリシー変更に伴い、2025 年 3 月 20 日以降、新規 OSS ユーザーは、中国本土リージョンにある OSS バケットでデータ API オペレーションを実行するには、カスタムドメイン名を使用する (CNAME) 必要があります。これらの操作では、デフォルトのパブリックエンドポイントは制限されます。影響を受ける操作の完全なリストについては、公式発表をご参照ください。HTTPS 経由でデータにアクセスする場合、カスタムドメインに有効な SSL 証明書をバインドする必要があります。コンソールでは HTTPS が適用されるため、これはOSS コンソールへのアクセスに必須です。

サンプルコードを実行する前に、<region-id> などのプレースホルダーを、リージョンとエンドポイントの実際の値 (例: ap-southeast-1) に置き換えてください。
package main

import (
	"context"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

/*
Go SDK V2 クライアントの初期化設定:

1. 署名バージョン:Go SDK V2 は、セキュリティを強化するためにデフォルトで v4 署名を使用します。
2. リージョン設定:リクエストリージョンを識別するために、Alibaba Cloud のリージョン ID を指定する必要があります。
3. エンドポイント設定:
   - endpoint パラメーターを使用して、サービスリクエスト用のカスタムドメイン名を指定できます。
   - このパラメーターが指定されていない場合、SDK はリージョン情報に基づいてパブリックエンドポイントを自動的に構築します。
4. プロトコル設定:
   - SDK は、デフォルトで HTTPS プロトコルを使用してエンドポイントを構築します。
   - HTTP を使用するには、http:// で始まるエンドポイントを指定する必要があります。
*/

func main() {
	// 方法 1: リージョンのみを指定 (推奨)。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>") // バケットが配置されているリージョンを指定します。

	// 方法 2: リージョンとエンドポイントの両方を指定。
	// cfg := oss.LoadDefaultConfig().
	//     WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//     WithRegion("<region-id>").                                // バケットが配置されているリージョンを指定します。
	//     WithEndpoint("<endpoint>")     // バケットが配置されているリージョンのパブリックエンドポイントを指定します。

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// アップロードボディを作成します。
	body := strings.NewReader("hi oss")

	// オブジェクトをアップロードするリクエストを作成します。
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr("Your Bucket Name"),      // バケットの名前。
		Key:    oss.Ptr("Your Object Key"),       // オブジェクトの名前。
		Body:   body,                             // アップロードする文字列コンテンツ。
	}

	// オブジェクトをアップロードするリクエストを送信します。
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put object %v", err)
	}

	// アップロード操作の結果を出力します。
	log.Printf("Status: %#v\n", result.Status)
	log.Printf("RequestId: %#v\n", result.ResultCommon.Headers.Get("X-Oss-Request-Id"))
	log.Printf("ETag: %#v\n", *result.ETag)
}

成功時の出力:

Status: "200 OK"
RequestId: "68746C5FE001B434303B90B6"
ETag: "B22E0DC370A7F7067FACF5F75D7FA385"

クライアントの設定

設定オプション

Region

(必須) リクエストが送信されるリージョン。

WithRegion("<region-id>")

CredentialsProvider

(必須) リクエストを認証するためのアクセス認証情報。

WithCredentialsProvider(provider)

Endpoint

リクエストのサービスエンドポイント。

WithEndpoint("oss-<region-id>.aliyuncs.com")

HttpClient

リクエストを行うためのカスタム HTTP クライアント。

WithHttpClient(customClient)

RetryMaxAttempts

リクエストの最大リトライ回数。デフォルト: 3。

WithRetryMaxAttempts(5)

Retryer

カスタムリトライ戦略の実装。

WithRetryer(customRetryer)

ConnectTimeout

接続を確立するためのタイムアウト。デフォルト: 5 秒。

WithConnectTimeout(10 * time.Second)

ReadWriteTimeout

接続の読み取り/書き込みタイムアウト。デフォルト: 10 秒。

WithReadWriteTimeout(30 * time.Second)

InsecureSkipVerify

true に設定すると、SSL 証明書の検証をスキップします。デフォルトでは検証は有効です。

WithInsecureSkipVerify(true)

EnabledRedirect

true に設定すると、HTTP リダイレクトを有効にします。デフォルトではリダイレクトは無効です。

WithEnabledRedirect(true)

ProxyHost

プロキシサーバーの URL。

WithProxyHost("http://user:passswd@proxy.example-***.com")

ProxyFromEnvironment

true に設定すると、環境変数からプロキシサーバー設定を使用します。

WithProxyFromEnvironment(true)

UploadBandwidthlimit

アップロード帯域幅の上限 (KiB/s)。

WithUploadBandwidthlimit(10*1024)

DownloadBandwidthlimit

ダウンロード帯域幅の上限 (KiB/s)。

WithDownloadBandwidthlimit(10*1024)

SignatureVersion

リクエストに署名するための署名バージョン。デフォルト: v4。

WithSignatureVersion(oss.SignatureVersionV1)

LogLevel

クライアントログの詳細レベル。

WithLogLevel(oss.LogInfo)

LogPrinter

ログメッセージを書き込むためのカスタムロガーを指定します。

WithLogPrinter(customPrinter)

DisableSSL

true に設定すると、クライアントは HTTPS の代わりに HTTP を使用します。デフォルトでは、クライアントは HTTPS を使用します。

WithDisableSSL(true)

UsePathStyle

true に設定すると、パス形式のアドレス指定 (例: endpoint/bucket) を使用します。デフォルトでは、仮想ホスト形式のアドレス指定 (例: bucket.endpoint) が使用されます。

WithUsePathStyle(true)

UseCName

true に設定すると、カスタムドメイン名を使用します。このオプションはデフォルトで無効です。

WithUseCName(true)

UseDualStackEndpoint

true に設定すると、デュアルスタックエンドポイントを使用します。このオプションはデフォルトで無効です。

WithUseDualStackEndpoint(true)

UseAccelerateEndpoint

true に設定すると、転送アクセラレーションエンドポイントを使用します。このオプションはデフォルトで無効です。

WithUseAccelerateEndpoint(true)

UseInternalEndpoint

true に設定すると、内部エンドポイントを使用します。このオプションはデフォルトで無効です。

WithUseInternalEndpoint(true)

DisableUploadCRC64Check

true に設定すると、アップロードの CRC64 チェックを無効にします。このチェックはデフォルトで有効です。

WithDisableUploadCRC64Check(true)

DisableDownloadCRC64Check

true に設定すると、ダウンロードの CRC64 チェックを無効にします。このチェックはデフォルトで有効です。

WithDisableDownloadCRC64Check(true)

AdditionalHeaders

署名計算に含める追加のヘッダーを指定します。このオプションは署名バージョン 4 にのみ適用されます。

WithAdditionalHeaders([]string{"content-length"})

User-Agent

User-Agent ヘッダーに追加するカスタム文字列。

WithUserAgent("user identifier")

カスタムドメイン名

カスタムドメイン名をバインドすることで、ブラウザベースのファイルプレビューや CDN アクセラレーションが可能になります。

サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// バケットが配置されているリージョンを指定します。
	// カスタムドメイン名を指定します。例: https://www.example-***.com
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").
		WithEndpoint("https://www.example-***.com").
		WithUseCName(true) // CNAME 経由でカスタムドメイン名を使用するには、このパラメーターを true に設定します。

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して後続の操作を実行します...
}

タイムアウト制御

サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").             // バケットが配置されているリージョン。
		WithConnectTimeout(10 * time.Second).  // 接続タイムアウト。デフォルトは 5 秒。
		WithReadWriteTimeout(30 * time.Second) // 読み取り/書き込みタイムアウト。デフォルトは 10 秒。

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して後続の操作を実行します...
}

最大リトライ回数

OSSClient は、デフォルトで失敗したリクエストを 3 回リトライします。

高負荷なワークロードや不安定なネットワークの場合、WithRetryMaxAttempts を使用してリトライ回数を増やしてください。

サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>"). // バケットのリージョンを指定します。
		WithRetryMaxAttempts(5)    // 最大リトライ回数を設定します。デフォルトは 3 です。

	// OSSClient インスタンスを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して後続の操作を実行します...
}

HTTP/HTTPS プロトコル

WithDisableSSL(true) を使用して HTTPS プロトコルを無効にします。

サンプルコードを実行する前に、<region-id> プレースホルダーを実際のリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>"). // バケットが配置されているリージョンを指定します。
		WithDisableSSL(true)       // デフォルトで有効になっている HTTPS プロトコルを無効にします。

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// クライアントを使用して後続の操作を実行します...
}

プロキシサーバー

WithProxyHost を使用して、OSS リクエストをプロキシサーバー経由でルーティングします。

サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイント (例: ap-southeast-1) に置き換えてください。
package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").                                 // バケットが配置されているリージョンを指定します。
		WithUserAgent("aliyun-sdk-go").                            // HTTP User-Agent ヘッダーのユーザーエージェントを設定します。
		WithProxyHost("http://user:passswd@proxy.example-***.com") // プロキシサーバーを設定します。例: "http://user:passswd@proxy.example-***.com"。

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して後続の操作を実行します...
}

内部エンドポイント

アプリケーションがバケットと同じリージョン内の Elastic Compute Service (ECS) インスタンスで実行されている場合、内部エンドポイントを使用すると、コストとレイテンシーを削減できます。

サンプルコードを実行する前に、<region-id> などのプレースホルダーをリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() 
	// 方法 1: リージョンを指定し、WithUseInternalEndpoint を true に設定します。
	// バケットが配置されているリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").
		WithUseInternalEndpoint(true)

	// 方法 2: リージョンとエンドポイントを直接指定します。
	// バケットのリージョンに対応する内部エンドポイントを指定します。
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithRegion("<region-id>").
	// 	WithEndpoint("<endpoint>")

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// このクライアントを後続の操作に使用します。

}

転送アクセラレーションエンドポイント

サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイントの ID (例: ap-southeast-1) に置き換えてください。
package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// 方法 1: リージョンを指定し、WithUseAccelerateEndpoint を true に設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").
		WithUseAccelerateEndpoint(true)

	// 方法 2: リージョンとエンドポイントを直接指定します。
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithRegion("<region-id>").
	// 	WithEndpoint("https://oss-accelerate.aliyuncs.com").

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して操作を実行します...
}

プライベートドメイン

サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイントに基づいて正しい ID (例: ap-southeast-1) に置き換えてください。
package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// バケットを含むリージョンを指定します。
	// プライベートドメインを指定します。例: https://service.corp.example.com
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").
		WithEndpoint("https://service.corp.example.com")

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して後続の操作を実行します...
}

ガバメントクラウドのエンドポイント

次の例は、ガバメントクラウドのエンドポイントを使用するように OSS クライアントを設定する方法を示しています。

package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// バケットが配置されているリージョンと、それに対応する内部エンドポイントを指定します。
	// たとえば、中国北部 2 Ali Gov 1 リージョンの場合、Region を "cn-north-2-gov-1" に、Endpoint を "https://oss-cn-north-2-gov-1-internal.aliyuncs.com" に設定します。
	// HTTP プロトコルを使用するには、HTTP エンドポイント "http://oss-cn-north-2-gov-1-internal.aliyuncs.com" を使用します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-north-2-gov-1").
		WithEndpoint("https://oss-cn-north-2-gov-1-internal.aliyuncs.com")

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して後続の操作を実行します...
}

CloudBox バケットへのアクセス

サンプルコードを実行する前に、<region-id> プレースホルダーを実際のリージョンとエンドポイント (例: ap-southeast-1) に置き換えてください。
package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// 方法 1: CloudBox ID を自動的に検出します。
	// バケットが配置されているリージョンを指定します。
	// エンドポイントを CloudBox バケットのデータドメイン名に設定します。例: http://cb-xxxxxx.<region-id>.oss-cloudbox.aliyuncs.com
	// WithEnableAutoDetectCloudBoxId を true に設定して、CloudBox ID を自動的に検出します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithEndpoint("http://cb-xxxxxx.<region-id>.oss-cloudbox.aliyuncs.com").
		WithEnableAutoDetectCloudBoxId(true)

	// 方法 2: CloudBox ID を手動で設定します。
	// バケットが配置されているリージョンを指定します。
	// エンドポイントを CloudBox バケットのデータドメイン名に設定します。例: http://cb-xxxxxx.<region-id>.oss-cloudbox.aliyuncs.com
	// CloudBox ID を手動で指定します。例: cb-xxxxxx
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithEndpoint("http://cb-xxxxxx.<region-id>.oss-cloudbox.aliyuncs.com").
	// 	WithCloudBoxId("cb-xxxxxx")

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して OSS 操作を実行します...
}

HTTP クライアントのカスタマイズ

標準のパラメーターでは不十分な場合、WithHTTPClient を使用してデフォルトの HTTP クライアントを置き換えます。

サンプルコードを実行する前に、<region-id> プレースホルダーを実際のリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"crypto/tls"
	"net/http"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/transport"
)

func main() {
	// 一般的なタイムアウトやその他の設定。
	transConfig := transport.Config{
		// 接続タイムアウト。デフォルト: 5 秒。
		ConnectTimeout: oss.Ptr(10 * time.Second),
		// 接続からのデータ読み取りおよび書き込みのタイムアウト。デフォルト: 10 秒。
		ReadWriteTimeout: oss.Ptr(20 * time.Second),
		// アイドル接続のタイムアウト。デフォルト: 50 秒。
		IdleConnectionTimeout: oss.Ptr(40 * time.Second),
		// ネットワーク接続のキープアライブタイムアウト。デフォルト: 30 秒。
		KeepAliveTimeout: oss.Ptr(40 * time.Second),
		// HTTP リダイレクトを有効にします。デフォルトでは無効です。
		EnabledRedirect: oss.Ptr(true),
	}

	// http.Transport の設定。
	var transports []func(*http.Transport)
	// 最大接続数。デフォルト: 100。
	transports = append(transports, transport.MaxConnections(200))
	// リクエストに 'Expect: 100-Continue' ヘッダーがある場合に、リクエストヘッダーが書き込まれた後、サーバーの最初のレスポンスヘッダーを待つ最大時間。デフォルト: 1 秒。
	transports = append(transports, transport.ExpectContinueTimeout(2*time.Second))
	// 最小 TLS バージョン。デフォルト: TLS 1.2。
	transports = append(transports, transport.TLSMinVersion(tls.VersionTLS13))
	// 証明書の検証をスキップします。デフォルトは false (証明書は検証されます)。
	transports = append(transports, transport.InsecureSkipVerify(true))
	// その他のトランスポートパラメーターについては、https://pkg.go.dev/net/http#Transport をご参照ください。
	// カスタム HTTP クライアントを作成します。
	customClient := transport.NewHttpClient(&transConfig, transports...)

	cfg := oss.LoadDefaultConfig().
		WithHttpClient(customClient).
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>")

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	// クライアントを使用して後続の操作を実行します...
}

アクセス認証情報の設定

認証のニーズに合った認証情報メソッドを選択してください。

アクセス認証情報の選び方

方法

利用シーン

前提条件

タイプ

有効期間

ローテーションまたは更新

RAM ユーザー AK

クラウドサービスへの長期的なアクセスが必要な、安全な環境のアプリケーション向け。

はい

AK

長期

手動ローテーション

STS 一時アクセス認証情報

アクセス権限と認証情報の有効期間の制御が必要な、信頼できない環境のアプリケーション向け。

はい

STS トークン

一時的

手動更新

RAMRoleARN

別の Alibaba Cloud アカウントのリソースへのアクセスなど、クラウドサービスへの委任アクセスが必要なアプリケーション向け。

はい

STS トークン

一時的

自動更新

ECSRAMRole

Alibaba Cloud ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes (ACK) のワーカーノードにデプロイされたアプリケーション向け。

いいえ

STS トークン

一時的

自動更新

OIDCRoleARN

Container Service for Kubernetes (ACK) のワーカーノードにデプロイされた信頼できないアプリケーション向け。

いいえ

STS トークン

一時的

自動更新

カスタム認証情報プロバイダー

他の方法が適さない場合に、認証情報を取得するためのカスタムプロバイダーを実装します。

カスタム

カスタム

カスタム

カスタム

デフォルトの認証情報プロバイダーチェーン

クライアントがパラメーターなしで初期化された場合、このチェーンを自動的に使用して認証情報を検索します。

カスタム

カスタム

カスタム

カスタム

RAM ユーザーの AK の使用

安全な環境での長期アクセスには、RAM ユーザーの AccessKey ペア (AccessKey ID と AccessKey Secret) で認証情報プロバイダーを初期化します。手動でのキー管理はセキュリティリスクを高めます。

警告
  • Alibaba Cloud アカウント (root ユーザー) はすべてのリソースに対する完全な権限を持っています。AccessKey ペアが漏洩すると、重大なセキュリティリスクが生じます。最小限の権限を持つ RAM ユーザーの AccessKey ペアを使用してください。

  • RAM ユーザーの AccessKey ペアを作成するには、「AccessKey の作成」をご参照ください。AccessKey ID と AccessKey Secret は作成時にのみ表示されます。安全に保存してください。AccessKey Secret を忘れた場合は、新しい AccessKey ペアを作成する必要があります。

環境変数

  1. RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。

    Linux

    1. CLI で次のコマンドを実行して、環境変数の設定を ~/.bashrc ファイルに追加します。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 変更を適用します。

        source ~/.bashrc
      2. 環境変数が有効になったかどうかを確認します。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。

      echo $SHELL
      1. デフォルトのシェルタイプに基づいて環境変数を設定します。

        Zsh

        1. 次のコマンドを実行して、環境変数の設定を ~/.zshrc ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 変更を適用します。

          source ~/.zshrc
        3. 環境変数が有効になったかどうかを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 次のコマンドを実行して、環境変数の設定を ~/.bash_profile ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. 変更を適用します。

          source ~/.bash_profile
        3. 環境変数が有効になったかどうかを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. CMD で次のコマンドを実行します。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 環境変数が有効になったかどうかを確認します。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. PowerShell で次のコマンドを実行します。

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. 環境変数が有効になったかどうかを確認します。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. システム環境変数を設定した後、IDE、コマンドラインインターフェイス、デスクトップアプリケーション、バックグラウンドサービスなどの開発環境を再起動または更新して、新しい変数をロードします。

  3. 環境変数から認証情報をロードします。

    このサンプルコードを実行する前に、<region-id> プレースホルダーを実際のリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
    package main
    
    import (
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    func main() {
    	// 要件に応じてリージョンを設定します。
    	region := "<region-id>"
    
    	// 環境変数からアクセス認証情報をロードします。このコードを実行する前に、OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    	provider := credentials.NewEnvironmentVariableCredentialsProvider()
    
    	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// OSS クライアントを作成します。
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

静的認証情報

次のコードは、アプリケーションに静的な認証情報をハードコーディングする方法を示しています。

警告

本番環境では、アプリケーションコードにアクセス認証情報を埋め込まないでください。この方法はテスト目的のみです。

このサンプルコードを実行する前に、<region-id> プレースホルダーを実際のリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// 要件に応じてリージョンを設定します。
	region := "<region-id>"

	// RAM ユーザーの AccessKey ID と AccessKey Secret を指定します。
	accessKeyID := "yourAccessKeyID"
	accessKeySecret := "yourAccessKeySecret"

	// NewStaticCredentialsProvider メソッドを使用して、AccessKey ID と AccessKey Secret を直接設定します。
	provider := credentials.NewStaticCredentialsProvider(accessKeyID, accessKeySecret)

	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	log.Printf("ossclient: %v", client)
}

STS 一時アクセス認証情報

一時的な OSS アクセスには、STS 認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) で認証情報プロバイダーを初期化します。この方法では、手動でのトークン管理と更新が必要です。

重要

環境変数

  1. 一時的なアクセス認証情報で環境変数を設定します。

    Mac OS X/Linux/UNIX

    警告
    • ここで使用される認証情報は、STS からの一時的なアクセス認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) であり、RAM ユーザーの AccessKey ID と AccessKey Secret ではないことに注意してください。

    • STS からの AccessKey ID は `STS.` で始まります。例: `STS.****************`。

    export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>

    Windows

    警告
    • ここで使用される認証情報は、STS からの一時的なアクセス認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) であり、RAM ユーザーの AccessKey ID と AccessKey Secret ではないことに注意してください。

    • STS からの AccessKey ID は `STS.` で始まります。例: `STS.****************`。

    set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>
  2. 環境変数から認証情報をロードします。

    サンプルコードを実行する前に、<region-id> プレースホルダーを実際のリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
    package main
    
    import (
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    func main() {
    	// 要件に応じてリージョンを設定します。
    	region := "<region-id>"
    
    	// 環境変数からアクセス認証情報をロードします。このコードを実行する前に、OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET、および OSS_SESSION_TOKEN 環境変数が設定されていることを確認してください。
    	provider := credentials.NewEnvironmentVariableCredentialsProvider()
    
    	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// OSS クライアントを作成します。
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

静的認証情報

アプリケーションに一時的なアクセス認証情報をハードコーディングできます。

警告

本番環境のコードにアクセス認証情報を埋め込まないでください。この方法はテスト目的のみです。

サンプルコードを実行する前に、<region-id> プレースホルダーを実際のリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// 要件に応じてリージョンを設定します。
	region := "<region-id>"

	// STS からの一時的なアクセス認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) を使用します。
	// RAM ユーザーの認証情報は使用しないでください。
    // STS からの AccessKey ID は `STS.` で始まることに注意してください。
	accessKeyID := "STS.****************"
	accessKeySecret := "yourAccessKeySecret"
	// STS セキュリティトークンを指定します。
	stsToken := "yourSecurityToken"

	// NewStaticCredentialsProvider メソッドを使用して、AccessKey ID、AccessKey Secret、および STS トークンを直接設定します。
	provider := credentials.NewStaticCredentialsProvider(accessKeyID, accessKeySecret, stsToken)

	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	log.Printf("ossclient: %v", client)
}

RAMRoleARN の使用

クロスアカウントまたは委任された OSS アクセスには、RAMRoleARN を使用します。RAM ロールの ARN を指定すると、Credentials ツールが `AssumeRole` API を介して STS トークンを自動的に取得および更新します。policy パラメーターを使用して権限を制限します。

重要
  • Alibaba Cloud アカウント (root ユーザー) はすべてのリソースに対する完全な権限を持っています。アクセスキーが漏洩すると、重大なセキュリティリスクが生じます。最小限の権限を持つ RAM ユーザーのアクセスキーを使用してください。

  • RAM ユーザーのアクセスキーを作成するには、「アクセスキーの作成」をご参照ください。アクセスキー ID とアクセスキーシークレットは作成時にのみ表示されます。安全に保存してください。紛失した場合は、新しいアクセスキーを作成し、認証情報をローテーションしてください。

  • RAMRoleARN を取得するには、「ロールの作成」をご参照ください。

  1. 認証情報の依存関係を追加します。

    go get github.com/aliyun/credentials-go/credentials
  2. アクセス認証情報を設定します。

    サンプルコードを実行する前に、<region-id> プレースホルダーを実際のリージョン (例: または ap-southeast-1) に置き換えてください。
    package main
    
    import (
    	"context"
    	"log"
    	"os"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    	openapicred "github.com/aliyun/credentials-go/credentials"
    )
    
    func main() {
    	// 要件に応じてリージョンを設定します。
    	region := "<region-id>"
    
    	config := new(openapicred.Config).
    		// 認証情報のタイプを指定します。この値は ram_role_arn でなければなりません。
    		SetType("ram_role_arn").
    		// 環境変数から RAM ユーザーのアクセスキー ID とアクセスキーシークレットを取得します。
    		SetAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")).
    		SetAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).
    		// 以下のパラメーターはプレースホルダー文字列で設定されています。本番環境では、これらの値を環境変数などの安全なソースからロードする必要があります。
    		// 引き受ける RAM ロールの ARN を指定します。フォーマットは acs:ram::$accountID:role/$roleName です。
    		SetRoleArn("ALIBABA_CLOUD_ROLE_ARN"). // RoleArn の従来の環境変数は ALIBABA_CLOUD_ROLE_ARN です。
    		// 異なるトークンを区別するために、カスタムのロールセッション名を指定します。
    		SetRoleSessionName("ALIBABA_CLOUD_ROLE_SESSION_NAME"). // RoleSessionName の従来の環境変数は ALIBABA_CLOUD_ROLE_SESSION_NAME です。
    		// (オプション) STS トークンの権限を制限します。
    		SetPolicy("Policy").
    		// (オプション) STS トークンの有効期間を指定します。
    		SetRoleSessionExpiration(3600)
    
    	arnCredential, gerr := openapicred.NewCredential(config)
    	provider := credentials.CredentialsProviderFunc(func(ctx context.Context) (credentials.Credentials, error) {
    		if gerr != nil {
    			return credentials.Credentials{}, gerr
    		}
    		cred, err := arnCredential.GetCredential()
    		if err != nil {
    			return credentials.Credentials{}, err
    		}
    		return credentials.Credentials{
    			AccessKeyID:     *cred.AccessKeyId,
    			AccessKeySecret: *cred.AccessKeySecret,
    			SecurityToken:   *cred.SecurityToken,
    		}, nil
    	})
    
    	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// OSS クライアントを作成します。
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

ECSRAMRole の使用

ECS、ECI、または Container Service for Kubernetes (ACK) のワーカーノード上のアプリケーションには、ECSRAMRole を使用します。ECS、ECI、または ACK のワーカーノードにロールを関連付けることで、STS トークンを自動的に更新し、手動での認証情報管理を不要にします。続行する前にロールを作成してください。

  1. 認証情報の依存関係を追加します。

    go get github.com/aliyun/credentials-go/credentials
  2. アクセス認証情報を設定します。

    サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
    package main
    
    import (
    	"context"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    	openapicred "github.com/aliyun/credentials-go/credentials"
    )
    
    func main() {
    	// リージョンを設定します。
    	region := "<region-id>"
    
    	config := new(openapicred.Config).
    		// 認証情報のタイプを指定します。値を ecs_ram_role に設定します。
    		SetType("ecs_ram_role").
    		// (オプション) ロール名を指定します。省略した場合、OSS クライアントは自動的に 1 つを検出します。リクエストを減らすためにロール名を指定することを推奨します。
    		SetRoleName("RoleName")
    
    	arnCredential, gerr := openapicred.NewCredential(config)
    	provider := credentials.CredentialsProviderFunc(func(ctx context.Context) (credentials.Credentials, error) {
    		if gerr != nil {
    			return credentials.Credentials{}, gerr
    		}
    		cred, err := arnCredential.GetCredential()
    		if err != nil {
    			return credentials.Credentials{}, err
    		}
    		return credentials.Credentials{
    			AccessKeyID:     *cred.AccessKeyId,
    			AccessKeySecret: *cred.AccessKeySecret,
    			SecurityToken:   *cred.SecurityToken,
    		}, nil
    	})
    
    	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// OSS クライアントを作成します。
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

OIDCRoleARN の使用

Container Service for Kubernetes (ACK) のワーカーノード上の信頼できないアプリケーションには、ノードのメタデータサービストークンを共有する代わりに、OIDC ベースの RRSA を使用して Pod レベルの最小権限を強制します。ACK は Pod ごとに OIDC トークンファイルをマウントします。Credentials ツールはそれを読み取り、`AssumeRoleWithOIDC` を呼び出して STS トークンを自動的に取得します。RRSA を使用してサービスアカウントの RAM 権限を設定し、Pod の権限を分離します

  1. 認証情報の依存関係を追加します。

    go get github.com/aliyun/credentials-go/credentials
  2. アクセス認証情報を設定します。

    サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
    package main
    
    import (
    	"context"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    	openapicred "github.com/aliyun/credentials-go/credentials"
    )
    
    func main() {
    	// リージョンを指定します。
    	region := "<region-id>"
    
    	config := new(openapicred.Config).
    		// 認証情報のタイプ。 "oidc_role_arn" でなければなりません。
    		SetType("oidc_role_arn").
    		// OIDC プロバイダーの ARN を指定します。フォーマットは acs:ram::account-id:oidc-provider/provider-name です。
    		SetOIDCProviderArn("OIDCProviderArn").
    		// OIDC トークンファイルのパスを指定します。
    		SetOIDCTokenFilePath("OIDCTokenFilePath").
    		// トークンを区別するためにカスタムのロールセッション名を指定します。
    		SetRoleSessionName("RoleSessionName"). // RoleSessionName のデフォルトの環境変数は ALIBABA_CLOUD_ROLE_SESSION_NAME です。
    		// (オプション) ロールを引き受ける際に使用するポリシーを指定します。
    		SetPolicy("Policy").
    		// 引き受ける RAM ロールの ARN。フォーマットは acs:ram::account-id:role/role-name です。
    		SetRoleArn("RoleArn").
    		// セッション期間 (秒)。
    		SetSessionExpiration(3600)
    
    	arnCredential, gerr := openapicred.NewCredential(config)
    	provider := credentials.CredentialsProviderFunc(func(ctx context.Context) (credentials.Credentials, error) {
    		if gerr != nil {
    			return credentials.Credentials{}, gerr
    		}
    		cred, err := arnCredential.GetCredential()
    		if err != nil {
    			return credentials.Credentials{}, err
    		}
    		return credentials.Credentials{
    			AccessKeyID:     *cred.AccessKeyId,
    			AccessKeySecret: *cred.AccessKeySecret,
    			SecurityToken:   *cred.SecurityToken,
    		}, nil
    	})
    
    	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// OSS クライアントを作成します。
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

カスタム認証情報プロバイダー

標準のメソッドが要件を満たさない場合は、カスタムプロバイダーを実装します。

  1. credentials.CredentialsProviderFunc インターフェイスを使用する

    サンプルコードを実行する前に、<region-id> プレースホルダーを有効なリージョンとエンドポイント (例: ap-southeast-1) に置き換えてください。
    package main
    
    import (
    	"context"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    func main() {
    	// 要件に応じてリージョンを設定します。
    	region := "<region-id>"
    
    	// カスタム認証情報プロバイダーを作成します。
    	provider := credentials.CredentialsProviderFunc(func(ctx context.Context) (credentials.Credentials, error) {
    		// 長期的な認証情報を返します。
    		return credentials.Credentials{AccessKeyID: "id", AccessKeySecret: "secret"}, nil
    		// 一時的な認証情報を返します。
    		//return credentials.Credentials{AccessKeyID: "id", AccessKeySecret: "secret",    SecurityToken: "token"}, nil
    	})
    
    	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// OSS クライアントを作成します。
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    
  2. credentials.CredentialsProvider インターフェイスを実装する

    サンプルコードを実行する前に、<region-id> プレースホルダーを有効なリージョンとエンドポイント (例: ap-southeast-1) に置き換えてください。
    package main
    
    import (
    	"context"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    type CustomerCredentialsProvider struct {
    	// TODO
    }
    
    func NewCustomerCredentialsProvider() CustomerCredentialsProvider {
    	return CustomerCredentialsProvider{}
    }
    
    func (s CustomerCredentialsProvider) GetCredentials(_ context.Context) (credentials.Credentials, error) {
    	// 長期的な認証情報を返します。
    	return credentials.Credentials{AccessKeyID: "id", AccessKeySecret: "secret"}, nil
    	// 一時的な認証情報を返します。
    	//return credentials.Credentials{AccessKeyID: "id", AccessKeySecret: "secret",    SecurityToken: "token"}, nil
    }
    
    func main() {
    	// 要件に応じてリージョンを設定します。
    	region := "<region-id>"
    
    	// カスタム認証情報プロバイダーを作成します。
    	provider := NewCustomerCredentialsProvider()
    
    	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// OSS クライアントを作成します。
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

デフォルトの認証情報プロバイダーチェーンの使用

パラメーターが指定されていない場合、SDK はデフォルトの認証情報プロバイダーチェーンを使用して認証情報を自動的に検索します。

サンプルコードを実行する前に、<region-id> プレースホルダーをリージョンとエンドポイント (例: または ap-southeast-1) に置き換えてください。
package main

import (
	"context"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	osscred "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
	"github.com/aliyun/credentials-go/credentials"
)

func main() {
	// 要件に応じてリージョンを設定します。
	region := "<region-id>"
	// nil を渡すと、デフォルトの認証情報プロバイダーチェーンを使用して認証情報を検索します。
	arnCredential, gerr := credentials.NewCredential(nil)
	provider := osscred.CredentialsProviderFunc(func(ctx context.Context) (osscred.Credentials, error) {
		if gerr != nil {
			return osscred.Credentials{}, gerr
		}
		cred, err := arnCredential.GetCredential()
		if err != nil {
			return osscred.Credentials{}, err
		}

		return osscred.Credentials{
			AccessKeyID:     *cred.AccessKeyId,
			AccessKeySecret: *cred.AccessKeySecret,
			SecurityToken:   *cred.SecurityToken,
		}, nil
	})

	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)
	log.Printf("ossclient: %v", client)
}

トラブルシューティング

OSS のエラーには、HTTP ステータスコード、メッセージ、リクエスト ID、EC エラーコードが含まれます。EC コードを使用して根本原因を特定します。

  1. たとえば、次のコードを使用して存在しないオブジェクトをダウンロードする場合:

    package main
    
    import (
    	"context"
    	"flag"
    	"io"
    	"log"
    	"os"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    // グローバル変数を定義します。
    var (
    	region     string // バケットが配置されているリージョン。
    	bucketName string // バケットの名前。
    	objectName string // オブジェクトの名前。
    )
    
    // init 関数はコマンドラインパラメーターを初期化します。
    func init() {
    	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
    	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
    	flag.StringVar(&objectName, "object", "", "The name of the object.")
    }
    
    func main() {
    	// コマンドラインパラメーターを解析します。
    	flag.Parse()
    
    	// バケット名が空かどうかを確認します。
    	if len(bucketName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("invalid parameters, bucket name required")
    	}
    
    	// リージョンが空かどうかを確認します。
    	if len(region) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("invalid parameters, region required")
    	}
    
    	// オブジェクト名が空かどうかを確認します。
    	if len(objectName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("invalid parameters, object name required")
    	}
    
    	// 出力ファイルパスを定義します。
    	outputFile := "downloaded.txt" // これを目的のファイルパスに置き換えます。
    
    	// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// OSS クライアントを作成します。
    	client := oss.NewClient(cfg)
    
    	// オブジェクトを取得するリクエストを作成します。
    	request := &oss.GetObjectRequest{
    		Bucket: oss.Ptr(bucketName), // バケットの名前。
    		Key:    oss.Ptr(objectName), // オブジェクトの名前。
    	}
    
    	// オブジェクトを取得し、結果を処理します。
    	result, err := client.GetObject(context.TODO(), request)
    	if err != nil {
    		log.Fatalf("failed to get object %v", err)
    	}
    	defer result.Body.Close() // 関数が終了するときにレスポンスボディが閉じられることを確認します。
    
    	// オブジェクトのコンテンツ全体を一度に読み取ります。
    	data, err := io.ReadAll(result.Body)
    	if err != nil {
    		log.Fatalf("failed to read object %v", err)
    	}
    
    	// コンテンツをファイルに書き込みます。
    	err = os.WriteFile(outputFile, data, 0644)
    	if err != nil {
    		log.Fatalf("failed to write to output file %v", err)
    	}
    
    	log.Printf("file downloaded successfully to %s", outputFile)
    }
    
  2. 以下は返されたエラーメッセージの例です。これには、エラーの原因を一意に識別する EC エラーコード 'EC': '0026-00000001' が含まれています。

    2025/03/07 15:13:46 failed to get object operation error GetObject: Error returned by Service.
    Http Status Code: 404.
    Error Code: NoSuchKey.
    Request Id: 67CA9CAADC44E03938AD91F0.
    Message: The specified key does not exist..
    EC: 0026-00000001.
    Timestamp: 2025-03-07 07:13:46 +0000 UTC.
    Request Endpoint: GET https://xxx.oss-cn-hangzhou.aliyuncs.com/asdgkhfk.
  3. 例の EC エラーコードを使用してエラーのトラブルシューティングを行うには、次の手順に従います:

    1. OpenAPI 自己診断プラットフォームを開きます。

    2. 検索ボックスに EC エラーコード (例: 0026-00000001) を入力します。次に、リクエスト ID を含むエラーメッセージをテキストボックスに貼り付け、[診断] をクリックします。

    3. 検索結果には、エラーの原因とその解決策が表示されます。EC エラーコード 0026-00000001 の場合、診断はターゲットオブジェクトが存在しないことを示します。考えられる原因には、オブジェクトのアップロードの失敗、ライフサイクルルールによる削除、別のユーザーによる削除、またはクロスリージョンレプリケーションによる同期削除が含まれます。解決策は、HeadObject でオブジェクトの存在を確認し、ListObjectVersions でバージョン情報を表示し、オブジェクトの命名規則、ライフサイクルルール、ユーザー権限、およびクロスリージョンレプリケーションルールを確認することです。詳細については、NoSuchKey および NoSuchVersion をご参照ください。

サンプルコード

以下のサンプルコードを参照または使用してください。

説明

サンプルファイル

バケットの作成

put_bucket.go

バケットのリスト

list_buckets.go

バケットが存在するかどうかの確認

is_bucket_exist.go

バケットのリージョンの取得

get_bucket_location.go

バケット情報の取得

get_bucket_info.go

バケットのストレージ容量の取得

get_bucket_stat.go

リソースグループ

バケットの削除

delete_bucket.go

バケットタグ

リクエスタ支払い

単純なアップロード

put_object.go

追加アップロード

マルチパートアップロード

フォームアップロード

post_object.go

署名付き URL を使用したオブジェクトのアップロード

presign.go

アップロードマネージャー

-

単純なダウンロード

読み取り専用ファイルとしてのオブジェクトへのアクセス

open_file.go

署名付き URL を使用したオブジェクトのダウンロード

presign.go

ダウンロードマネージャー

-

オブジェクトのコピー

copy_object.go

マルチパートコピー

upload_part_copy.go

コピーマネージャー

-

オブジェクトが存在するかどうかの確認

is_object_exist.go

オブジェクトのリスト

list_objects_v2.go

オブジェクトの削除

オブジェクトのクエリ

select_object.go

オブジェクトを復元する

restore_object.go

オブジェクトのメタデータの管理

オブジェクトのストレージクラスの変更

copy_object.go

オブジェクトの名前変更

copy_object.go

シンボリックリンクの管理

バケット ACL の管理

オブジェクト ACL の管理

バケットポリシー

バージョン管理の管理

ホットリンク保護

クロスオリジンリソース共有 (CORS)

リテンションポリシー

サーバーサイド暗号化

クライアントサイド暗号化

encryption_client.go

データレプリケーション

put_bucket_replication.go

アクセスモニタリング

put_bucket_access_monitor.go

ライフサイクル管理

バケットインベントリ

静的ウェブサイトホスティング (オリジンプル付き)

put_bucket_website.go

ロギング

アーカイブ直接読み取り

スカラー検索

ベクトル検索

カスタムドメイン名のマッピング

転送アクセラレーション

同期処理

process_object.go

非同期処理

async_process_object.go

パブリックアクセスのブロック (グローバル)

put_public_access_block.go

パブリックアクセスのブロック (バケットレベル)

put_bucket_public_access_block.go

パブリックアクセスのブロック (アクセスポイントレベル)

put_access_point_public_access_block.go

リソースプール QoS 管理

-