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

Object Storage Service:モバイルアプリケーションの直接データ転送を設定する

最終更新日:Jul 02, 2025

このトピックでは、Security Token Service (STS) を使用して、30分以内にモバイルアプリケーションの直接データ転送サービスを設定する方法について説明します。 このサービスを使用すると、モバイルアプリケーションを Object Storage Service (OSS) に直接接続し、モバイルアプリケーションから OSS にデータをアップロードしたり、OSS からモバイルアプリケーションにデータをダウンロードしたりできます。 アプリケーションサーバーを使用して、STS から取得した認証情報のみを管理する必要があります。 これにより、データ転送の効率とセキュリティが確保されます。

メリット

モバイルインターネット時代には、モバイルアプリケーションを使用して大量のデータがアップロードされます。 OSS ベースのモバイルアプリケーションの直接データ転送には、次の利点があります。OSS ベースのモバイルアプリケーションの直接データ転送には、次の利点があります。

  • データセキュリティ: OSS を使用すると、モバイルアプリケーションは柔軟な権限管理メカニズムに基づいてデータをアップロードおよびダウンロードできます。 これにより、データセキュリティが向上します。

  • 費用対効果: 少数のアプリケーションサーバーが必要です。 これにより、コストを削減できます。 モバイルアプリケーションは、データのアップロードとダウンロードのために OSS に接続され、制御フローのみがアプリケーションサーバーに送信されます。

  • 高同時実行性: OSS は、多数のユーザーから送信される同時アクセスリクエストをサポートし、ユーザーエクスペリエンスを保証します。

  • 柔軟なスケーラビリティ: OSS は、ビジネスの成長の要件を満たすために、無制限でスケーラブルなストレージ容量を提供します。

  • データ処理: OSS は、画像処理 (IMG) とオーディオおよびビデオトランスコードをサポートしており、ユーザーは柔軟な方法でデータを処理できます。

前提条件

プロセス

次の図は、モバイルアプリケーションの直接データ転送サービスの開発プロセスを示しています。

image

手順:

  1. Android または iOS アプリケーションは、アプリケーションサーバーから一時的なアクセス認証情報をリクエストします。

    説明

    セキュリティ上の懸念から、AccessKey ペアを Android および iOS アプリケーションに保存することはできません。 この場合、アプリケーションは、アプリケーションサーバーから STS を使用してセキュリティトークンをリクエストできます。 セキュリティトークンは、特定の期間有効です。 アプリケーションサーバーが 30 分の有効期間を指定した場合、Android または iOS アプリケーションは、セキュリティトークンが発行されてから 30 分以内に、セキュリティトークンを使用して OSS にデータをアップロードしたり、OSS からデータをダウンロードしたりできます。 30 分後、アプリケーションは新しいセキュリティトークンをリクエストして、データをアップロードまたはダウンロードする必要があります。

  2. アプリケーションサーバーは、STS SDK を使用して AssumeRole 操作を呼び出し、セキュリティトークンを取得します。

  3. STS はセキュリティトークンを生成し、アプリケーションサーバーに返します。

  4. アプリケーションサーバーは、セキュリティトークンをクライアントに返します。

  5. Android または iOS アプリケーションは、OSS SDK を使用して、セキュリティトークンを使用して OSS にオブジェクトをアップロードします。

  6. OSS は、成功応答をクライアントに返します。

手順

ステップ 1: STS をアクティブ化し、アプリケーションサーバーを設定する

1. RAM コンソールで RAM ユーザーを作成する

RAM ユーザーを作成し、RAM ユーザーの AccessKey ペアを取得します。 AccessKey ペアは、アプリケーションサーバーにアクセスして管理するために必要な長期アクセス認証情報です。

  1. Alibaba Cloud アカウントまたはアカウント管理者として RAM コンソール にログオンします。

  2. 左側のナビゲーションウィンドウで、[Identities] > [Users] を選択します。

  3. [ユーザー] ページで、[ユーザーの作成] をクリックします。

  4. [ログオン名] パラメーターと [表示名] パラメーターを設定します。

  5. [アクセスモード] セクションで、[永続 Accesskey を使用してアクセスする] を選択し、[OK] をクリックします。

    重要

    RAM ユーザーの AccessKey シークレットは、RAM ユーザーの作成時にのみ取得できます。 認証情報の漏洩を防ぐため、AccessKey シークレットを安全に保管する必要があります。

  6. 表示されるページの [アクション] 列にある [コピー] をクリックして、AccessKey ペアをコピーし、安全に保管されたファイルに貼り付けます。

2. RAM コンソールで、RAM ユーザーに AssumeRole 操作を呼び出す権限を付与する

RAM ユーザーに AssumeRole 操作を呼び出す権限を付与します。 これにより、RAM ユーザーは RAM ロールをアシュームすることで一時的なアクセス認証情報を取得できます。

  1. 左側のナビゲーションウィンドウで、[Identities] > [Users] を選択します。

  2. [ユーザー] ページで RAM ユーザーを見つけ、[アクション] 列の [権限の追加] をクリックします。

  3. [権限の付与] パネルの [ポリシー] セクションで、[aliyunstsassumeroleaccess] システムポリシーを選択します。

    説明

    AliyunSTSAssumeRoleAccess ポリシーにより、RAM ユーザーは AssumeRole 操作を呼び出すことができます。 ポリシーの権限は、RAM ユーザーが STS から一時的なアクセス認証情報を取得し、OSS にリクエストを開始するために必要な権限とは無関係です。

  4. [権限の付与] をクリックします。

3. RAM コンソールで RAM ロールを作成する

Alibaba Cloud アカウントの RAM ロールを作成し、RAM ロールの Alibaba Cloud リソースネーム (ARN) を取得します。 RAM ロールは、後で RAM ユーザーによってアシュームされます。

  1. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

  2. [ロールの作成] をクリックします。 [ロールの作成] ウィザードで、[信頼できるエンティティの選択] を [alibaba Cloud アカウント] に設定し、[次へ] をクリックします。

  3. [ロールの設定] ステップで、[RAM ロールの名前] フィールドに名前を入力し、[信頼できる Alibaba Cloud アカウントの選択] を [現在の Alibaba Cloud アカウント] に設定します。

  4. [OK] をクリックします。 ロールを作成した後、[閉じる] をクリックします。

  5. [ロール] ページで、検索ボックスにロール名を入力します。 例: oss-web-upload。 ロールの名前をクリックします。

  6. [基本情報] セクションで、[ARN] フィールドの横にある [コピー] をクリックして、RAM ロールの ARN を記録します。

4. RAM コンソールでアップロード用のポリシーを作成する

最小権限の原則に基づいてカスタムポリシーを作成します。 カスタムポリシーは、RAM ロールに特定のバケットにのみデータをアップロードする権限を付与します。

  1. 左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。

  2. [ポリシー] ページで、[ポリシーの作成] をクリックします。

  3. [ポリシーの作成] ページで、[JSON] をクリックします。 次のサンプルスクリプトをコピーしてコードエディターに貼り付けます。 <BucketName> を、作成したバケットの名前である web-direct-upload に置き換えます。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:PutObject",
          "Resource": "acs:oss:*:*:<BucketName>/*"
        }
      ]
    }
  4. ポリシーを設定した後、[ポリシー情報を編集するために次へ] をクリックします。

  5. [基本情報] セクションで、ポリシー名を指定し、[OK] をクリックします。

5. RAM コンソールでカスタムポリシーを RAM ロールにアタッチする

カスタムポリシーを RAM ロールにアタッチします。 これにより、RAM ロールがアシュームされたときに、RAM ロールは必要な権限を提供できます。

  1. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

  2. [ロール] ページで RAM ロールを見つけ、[アクション] 列の [権限の付与] をクリックします。

  3. [権限の付与] パネルの [ポリシー] セクションで、ドロップダウンリストから [カスタムポリシー] を選択し、カスタムポリシーを選択します。

  4. [OK] をクリックします。

6. アプリケーションサーバーとして ECS インスタンスを作成する

STS から一時的なアクセス認証情報を取得するために ECS インスタンスを作成します。

説明

実際のデプロイシナリオでは、ECS インスタンスを作成せずに、STS API 操作をアプリケーションサーバーに統合できます。

パラメーター

課金方法

従量課金制

リージョン

中国 (杭州)

パブリック IP アドレス

パブリック IPv4 アドレスを割り当てる

セキュリティグループ

HTTP-TCP:80-open

詳細については、「ECS インスタンスを作成する」をご参照ください。

7. アプリケーションサーバーから一時的なアクセス認証情報を取得する

STS SDK をアプリケーションサーバーに統合して、/get_sts_token 操作を取得し、STS から一時的なアクセス認証情報を取得します。 HTTP GET メソッドを使用して /get_sts_token 操作が呼び出されると、一時的なアクセス認証情報が作成され、リクエスト元に返されます。

ECS インスタンスで、Flask フレームワークを使用して Web アプリケーションを構築し、STS から一時的なアクセス認証情報を取得する操作を実装します。

  1. ECS インスタンスに接続します。

    詳細については、「インスタンスに接続する」をご参照ください。

  2. Python 3 をインストールします。

  3. プロジェクトディレクトリを作成し、プロジェクトディレクトリに切り替えます。 サンプルコマンド:

    mkdir my_web_sample
    cd my_web_sample
  4. 次のコマンドを実行して依存関係をインストールします。

    pip3 install Flask
    pip3 install attr
    pip3 install yarl
    pip3 install async_timeout
    pip3 install idna_ssl
    pip3 install attrs
    pip3 install aiosignal
    pip3 install charset_normalizer
    pip3 install alibabacloud_tea_openapi
    pip3 install alibabacloud_sts20150401
    pip3 install alibabacloud_credentials
  5. アプリケーションバックエンドコードを記述します。

    1. main.py ファイルを作成します。

    2. 次の Python コードをファイルに書き込みます。

      import json
      from flask import Flask, render_template
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_sts20150401.client import Client as Sts20150401Client
      from alibabacloud_sts20150401 import models as sts_20150401_models
      from alibabacloud_credentials.client import Client as CredentialClient
      
      app = Flask(__name__)
      
      # <YOUR_ROLE_ARN> を RAM ロールの ARN に置き換えます。
      role_arn_for_oss_upload = '<YOUR_ROLE_ARN>'
      # STS のリージョンを指定します。 例: cn-hangzhou
      region_id = 'cn-hangzhou'
      
      @app.route("/")
      def hello_world():
          return render_template('index.html')
      
      @app.route('/get_sts_token', methods=['GET'])
      def get_sts_token():
          # CredentialClient の初期化時にパラメーターを指定しない場合、デフォルトの認証情報チェーンが使用されます。
          # ローカルコンピューターでプログラムを実行する場合、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数から AccessKey ペアを取得できます。
          # ECS または Elastic Container Instance でプログラムを実行する場合、ALIBABA_CLOUD_ECS_METADATA 環境変数を設定することで、バインドされたインスタンスのロールを指定できます。 SDK は STS から一時的なアクセス認証情報を自動的に取得します。
          config = Config(region_id=region_id, credential=CredentialClient())
          sts_client = Sts20150401Client(config=config)
          assume_role_request = sts_20150401_models.AssumeRoleRequest(
              role_arn=role_arn_for_oss_upload,
              # <YOUR_ROLE_SESSION_NAME> をカスタムセッションの名前に置き換えます。
              role_session_name='<YOUR_ROLE_SESSION_NAME>'
          )
          response = sts_client.assume_role(assume_role_request)
          token = json.dumps(response.body.credentials.to_map())
          return token
      app.run(host="127.0.0.1", port=8000)  # 他のアドレス (0.0.0.0 など) でリッスンするには、サーバー側で認証メカニズムを実装する必要があります。
      
    3. サンプルコードの <YOUR_ROLE_ARN> を、ステップ 3 で作成した RAM ロールの ARN に置き換えます。

    4. サンプルコードの <YOUR_ROLE_SESSION_NAME> をカスタムセッションの名前に置き換えます。

  6. ステップ 1 で取得した AccessKey ペアを使用してアプリケーションを起動します。

    ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR_AK_ID> ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR_AK_SECRET> python3 main.py
  7. ブラウザのアドレスバーに http://<ECS-public-IP-address>/get_sts_token と入力します。

    成功応答の例:

    sts token.png

  8. Ctrl+C を押してアプリケーションを停止します。

ステップ 2: モバイルアプリケーションをダウンロードしてインストールする

Android

  1. モバイルアプリケーションの ソースコードパッケージ をダウンロードします。

    Android または iOS デバイスでモバイルアプリケーションを使用して、画像を OSS にアップロードできます。 シンプルなアップロードと再開可能なアップロードがサポートされています。 ネットワーク品質が悪い場合は、再開可能なアップロードを使用することをお勧めします。 また、IMG を使用して画像のサイズを変更し、サムネイルを取得したり、画像にウォーターマークを追加したりすることもできます。

  2. モバイルアプリケーションを開き、アプリケーションパラメーターを設定します。

    1. STS 認証サーバー: ステップ 1 の出力情報にあるアプリケーションサーバーのアドレス。

    2. デスティネーションバケット: モバイルアプリケーションからデータをアップロードするバケット。

    3. リージョン: デスティネーションバケットが配置されているリージョン。

  3. [設定] をクリックします。

iOS

  1. モバイルアプリケーションの ソースコードパッケージ をダウンロードします。

    Android または iOS デバイスでモバイルアプリケーションを使用して、画像を OSS にアップロードできます。 シンプルなアップロードと再開可能なアップロードがサポートされています。 ネットワーク品質が悪い場合は、再開可能なアップロードを使用することをお勧めします。 また、IMG を使用して画像のサイズを変更し、サムネイルを取得したり、画像にウォーターマークを追加したりすることもできます。

  2. モバイルアプリケーションを開き、アプリケーションパラメーターを設定します。

    AliyunOSSSDK を実行する前に、OSSTestMacros.h ファイルに必要なパラメーターを設定する必要があります。 必要なパラメーターには、OSS_BUCKET_PRIVATE、OSS_ENDPOINT、OSS_STSTOKEN_URL が含まれます。 OSS_STSTOKEN_URL を、ステップ 1 でデプロイされたアプリケーションサーバーのアドレスに設定します。

    image

  3. インスタンスを実行します。

ステップ 3: モバイルアプリケーションの直接データ転送を設定する

  1. OSS オブジェクトの名前を指定します。 [アップロード] をクリックし、アップロードする画像を選択します。

  2. 画像がアップロードされた後、OSS コンソールでアップロード結果を確認します。