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

Object Storage Service:PrivateLink を介したプライベートネットワーク経由での OSS へのアクセス

最終更新日:Mar 21, 2026

PrivateLink は、お使いの Virtual Private Cloud (VPC) と Object Storage Service (OSS) の間に安全なプライベート接続を確立し、すべてのトラフィックを Alibaba Cloud のバックボーンネットワーク内に保持します。これにより、データセキュリティのリスク、ネットワークアドレスの競合、および運用の複雑さが解消され、クラウドストレージへの安全で制御されたパスが提供されます。

仕組み

PrivateLink は、VPC 内に専用のプライベートエンドポイントをプロビジョニングし、トラフィックを直接 OSS にルーティングします。トラフィックは Alibaba Cloud のバックボーンネットワーク内に留まり、ソース IP ベースのアクセス制御と VPC フローログ監査が可能になります。標準の OSS 内部エンドポイントとは異なり、PrivateLink はネットワーク層のセキュリティ分離と詳細なトラフィック制御を提供します。PrivateLink は、以下のシナリオに適しています。

シナリオ

標準の内部エンドポイント

PrivateLink

厳格なセキュリティとコンプライアンス要件

すべての VPC がアクセス可能な共有エントリポイントを公開します。セキュリティはアプリケーション層のポリシーに依存します。

攻撃対象領域を削減します。エントリポイントは VPC 内に存在するため、他の VPC からは検出も到達もできず、トラフィックはネットワーク層で分離されます。

ネットワーク層での詳細なアクセス制御

セキュリティグループでは OSS へのアクセスを制御できません。バケットポリシーが唯一の選択肢です。

セキュリティグループのバインディングをサポートします。PrivateLink エンドポイントにセキュリティグループルールをアタッチして、OSS に到達できるソース IP を正確に制御します。

すべての接続試行の監査

OSS アクセスログは成功したリクエストのみを記録します。拒否されたネットワーク層の試行はキャプチャされません。

VPC フローログをサポートします。接続が成功したかどうかに関わらず、エンドポイントをターゲットとするすべてのトラフィックをキャプチャして監査します。

IP 競合の可能性があるハイブリッドクラウド

クラウドサービスはデフォルトで 100.64.0.0/10 ブロックを使用するため、オンプレミスネットワークの計画と競合する可能性があります。

IP 競合を回避します。エンドポイントは VPC のアドレス空間から IP を使用するため、カスタム IP 計画を完全に尊重し、ハイブリッドクラウドのルーティングを簡素化します。

サポート対象リージョン

以下のリージョンは、以下から申請した後にサポートされます:テクニカルサポート:中国 (Hangzhou)、中国 (Shanghai)、中国 (Qingdao)、中国 (Beijing)、中国 (Zhangjiakou)、中国 (Ulanqab)、中国 (Shenzhen)、中国 (Heyuan)、中国 (Guangzhou)、中国 (Chengdu)、香港 (中国)、日本 (Tokyo)、韓国 (Seoul)、シンガポール、インドネシア (Jakarta)、タイ (Bangkok)、ドイツ (Frankfurt)、米国 (Silicon Valley)、米国 (Virginia)、および英国 (London)。

PrivateLink の設定と使用

PrivateLink エンドポイントを作成してプライベート接続を確立し、それを使用して VPC またはオンプレミスデータセンターから安全に OSS にアクセスします。

エンドポイントの作成と検証

エンドポイントを作成して VPC と OSS の間に安全なプライベート接続を確立し、その後、Elastic Compute Service (ECS) インスタンスから接続性と OSS へのアクセスを検証します。

作業を開始する前に、VPC と vSwitch が作成済みであることを確認してください。検証手順には ECS インスタンスも必要です。お持ちでない場合は、「ECS インスタンスの購入」を参照して従量課金インスタンスを作成してください。

ステップ 1:エンドポイントの作成

  1. VPC エンドポイントページに移動し、[エンドポイントの作成] をクリックします。初めて使用する場合は、画面のプロンプトに従って PrivateLink サービスを有効化します。

  2. 以下のパラメーターを設定します。他のすべての設定はデフォルトのままにします。

    • [リージョン]:ターゲットの OSS バケットが存在するリージョンを選択します。例:中国 (杭州)。

    • [エンドポイント名]:分かりやすい名前を入力します。例:privatelink-oss

    • [エンドポイントタイプ][インターフェイスエンドポイント] を選択します。

    • [エンドポイントサービス][Alibaba Cloud サービス] を選択し、リストから OSS エンドポイントサービスを選択します (名前が oss で終わるエントリ)。

説明

リストに OSS エンドポイントサービスが表示されない場合は、テクニカルサポートテクニカルサポート に連絡して、有効化を依頼してください。

  • [VPC]:エンドポイントを作成する VPC を選択します。利用可能な VPC がない場合は、[VPC の作成] をクリックして作成します。

  • [セキュリティグループ]:エンドポイントにバインドするセキュリティグループを選択します。適切なセキュリティグループがない場合は、[セキュリティグループの作成] をクリックして作成します。

  • [ゾーンと vSwitch]:エンドポイントのゾーンと vSwitch を選択します。利用可能な vSwitch がない場合は、[vSwitch の作成] をクリックして作成します。

  1. [OK] をクリックします。システムが自動的にエンドポイントを作成します。エンドポイントの詳細ページで、[エンドポイントサービスのドメイン名] をコピーします。このドメイン名を使用して OSS にアクセスします。

    image

ステップ 2:エンドポイントの検証

接続性テストとファイルのダウンロードを実行して、PrivateLink エンドポイントが正しく設定され、完全に機能していることを確認します。

  • 接続性の検証

    ping を使用してエンドポイントのドメイン名をテストし、DNS 名前解決とネットワークパスが正しく機能していることを確認します。

  ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com
  • ファイルダウンロードの検証

    同じリージョン内の ECS インスタンスから、ossutil を使用して PrivateLink 接続経由でファイルをダウンロードし、データ転送がエンドツーエンドで機能することを確認します。

    1. ossutil 2.0 のインストールと設定を行います。

    2. エンドポイントのドメイン名 (例:ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com) を使用して OSS にアクセスします。次の例では、example-bucket という名前のバケットから dest.jpg という名前のファイルをダウンロードします。

    ossutil cp oss://example-bucket/dest.jpg /tmp/ -e ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com --addressing-style path

ダウンロードが成功すると、次のような出力が生成されます。ファイルは /tmp ディレクトリに保存されます。

    Success: Total 1 object, size 134102 B, Download done:(1 files, 134102 B), avg 680.112 KiB/s

        0.193189(s) elapsed

VPC アクセスセキュリティの強化

PrivateLink 接続を検証した後、バケットポリシーのアクセスポリシーを設定して、アクセス制御のレイヤーを追加します。次の例では、オブジェクトのダウンロードを PrivateLink エンドポイントにバインドされた VPC からのリクエストに制限し、ネットワーク層とアプリケーション層のアクセス制御を組み合わせています。

  1. バケットリストに移動し、ターゲットのバケットをクリックします。

  2. 左側のナビゲーションウィンドウで、[権限コントロール] > [バケットポリシー] をクリックします。

  3. [承認] をクリックし、次の設定を行います。他のすべてのパラメーターはデフォルトのままにします。

    • 承認済みユーザー: [すべてのアカウント (*)] を選択します。

    • 承認操作: [詳細設定] を選択します。

    • 効果: [拒否] を選択します。

    • [アクション][oss:GetObject] を選択します。

    • [条件][VPC ≠] を選択し、ドロップダウンから PrivateLink エンドポイントにバインドされた VPC を選択します。

  4. [OK] をクリックしてバケットポリシーを保存します。

SSL-VPN を介したローカルデバイスの接続

SSL-VPN を使用すると、開発者のワークステーションやモバイルデバイスなどの個々のデバイスが、暗号化トンネルを介して VPC に接続できます。接続されると、これらのデバイスは VPC にすでに設定されている PrivateLink エンドポイントを介して OSS にアクセスできます。このアプローチは、リモートワーク、開発およびテスト、緊急アクセスシナリオに適しています。

ステップ 1:SSL-VPN ゲートウェイとクライアントの設定

SSL-VPN ゲートウェイをデプロイし、クライアント設定を完了して、ローカルデバイスと VPC の間に暗号化接続を確立します。詳細な手順については、「クライアントを VPC に接続する」をご参照ください。

ステップ 2:OSS への PrivateLink アクセスの検証

接続性テストとファイルのダウンロードを実行して、ローカルデバイスから PrivateLink 接続が正しく機能していることを確認します。

  • 接続性の検証

    ping を使用してエンドポイントのドメイン名をテストし、DNS 名前解決とネットワークパスが正しく機能していることを確認します。

  ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com
  • ファイルダウンロードの検証

ossutil

ossutil を使用して実際のファイル操作を実行し、PrivateLink を介したデータ転送が完全に機能することを確認します。

  1. ossutil 2.0 のインストールと設定を行います。

  2. エンドポイントのドメイン名 (例:ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com) を使用して OSS にアクセスします。次の例では、example-bucket から dest.jpg をダウンロードします。

    ossutil cp oss://example-bucket/dest.jpg /tmp/ -e ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com --addressing-style path

ダウンロードが成功すると、次のような出力が生成されます。ファイルは /tmp ディレクトリに保存されます。

    Success: Total 1 object, size 134102 B, Download done:(1 files, 134102 B), avg 680.112 KiB/s

        0.193189(s) elapsed

SDK

SDK ベースのアクセスは、実際の稼働環境をよりよく表しており、複雑なビジネスロジックと例外処理をサポートします。以下の SDK は、PrivateLink を介した OSS へのアクセスをサポートしています。

Java

PrivateLink 経由で OSS にアクセスする場合、setSLDEnabled(true) を呼び出してパス形式のアクセスを有効にします。標準のインターネットアクセスの場合は、setSLDEnabled(false) に設定します。

  import com.aliyun.oss.*;
      import com.aliyun.oss.common.auth.*;
      import com.aliyun.oss.common.comm.SignVersion;
      import com.aliyun.oss.model.GetObjectRequest;
      import java.io.File;

      /**
       * OSS PrivateLink アクセスの例
       * PrivateLink を介して OSS にアクセスし、ファイルをダウンロードする方法を示します
       */
      public class Test {

          public static void main(String[] args) throws Exception {
              // PrivateLink エンドポイントのドメイン名
              String endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com";

              // エンドポイントに対応するリージョン、例:cn-hangzhou
              String region = "cn-hangzhou";

              // 環境変数から認証情報を取得
              // このサンプルを実行する前に、OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください
              EnvironmentVariableCredentialsProvider credentialsProvider =
                      CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

              // バケット名、例:example-bucket
              String bucketName = "example-bucket";

              // バケット名を除く完全なオブジェクトパス
              String objectName = "dest.jpg";

              // ダウンロードしたファイルを保存するローカルファイルパス
              String pathName = "dest.jpg";

              // クライアントパラメーターの設定
              ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();

              // PrivateLink のためのパス形式アクセスを有効にする (バケットドメイン経由のインターネットアクセスの場合は false に設定)
              clientBuilderConfiguration.setSLDEnabled(true);

              // 署名バージョン 4 を使用
              clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);

              // OSS クライアントの作成
              OSS ossClient = OSSClientBuilder.create()
                      .endpoint(endpoint)
                      .credentialsProvider(credentialsProvider)
                      .clientConfiguration(clientBuilderConfiguration)
                      .region(region)
                      .build();

              try {
                  // オブジェクトをローカルファイルにダウンロード
                  // ファイルが存在する場合は上書き、存在しない場合は作成
                  // パスが指定されていない場合、ファイルはプロジェクトディレクトリに保存されます
                  ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));

              } catch (OSSException oe) {
                  // リクエストは OSS に到達したが拒否された
                  System.out.println("Caught an OSSException: the request reached OSS but was rejected.");
                  System.out.println("Error message: " + oe.getErrorMessage());
                  System.out.println("Error code: " + oe.getErrorCode());
                  System.out.println("Request ID: " + oe.getRequestId());
                  System.out.println("Host ID: " + oe.getHostId());

              } catch (ClientException ce) {
                  // クライアントが OSS と通信できなかった
                  System.out.println("Caught a ClientException: the client encountered a serious internal problem, " +
                          "such as a network failure.");
                  System.out.println("Error message: " + ce.getMessage());

              } finally {
                  // リソースの解放
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      }

Python

PrivateLink 経由で OSS にアクセスする場合、is_path_style=True を設定してパス形式のアクセスを有効にします。

  # -*- coding: utf-8 -*-
      """
      OSS PrivateLink アクセスの例
      PrivateLink プライベートネットワーク接続を介して OSS からファイルをダウンロードします
      """

      import oss2
      from oss2.credentials import EnvironmentVariableCredentialsProvider

      def main():
          """PrivateLink を介して OSS からファイルをダウンロードします。"""

          # 認証情報の設定
          # 注:Alibaba Cloud アカウントの AccessKey は完全な API アクセス権を持ち、高いリスクを伴います。
          # API アクセスや日常的な操作には RAM ユーザーを使用してください。RAM ユーザーは RAM コンソールで作成します。
          auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

          # PrivateLink エンドポイントのドメイン名
          endpoint = 'https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com'

          # バケット名
          bucket_name = 'example-bucket'

          # Bucket オブジェクトの作成
          # is_path_style=True はパス形式のアクセスを有効にし、PrivateLink や同様のシナリオで必要です
          bucket = oss2.Bucket(auth, endpoint, bucket_name, is_path_style=True)

          # OSS 内のオブジェクトパス (バケット名を除く)
          object_name = 'dest.jpg'

          # ダウンロードしたファイルを保存するローカルファイルパス
          local_file_path = 'dest.jpg'

          # オブジェクトをローカルファイルにダウンロード
          # ファイルが存在する場合は上書き、存在しない場合は作成
          bucket.get_object_to_file(object_name, local_file_path)

          print(f"File downloaded successfully: {object_name} -> {local_file_path}")

      if __name__ == '__main__':
          main()

Go

PrivateLink 経由で OSS にアクセスする場合、ForcePathStyle(true) を使用してパス形式のアクセスを有効にします。

  package main

      import (
      	"fmt"
      	"os"

      	"github.com/aliyun/aliyun-oss-go-sdk/oss"
      )

      const (
      	// PrivateLink エンドポイントのドメイン名
      	endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com"

      	// バケット名
      	bucketName = "example-bucket"

      	// OSS 内のオブジェクトパス (バケット名を除く)
      	objectName = "dest.jpg"

      	// ダウンロードしたファイルを保存するローカルファイルパス
      	localFilePath = "dest.jpg"
      )

      func main() {
      	// 認証情報プロバイダーの初期化
      	// 環境変数から認証情報を読み取ります
      	// このサンプルを実行する前に、OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください
      	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
      	if err != nil {
      		fmt.Printf("Failed to initialize credentials provider: %v\n", err)
      		os.Exit(-1)
      	}

      	// OSS クライアントの作成
      	// oss.ForcePathStyle(true) はパス形式のアクセスを有効にし、PrivateLink や同様のシナリオで必要です
      	client, err := oss.New(
      		endpoint,
      		"", // AccessKeyId は認証情報プロバイダーによって提供されます
      		"", // AccessKeySecret は認証情報プロバイダーによって提供されます
      		oss.SetCredentialsProvider(&provider),
      		oss.ForcePathStyle(true),
      	)
      	if err != nil {
      		fmt.Printf("Failed to create OSS client: %v\n", err)
      		os.Exit(-1)
      	}

      	// バケットの取得
      	bucket, err := client.Bucket(bucketName)
      	if err != nil {
      		fmt.Printf("Failed to get bucket: %v\n", err)
      		os.Exit(-1)
      	}

      	// オブジェクトをローカルファイルにダウンロード
      	// ファイルが存在する場合は上書き、存在しない場合は作成
      	// パスが指定されていない場合、ファイルはプロジェクトディレクトリに保存されます
      	err = bucket.GetObjectToFile(objectName, localFilePath)
      	if err != nil {
      		fmt.Printf("Failed to download file: %v\n", err)
      		os.Exit(-1)
      	}

      	fmt.Printf("File downloaded successfully: %s -> %s\n", objectName, localFilePath)
      }
    

C++

PrivateLink 経由で OSS にアクセスする場合、conf.isPathStyle = true を設定してパス形式のアクセスを有効にします。

  #include <alibabacloud/oss/OssClient.h>
      #include <memory>
      #include <fstream>
      #include <iostream>

      using namespace AlibabaCloud::OSS;

      int main(void)
      {
          // PrivateLink エンドポイントのドメイン名
          std::string Endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com";

          // バケット名
          std::string BucketName = "example-bucket";

          // OSS 内のオブジェクトパス (バケット名を除く)
          std::string ObjectName = "dest.jpg";

          // ダウンロードしたファイルを保存するローカルファイルパス
          // ファイルが存在する場合は上書き、存在しない場合は作成
          // パスが指定されていない場合、ファイルはプロジェクトディレクトリに保存されます
          std::string FileNametoSave = "dest.jpg";

          // OSS SDK リソースの初期化
          InitializeSdk();

          // クライアントパラメーターの設定
          ClientConfiguration conf;

          // 環境変数から認証情報を取得
          // このサンプルを実行する前に、OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください
          auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();

          // PrivateLink や同様のシナリオのためにパス形式のアクセスを有効にする
          conf.isPathStyle = true;

          // OSS クライアントの作成
          OssClient client(Endpoint, credentialsProvider, conf);

          // ダウンロードリクエストの構築
          GetObjectRequest request(BucketName, ObjectName);

          // レスポンスストリームファクトリを設定してローカルファイルに書き込む
          request.setResponseStreamFactory([=]() {
              return std::make_shared<std::fstream>(
                  FileNametoSave,
                  std::ios_base::out | std::ios_base::in | std::ios_base::trunc | std::ios_base::binary
              );
          });

          // ダウンロードの実行
          auto outcome = client.GetObject(request);

          // 結果の処理
          if (outcome.isSuccess()) {
              std::cout << "File downloaded successfully. Size: "
                        << outcome.result().Metadata().ContentLength()
                        << " bytes" << std::endl;
              std::cout << "Saved to: " << FileNametoSave << std::endl;
          }
          else {
              // エラー処理
              std::cout << "Download failed" << std::endl
                        << "Error code: " << outcome.error().Code() << std::endl
                        << "Error message: " << outcome.error().Message() << std::endl
                        << "Request ID: " << outcome.error().RequestId() << std::endl;

              // リソースを解放してエラーコードを返す
              ShutdownSdk();
              return -1;
          }

          // OSS SDK リソースの解放
          ShutdownSdk();
          return 0;
      }

Express Connect または VPN ゲートウェイを介したオンプレミスデータセンターの接続

エンタープライズデータセンターは、Express Connect 回線または VPN ゲートウェイを介して Alibaba Cloud VPC に接続し、その後 PrivateLink を使用してプライベートネットワーク経由で OSS にアクセスできます。Express Connect は安定した保証された帯域幅を提供し、VPN ゲートウェイは柔軟な暗号化接続を提供します。どちらも大規模な本番データ転送に適しています。設定の詳細については、「VPC をデータセンターまたは別のクラウドに接続する」をご参照ください。

本番環境への適用

ベストプラクティス

  • セキュリティグループルールの最適化

    最小権限の原則に従ってセキュリティグループルールを設定します:アクセスが必要な特定の IP 範囲にのみエンドポイントのアクセスポートを開放し、セキュリティルールを定期的に見直します。正確なソース IP とポートの制御により、アクセスポリシーがビジネス要件と一致し続け、権限の無秩序な拡大や不正アクセスを防ぎます。

  • ネットワーク接続の監視

    VPC フローログを有効にし、トラフィックパターンに基づいて異常検知を設定して、PrivateLink のアクセス動作とデータ転送をリアルタイムで監視します。

  • 複数ゾーンへのデプロイ

    本番環境では、高可用性とフォールトトレランスのために、複数のアベイラビリティゾーンにエンドポイントをデプロイします。負荷分散または DNS ラウンドロビンを使用すると、1 つのゾーンで障害が発生した場合に、トラフィックは自動的に他のゾーンの正常なエンドポイントにシフトされ、サービスの継続的な可用性が維持されます。

課金

PrivateLink は、実際の使用量に基づいて時間単位で課金されます。料金には、インスタンス料金とデータ処理料金が含まれます。サービス利用者とサービスプロバイダーは異なる Alibaba Cloud アカウントである場合があり、料金は指定されたアカウントに請求できます。詳細については、「課金概要」をご参照ください。