このドキュメントでは、上海リージョンの app-base-oss バケットを例として、モバイルアプリケーション用の直接データ転送の設定で説明したアプリケーションサーバーに基づき、さまざまな許可制御を実装するための各種ポリシーを構成する方法を詳しく説明します。
  • 次の図は、ユーザーが STS を既にアクティブ化しており、「Set up direct data transfer for mobile apps」のドキュメントをよくお読みになっていることを前提としています。

  • 次の内容で言及されているポリシーは、前のセクションで説明した "config.json" ファイルで指定されているポリシーファイル中に記述されています。

  • STS トークンを取得している際の OSS の操作は、アプリサーバーのポリシーを指定するプロセス、STS からアプリサーバーが一時的な資格情報を取得するプロセス、および OSS にアクセスするため一時的な資格情報を使用するアプリを示しています。

一般的なポリシー

  • 完全な権限付与ポリシー

    説明を簡単にするために、既定のポリシーを次のように示します。 このポリシーは、アプリが OSS ですべての操作を実行できることを示します。

    このポリシーは安全に使用できないので、使用しないことを推奨します。
    {
        "Statement": [
          {
            "Action": [
              "oss:*"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:*"]
          }
        ],
        "Version": "1"
      }
    STS トークン取得時の OSS 上での操作 結果
    作成したすべてのバケットの一覧表示 成功
    プレフィックス test.txt を付けずにオブジェクトをアップロード 成功
    プレフィックス test.txt を付けずにオブジェクトをダウンロード 成功
    オブジェクトにプレフィックス user1/test.txt を付けてアップロード 成功
    プレフィックス user1/test.txt を付けてオブジェクトをダウンロード 成功
    プレフィックス test.txt を付けずにオブジェクトを一覧表示 成功
    プレフィックス user1/test.txt を付けてオブジェクトを一覧表示 成功
  • プレフィックスの有無を問わない読み取り専用ポリシー

    このポリシーは、アプリがバケット app-base-oss 内のすべてのオブジェクトを一覧表示およびダウンロードできることを示します。

    {
          "Statement": [
            {
              "Action": [
                "oss:GetObject",
                "oss:ListObjects"
              ],
              "Effect": "Allow",
              "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
            }
          ],
          "Version": "1"
        } 
    STS トークン取得時の OSS 上での操作 結果
    作成したすべてのバケットの一覧表示 失敗
    プレフィックス test.txt を付けずにオブジェクトをアップロード 失敗
    プレフィックス test.txt を付けずにオブジェクトをダウンロード 成功
    オブジェクトにプレフィックス user1/test.txt を付けてアップロード 失敗
    プレフィックス user1/test.txt を付けてオブジェクトをダウンロード 成功
    プレフィックス test.txt を付けてオブジェクトを一覧表示 成功
    プレフィックス user1/test.txt を付けてオブジェクトを一覧表示 成功
  • 指定されたプレフィックスを持つ読み取り専用ポリシー

    このポリシーは、アプリがバケット ** app-base-oss ** のプレフィックス **user1/** を持つすべてのオブジェクトを一覧表示およびダウンロードできることを示します。 ただし、このポリシーでは、別のプレフィックスを持つオブジェクトをダウンロードすることは指定されていません。 このようにして、さまざまプレフィックスに対応する各種アプリがバケット内で空間的に分離されます。

    {
        "Statement": [
          {
            "Action": [
              "oss:GetObject",
              "oss:ListObjects"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    STS トークン取得時の OSS 上での操作 結果
    作成したすべてのバケットの一覧表示 失敗
    プレフィックス test.txt を付けずにオブジェクトをアップロード 失敗
    プレフィックス test.txt を付けずにオブジェクトをダウンロード 失敗
    プレフィックス user1/test.txt を付けてオブジェクトをアップロード 失敗
    プレフィックス user1/test.txt を付けてオブジェクトをダウンロード 成功
    プレフィックス test.txt を付けずにオブジェクトを一覧表示 成功
    プレフィックス test.txt を付けてオブジェクトを一覧表示 成功
  • プレフィックスが指定されていない書き込み専用ポリシー

    このポリシーは、アプリがバケット app-base-oss 内のすべてのオブジェクトをアップロードできることを示します。

    {
        "Statement": [
          {
            "Action": [
              "oss:PutObject"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    STS トークン取得時の OSS 上での操作 結果
    作成したすべてのバケットの一覧表示 失敗
    プレフィックス test.txtを付けずにオブジェクトをアップロード 成功
    プレフィックス test.txt を付けずにオブジェクトをダウンロード 失敗
    プレフィックス user1/test.txt を付けてオブジェクトをアップロード 成功
    プレフィックス user1/test.txt を付けてオブジェクトをダウンロード 成功
    プレフィックス test.txt を付けずにオブジェクトを一覧表示 成功
    プレフィックス user1/test.txt を付けてオブジェクトを一覧表示 成功
  • 指定されたプレフィックスを持つ書き込み専用ポリシー

    このポリシーは、アプリがバケット app-base-oss の user1/ プレフィックスを持つすべてのオブジェクトをアップロードできることを示します。 アプリは別のプレフィックスを持つオブジェクトをアップロードすることはできません。 このように、異なるプレフィックスに対応する異なるアプリは、バケット内で空間的に分離されています。

    {
        "Statement": [
          {
            "Action": [
              "oss:PutObject"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    STS トークン取得時の OSS 上での操作 結果
    作成したすべてのバケットの一覧表示 失敗
    プレフィックス test.txt を付けずにオブジェクトをアップロード 失敗
    プレフィックス test.txt を付けずにオブジェクトをダウンロード 失敗
    プレフィックス user1/test.txt を付けてオブジェクトをアップロード 成功
    プレフィックス user1/test.txt を付けてオブジェクトをダウンロード 失敗
    プレフィックス test.txt を付けずにオブジェクトを一覧表示 失敗
    プレフィックス test.txt を付てオブジェクトを一覧表示 失敗
  • プレフィックスの有無を問わない読み取り/書き込みポリシー

    このポリシーは、バケット app-base-oss 内にあるすべてのオブジェクトをアプリが一覧表示、ダウンロード、アップロード、および削除できることを示しています。

    {
        "Statement": [
          {
            "Action": [
              "oss:GetObject",
              "oss:PutObject",
              "oss:DeleteObject",
              "oss:ListParts",
              "oss:AbortMultipartUpload",
              "oss:ListObjects"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    STS トークン取得時の OSS 上での操作 結果
    作成したすべてのバケットの一覧表示 失敗
    プレフィックス test.txt を付けずにオブジェクトをアップロード 成功
    プレフィックス test.txt を付けずにオブジェクトをダウンロード 成功
    プレフィックス user1/test.txt を付けてオブジェクトをアップロード 成功
    プレフィックス user1/test.txt を付けてオブジェクトをダウンロード 成功
    プレフィックス test.txt を付けずにオブジェクトを一覧表示 成功
    プレフィックス test.txt を付けてオブジェクトを一覧表示 成功
  • 指定されたプレフィックスを持つ読み取り書き込みポリシー

    このポリシーは、バケット app-base-oss 内にあるすべての user1/ のプレフィックスを持つオブジェクトを、アプリが一覧表示、ダウンロード、アップロード、および削除できることを示しています。 このポリシーでは、別のプレフィックスを持つオブジェクトを読み書きすることは指定されていません。 このように、さまざまなプレフィックスに対応する各種アプリは、バケット内で空間的に分離されています。

    {
        "Statement": [
          {
            "Action": [
              "oss:GetObject",
              "oss:PutObject",
              "oss:DeleteObject",
              "oss:ListParts",
              "oss:AbortMultipartUpload",
              "oss:ListObjects"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    STS トークン取得時の OSS 上での操作 結果
    作成したすべてのバケットの一覧表示 失敗
    プレフィックス test.txtを付けずにオブジェクトをアップロード 失敗
    プレフィックス test.txt を付けずにオブジェクトをダウンロード 失敗
    プレフィックス user1/test.txt を付けてオブジェクトをアップロード 成功
    プレフィックス user1/test.txt を付けてオブジェクトをダウンロード 成功
    プレフィックス test.txt を付けずにオブジェクトを一覧表示 成功
    プレフィックス user1/test.txt を付けてオブジェクトを一覧表示 成功

結論

上記の例により、次のことがわかります。

  • 各種のアプリシナリオに対してそれぞれ異なるポリシーを作成し、アプリサーバー上で少しの変更を加えることで、各種のアプリに対してそれぞれ異なる権限管理を実現できます。
  • STS トークンが期限切れになる前にアプリを最適化して、アプリサーバーに別の要求を送信するプロセスを省くこともできます。
  • トークンは実際には STS によって発行されます。 アプリサーバーはポリシーをカスタマイズし、STS にトークンを要求してから、このトークンをアプリに配信します。 ここでは、トークンは単なる表現に過ぎません。 ”トークン” には、実際には “AccessKeyId”、”AccessKeySecret”、”Expiration” の値、および “SecurityToken” が含まれます。 これらは、OSS によってアプリに提供される SDK で使用されます。 詳しくは、それぞれの SDK の実装を参照してください。