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

Object Storage Service:RAM ポリシーによる OSS アクセスの制御

最終更新日:May 01, 2026

このトピックでは、企業のユースケースを例に、OSS バケット、ディレクトリ、オブジェクトに対する詳細な権限付与の構成方法について説明します。OSS のフラットなストレージモデルおよびプレフィックスに基づく一覧表示がポリシー構成に与える影響や、異なる RAM ユーザーに対して特定のディレクトリレベルの権限を付与する方法を学びます。

ストレージ構造と権限付与

OSS ストレージモデル

OSS はフラットなストレージモデルを使用して、オブジェクトをキーと値のペアとして保存します。すべてのオブジェクトは直接バケットに属しており、物理的なディレクトリ階層は存在しません。コンソールに表示される「ディレクトリ」は、オブジェクトキーのプレフィックスとデリミタ (/) を使用してフォルダ階層をシミュレートすることで実現されています。この機能により、ファイルをグループ化・分類・管理できます。

バケット examplebucket について、コンソールに表示されるディレクトリ構造と対応するオブジェクトキーは次のとおりです。

examplebucket
├── Development/                     # Key: Development/ (directory object)
│   ├── Alibaba Cloud.pdf            # Key: Development/Alibaba Cloud.pdf
│   ├── ProjectA.docx                # Key: Development/ProjectA.docx
│   └── ProjectB.docx                # Key: Development/ProjectB.docx
├── Marketing/                       # Key: Marketing/ (directory object)
│   ├── data2020.xlsx                # Key: Marketing/data2020.xlsx
│   └── data2021.xlsx                # Key: Marketing/data2021.xlsx
├── Private/                         # Key: Private/ (directory object)
│   └── 2017/                        # Key: Private/2017/ (directory object)
│       ├── images.zip               # Key: Private/2017/images.zip
│       └── promote.pptx             # Key: Private/2017/promote.pptx
└── oss-dg.pdf                       # Key: oss-dg.pdf

ディレクトリオブジェクトのキーは / で終わります。これにより、OSS はそのオブジェクトを「ディレクトリ」として認識します。実際のストレージシステムでは、ディレクトリオブジェクトを含むすべてのオブジェクトがフラットな構造で保存されています。

OSS には真のディレクトリ階層が存在しないため、「ディレクトリ」へのアクセス権限を付与する場合、実際には特定のプレフィックスを持つすべてのオブジェクトへのアクセス権限を付与することになります。たとえば、Development/ ディレクトリへのアクセスを許可することは、キーが Development/ で始まるすべてのオブジェクトへのアクセスを許可することと同等です。

バケット、ディレクトリ、オブジェクトのリクエストの違い

操作対象によって必要な API リクエストおよび Resource 構成が異なります。これらの違いを理解することが、ポリシーを正しく構成するための鍵となります。

ListObjects リクエストの仕組み

コンソールは、GetBucket (ListObjects) API オペレーションの次の 2 つのパラメーターを使用して、ディレクトリのような構造を表示します。

パラメーター

説明

prefix

応答を、指定されたプレフィックスで始まるキーを持つオブジェクトのみに制限します。

Development/

delimiter

オブジェクトをグループ化するための文字で、通常は / を使用します。

/

ユーザーがコンソールで Development/ フォルダをクリックすると、コンソールは OSS に次のリクエストを送信します。

GET /?prefix=Development/&delimiter=/ HTTP/1.1
Host: examplebucket.oss-cn-hangzhou.aliyuncs.com

OSS は Development/ で始まるすべてのオブジェクトを返します。delimiter=/ が指定されているため、OSS はサブディレクトリ(例:Development/SubFolder/)を CommonPrefixes として返し、それらの中にあるすべてのファイルを一覧表示しません。

リソース構成

操作対象

呼び出される API

Resource 構成

ポリシー構成のポイント

バケットのルートディレクトリの一覧表示

ListObjects(prefix は空、delimiter は /

acs:oss:*:*:examplebucket

Resource は特定のパスではなく、バケット自体を指します。

ディレクトリを入力してください

ListObjects(prefix は folder_name/、delimiter は /

acs:oss:*:*:examplebucket

Resource は特定のパスではなくバケット自体を指し、oss:Prefix 条件により一覧表示可能なオブジェクトの範囲を制限します。

ファイル内容の読み取りおよび書き込み

GetObjectPutObject

acs:oss:*:*:examplebucket/directory_name/*

Resource はパスまで指定可能で、ワイルドカード * をサポートします。

コンソールと API/SDK アクセスの違い

OSS にコンソールからアクセスする場合、バケット一覧から目的のディレクトリへナビゲートする必要があります。このため、直接 API や SDK を呼び出す場合よりも多くの権限が必要です。

アクセス方法

必要な権限

API/SDK

目的のリソースに対する権限(例:oss:GetObject)のみが必要です。

コンソール

目的のリソースに対する権限に加え、oss:ListBuckets(バケット一覧の表示用)や oss:GetBucketInfo(バケット情報の表示用)などの補助的な権限も必要です。

シナリオ

バケット examplebucket 内のすべてのファイルのデフォルト ACL(アクセスコントロールリスト)が非公開であると仮定します。バケット構造は次のとおりです。

examplebucket
├── Development/           # Development directory
│   ├── Alibaba Cloud.pdf
│   ├── ProjectA.docx
│   └── ProjectB.docx
├── Marketing/             # Marketing directory
│   ├── data2020.xlsx
│   └── data2021.xlsx
├── Private/               # Confidential directory
│   └── 2017/
│       ├── images.zip
│       └── promote.pptx
└── oss-dg.pdf

アクセスの制御の目的は次のとおりです。

RAM ユーザー/ユーザーグループ

権限付与対象

権限タイプ

RAM ユーザー Anne

Development/ フォルダおよびその配下のすべてのファイル

読み書き

RAM ユーザー Leo

Marketing/ フォルダおよびその配下のすべてのファイル

読み取り専用

特定のユーザーグループのすべてのメンバー

Private/ ディレクトリおよびその配下のすべてのファイル

アクセス拒否

手順 1:バケットの作成とオブジェクトのアップロード

  1. バケット一覧に移動し、バケットの作成 をクリックして、examplebucket のようなバケットを作成します。

  2. バケット内で、ディレクトリの作成 をクリックして、DevelopmentMarketing、および Private(さらに Private 配下にサブディレクトリ 2017 を作成)します。

  3. アップロード をクリックして、次のパスにオブジェクトをアップロードします。

    • ルートディレクトリ:oss-dg.pdf

    • Development/ ディレクトリ:Alibaba Cloud.pdfProjectA.docxProjectB.docx

    • Marketing/ ディレクトリ:data2020.xlsxdata2021.xlsx

    • Private/2017/ ディレクトリ:images.zippromote.pptx

手順 2:RAM ユーザー Anne および Leo の作成

RAM コンソールのユーザーページに移動し、ユーザーの作成 をクリックして、ユーザー Anne および Leo を作成します。

手順 3:Development ディレクトリへの読み書きアクセスの付与

ポリシー設計

Development/ フォルダへの読み書きアクセスを有効にするには、次の 2 種類の権限を付与する必要があります。

  1. 一覧表示権限Development/ フォルダ内のオブジェクトを一覧表示できる権限(oss:ListObjects)。ここで Condition を使用して、Development プレフィックスで始まるオブジェクトのみを一覧表示できるように制限します。

  2. 読み書き権限Development/ ディレクトリ内のファイルを読み取ったりアップロードしたりできる権限(oss:GetObjectoss:PutObject)。Resource は examplebucket/Development/* に設定します。

ポリシーの作成とアタッチ

  1. RAM コンソールのポリシーページに移動し、ポリシーの作成 をクリックします。

  2. JSON タブで、次のポリシードキュメントを入力します。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:ListObjects",
          "Resource": "acs:oss:*:*:examplebucket",
          "Condition": {
            "StringLike": {
              "oss:Prefix": [
                "Development",
                "Development/*"
              ]
            }
          }
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject",
            "oss:PutObject",
            "oss:GetObjectAcl"
          ],
          "Resource": "acs:oss:*:*:examplebucket/Development/*"
        }
      ]
    }

    ポリシー分析

    • 最初のステートメント:Resource をバケット自体に設定し、Condition ブロックの oss:Prefix 条件を使用して、Development ディレクトリおよびそのサブディレクトリ内の一覧表示を許可します。

    • 2 番目のステートメント:読み取りおよび書き込み権限を付与し、Resource を Development/* パス内のすべてのオブジェクトに指定します。

  3. OK をクリックし、ポリシー名(例:AllowAnneAccessDevelopment)を入力して、OK をクリックして作成を完了します。

  4. ユーザーページに移動し、RAM ユーザー Anne を見つけて、新しく作成したポリシーをアタッチして権限を追加します。

手順 4:Marketing ディレクトリへの読み取り専用アクセスの付与

手順 3 と同様のプロシージャに従って、RAM ユーザー Leo 用の読み取り専用ポリシーを作成およびアタッチします。このポリシーは読み書きポリシーと似ていますが、Action 要素には読み取り関連の操作のみが含まれます。ポリシードキュメントは次のとおりです。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:ListObjects",
      "Resource": "acs:oss:*:*:examplebucket",
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "Marketing",
            "Marketing/*"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject",
        "oss:GetObjectAcl"
      ],
      "Resource": "acs:oss:*:*:examplebucket/Marketing/*"
    }
  ]
}

oss:PutObject を Action から削除することで、Leo はファイルを読み取ることしかできず、アップロードや変更はできません。

手順 5:Private ディレクトリへのアクセス拒否

Private/ フォルダへのアクセスを防止したい RAM ユーザーを同じユーザーグループにまとめて、そのユーザーグループに対して拒否ポリシーを構成することで、権限を一元的に管理します。

説明

この方法は、ユーザーグループのメンバーである RAM ユーザーにのみ適用されます。今後作成されるものを含むアカウント内のすべての RAM ユーザーに対してこのルールを強制するには、バケットポリシー を使用してリソース側で拒否ポリシーを構成することを推奨します。

ユーザーグループの作成とメンバーの追加

  1. RAM ユーザグループリストに移動し、[ユーザグループの作成] をクリックします(例:DenyPrivateAccessGroup)。

  2. グループメンバーの追加 をクリックし、Private/ フォルダへのアクセスを拒否する必要がある RAM ユーザーをユーザーグループに追加します。

拒否ポリシーの作成とアタッチ

  1. RAM コンソールのポリシーページに移動し、ポリシーの作成 をクリックします。

  2. JSON タブで、次のポリシードキュメントを入力します。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": "oss:*",
          "Resource": "acs:oss:*:*:examplebucket/Private/*"
        },
        {
          "Effect": "Deny",
          "Action": "oss:ListObjects",
          "Resource": "acs:oss:*:*:examplebucket",
          "Condition": {
            "StringLike": {
              "oss:Prefix": [
                "Private/",
                "Private/*"
              ]
            }
          }
        }
      ]
    }

    ポリシー分析

    • 最初のステートメントPrivate/ パス配下のすべてのファイルに対するあらゆる操作を拒否します。

    • 2 番目のステートメントPrivate/ フォルダの内容を一覧表示することを拒否し、ユーザーがファイル一覧を表示できないようにします。

  3. OK をクリックし、ポリシー名(例:DenyAccessPrivateFolder)を入力して、OK をクリックして作成を完了します。

  4. グループページに移動し、ユーザーグループを見つけて、先ほど作成したポリシーをアタッチして権限を追加します。

ユーザーグループに所属する RAM ユーザーがファイルの一覧表示やダウンロードによって Private/ フォルダにアクセスしようとすると、OSS は権限拒否のエラー応答を返します。

関連ドキュメント