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

Object Storage Service:OSS SDKを使用してアクセスを許可します。NET

最終更新日:Jun 14, 2024

このトピックでは、Security Token Service (STS) または署名付きURLによって提供される一時的なアクセス資格情報を使用して、Object Storage Service (OSS) リソースへの一時的なアクセスを許可する方法について説明します。

重要

STSの一時アクセス資格情報と署名付きURLに有効期間を指定する必要があります。 一時的なアクセス資格情報を使用して、オブジェクトのアップロードやダウンロードなどの操作を実行するために使用される署名付きURLを生成する場合、最小有効期間が優先されます。 たとえば、一時的なアクセス資格情報の有効期間を1,200秒に設定し、資格情報を使用して生成された署名付きURLの有効期間を3,600秒に設定できます。 この場合、STSの一時アクセス資格情報の有効期限が切れた後は、署名付きURLを使用してオブジェクトをアップロードすることはできません。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。

STSを使用した一時アクセスの許可

STSを使用して、OSSへの一時アクセスを許可できます。 STSは、ユーザーに一時的なアクセストークンを提供するwebサービスです。 STSを使用して、管理されているサードパーティのアプリケーションまたはRAMユーザーに、カスタムの有効期間とカスタムのアクセス許可を持つ一時的なアクセス資格情報を付与できます。 STSの詳細については、STSとは何ですか?.

STSには次の利点があります。

  • 一時的なアクセストークンを生成し、そのアクセストークンをサードパーティのアプリケーションに送信するだけで済みます。 サードパーティのアプリケーションにAccessKeyペアを提供する必要はありません。 このトークンのアクセス権限と有効期間を指定できます。

  • 有効期間が終了すると、トークンは自動的に期限切れになります。 したがって、トークンのアクセス権限を手動で取り消す必要はありません。

STSが提供する一時的なアクセス資格情報を使用してOSSにアクセスするには、次の操作を実行します。

  1. 一時的なアクセス資格情報を取得します。

    一時的なアクセス資格情報には、セキュリティトークンと、AccessKey IDとAccessKeyシークレットで構成される一時的なAccessKeyペアが含まれます。 一時的なアクセス資格情報の最小有効期間は900秒です。 一時的なアクセス資格情報の最大有効期間は、現在のロールに指定されている最大セッション期間です。 詳細については、「RAMロールの最大セッション期間の指定」をご参照ください。

    次のいずれかの方法を使用して、一時的なアクセス資格情報を取得できます。

    • 方法 1

      AssumeRole操作を呼び出して、一時的なアクセス資格情報を取得します。

    • 方法 2

      STS SDKを使用して一時的なアクセス資格情報を取得します。 詳細については、「STS SDKの概要」をご参照ください。

  2. STSから取得した一時的なアクセス資格情報を使用して、署名付きリクエストを作成します。

    Aliyun.OSSを使用した
    
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
    var endpoint = "yourEndpoint";
    サンプルコードを実行する前に、STSから取得した一時的なAccessKeyペアを使用して、YOUR_ACCESS_KEY_IDとYOUR_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
    var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
    // STSから取得したセキュリティトークンを指定します。 
    var securityToken = "yourSecurityToken";
    // STSから取得した一時的なアクセス資格情報を使用して、OSSClientインスタンスを作成します。 
    // Create an OSSClient instance. 
    var ossStsClient = new OssClient (エンドポイント、accessKeyId、accessKeySecret、securityToken);
    // OSS関連の操作を実行します。

署名付きURLを使用して一時アクセスを許可する

使用上の注意

  • OSS SDKを使用して署名付きURLを生成する場合、OSS SDKはローカルコンピューターに保存されているキー情報に基づいて特定のアルゴリズムを使用して署名を計算し、URLに署名を追加してURLの有効性とセキュリティを確保します。 URLを計算し構築するために実行される操作は、クライアント上で完了する。 ネットワーク経由でサーバーにリクエストを送信する必要はありません。 この方法では、署名付きURLを生成するときに、呼び出し元に特定の権限を付与する必要はありません。 ただし、サードパーティのユーザーが署名付きURLによって承認されたリソースに対して関連する操作を実行できるようにするには、API操作を呼び出して署名付きURLを生成するプリンシパルに対応する権限があることを確認する必要があります。

    たとえば、プリンシパルが署名付きURLを使用してオブジェクトをアップロードする場合は、プリンシパルにoss:PutObject権限を付与する必要があります。 プリンシパルが署名付きURLを使用してオブジェクトをダウンロードまたはプレビューする場合は、プリンシパルにoss:GetObject権限を付与する必要があります。

  • 署名付きURLを生成し、一時的なアクセスのために訪問者にURLを提供できます。 署名付きURLを生成するときに、URLの有効期間を指定して、訪問者が特定のデータにアクセスできる期間を制限できます。

  • HTTPS経由でリソースにアクセスするために使用される署名付きURLを生成するには、エンドポイントのプロトコルをHTTPSに設定します。

  • 次のサンプルコードを使用して生成された署名付きURLには、プラス記号 (+) が含まれる場合があります。 この場合、URLのプラス記号 (+) を % 2Bに置き換えます。 そうでない場合、署名付きURLを使用してオブジェクトにアクセスすることはできません。

次のサンプルコードでは、署名付きURLを生成し、署名付きURLを使用してオブジェクトをアップロードおよびダウンロードする方法の例を示します。 署名付きURLを使用して一時的なアクセスを許可するために使用できる完全なサンプルコードについては、GitHubをご覧ください。

署名付きURLを生成し、署名付きURLを使用してローカルファイルをアップロード

  1. 署名付き URL の生成

    Aliyun.OSSを使用した
    
    Aliyun.OSS.Common; を使用
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
    var endpoint = " https://oss-cn-hangzhou.aliyuncs.com ";
    // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
    var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
    // バケットの名前を指定します。 例: examplebucket. 
    var bucketName = "examplebucket";
    // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
    var objectName = "exampledir/exampleobject.txt";
    var objectContent = "単なるクラウドではありません。";
    // OSSClientインスタンスを作成します。 
    var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
    トライ
    {
        // Generate the signed URL. 
        var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Put)
        {
            // 署名付きURLの有効期間を指定します。 デフォルト値は 3600 です。 単位は秒です。 
            Expiration = DateTime.Now.AddHours(1),
        };
        var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest);
    }
    キャッチ (OssException ex)
    {
        Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、
            ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
    }
    キャッチ (例外ex)
    {
        Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
    } 
  2. 署名付きURLを使用してローカルファイルをアップロードする

    Androidモバイルデバイス用のOSS SDKを参照できます。 詳細については、「署名付きURLを使用したオブジェクトのアップロード」をご参照ください。

署名付きURLを生成し、署名付きURLを使用してオブジェクトをダウンロード

  1. 署名付き URL の生成

    Aliyun.OSSを使用した
    
    Aliyun.OSS.Common; を使用
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
    var endpoint = " https://oss-cn-hangzhou.aliyuncs.com ";
    // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
    var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
    // バケットの名前を指定します。 例: examplebucket. 
    var bucketName = "examplebucket";
    // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
    var objectName = "exampledir/exampleobject.txt";
    // オブジェクトをダウンロードするローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 同じ名前のファイルがすでにパスに存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。 それ以外の場合、ダウンロードされたオブジェクトはパスに保存されます。 
    var downloadFilename = "D :\\ localpath\\examplefile.txt";
    // OSSClientインスタンスを作成します。 
    var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
    トライ
    {
        var metadata = client.GetObjectMetadata(bucketName, objectName);
        var etag = metadata.ETag;
        // 署名付きURLを生成します。 
        var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get)
          {
            // 署名付きURLの有効期間を指定します。 デフォルト値は 3600 です。 単位は秒です。 
            Expiration = DateTime.Now.AddHours(1),
        };
        var uri = client.GeneratePresignedUri(req);
    }
    キャッチ (OssException ex)
    {
        Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、
            ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
    }
    キャッチ (例外ex)
    {
        Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
    } 
  2. 署名付きURLを使用してオブジェクトをダウンロードする

    Androidモバイルデバイス用のOSS SDKを参照できます。 詳細については、「署名付きURLを使用したオブジェクトのダウンロード」をご参照ください。