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

Object Storage Service:RAM ポリシーを使用した OSS へのアクセスコントロール

最終更新日:Jan 22, 2026

このチュートリアルでは、ビジネスシナリオを用いて、OSS のバケット、フォルダ、ファイルに対する詳細なアクセス権限を設定する方法を説明します。OSS のフラットなストレージ構造とプレフィックスによる一覧表示の仕組みがポリシー設定にどのように影響するか、また、異なる Resource Access Management (RAM) ユーザーに対してフォルダレベルの読み取り/書き込み、読み取り専用、アクセス拒否の権限を付与する方法を学びます。

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

OSS のストレージモデル

OSS はフラットなストレージモデルを採用しており、オブジェクトはバケット内に直接キーと値のペアとして保存されます。物理的なディレクトリ階層は存在しません。コンソールで表示されるフォルダは、オブジェクトキーのプレフィックスと区切り文字 (/) を使用してシミュレートされたものです。これにより、オブジェクトをグループ化、分類、管理できます。

examplebucket バケットの場合、コンソールに表示されるフォルダ構造と対応するオブジェクトキーは次のようになります。

examplebucket
├── Development/                     # キー: Development/ (フォルダオブジェクト)
│   ├── Alibaba Cloud.pdf            # キー: Development/Alibaba Cloud.pdf
│   ├── ProjectA.docx                # キー: Development/ProjectA.docx
│   └── ProjectB.docx                # キー: Development/ProjectB.docx
├── Marketing/                       # キー: Marketing/ (フォルダオブジェクト)
│   ├── data2020.xlsx                # キー: Marketing/data2020.xlsx
│   └── data2021.xlsx                # キー: Marketing/data2021.xlsx
├── Private/                         # キー: Private/ (フォルダオブジェクト)
│   └── 2017/                        # キー: Private/2017/ (フォルダオブジェクト)
│       ├── images.zip               # キー: Private/2017/images.zip
│       └── promote.pptx             # キー: Private/2017/promote.pptx
└── oss-dg.pdf                       # キー: 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 として返します。

操作ごとの Resource 構成

操作対象

トリガーされる API

Resource 構成

ポリシー設定の要点

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

ListObjects (プレフィックスは空、デリミタは /)

acs:oss:*:*:examplebucket

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

フォルダに入る

ListObjects (プレフィックスは foldername/、デリミタは /)

acs:oss:*:*:examplebucket

Resource 要素は、特定のパスではなくバケット自体を指します。一覧表示可能な範囲は oss:Prefix 条件によって制限されます。

ファイルの内容を読み書きする

GetObjectPutObject

acs:oss:*:*:examplebucket/foldername/*

Resource 要素はパスを指定でき、ワイルドカード文字 * をサポートします。

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

コンソール経由で OSS にアクセスする場合、API や SDK を直接使用してアクセスするよりも多くの権限が必要です。これは、ユーザーがバケットリストから目的のフォルダに移動する必要があるためです。

アクセス方法

必要な権限

API/SDK

oss:GetObject など、対象リソースの操作に対する権限のみが必要です。

コンソール

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

シナリオ

examplebucket バケット内のすべてのオブジェクトのアクセス制御リスト (ACL) は、デフォルトで非公開に設定されているとします。バケットの構造は次のとおりです。

examplebucket
├── Development/           # 開発部門フォルダ
│   ├── Alibaba Cloud.pdf
│   ├── ProjectA.docx
│   └── ProjectB.docx
├── Marketing/             # マーケティング部門フォルダ
│   ├── data2020.xlsx
│   └── data2021.xlsx
├── Private/               # 機密フォルダ
│   └── 2017/
│       ├── images.zip
│       └── promote.pptx
└── oss-dg.pdf

アクセスコントロールの目標は次のとおりです。

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

権限付与の対象

権限の種類

RAM ユーザー Anne

Development/ フォルダとそのすべてのファイル

読み取り/書き込み権限

RAM ユーザー Leo

Marketing/ フォルダとそのすべてのファイル

読み取り専用権限

指定されたユーザーグループのすべてのメンバー

Private/ フォルダとそのすべてのファイル

アクセス拒否

ステップ 1:バケットの作成とファイルのアップロード

  1. バケットリストページに移動し、[バケットの作成] をクリックします。バケットに examplebucket という名前を付けます。

  2. バケット内で [フォルダの作成] をクリックして、DevelopmentMarketingPrivate フォルダを作成します。次に、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 の作成

ユーザーリストページに移動し、[ユーザーの作成] をクリックします。ユーザー Anne と Leo を作成します。

ステップ 3:Anne への Development フォルダに対する読み取り/書き込み権限の付与

ポリシー設計のアプローチ

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

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

  2. 読み取り/書き込み権限Development/ フォルダ内のファイルの読み取り (oss:GetObject) とアップロード (oss:PutObject) を許可します。Resource 要素は examplebucket/Development/* を指します。

ポリシーの作成と付与

  1. RAM ポリシーページに移動し、[ポリシーの作成] をクリックします。

  2. [スクリプトエディター] タブを選択し、次のポリシー内容を入力します。

    {
      "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/*"
        }
      ]
    }

    ポリシーの分析

    • 最初の Statement:バケットに対する一覧表示権限を付与します。oss:Prefix を持つ Condition は、一覧表示を Development フォルダとそのサブフォルダ内のコンテンツに制限します。

    • 2 番目の Statement:読み取り/書き込み権限を付与します。Resource は Development/* パス内のすべてのオブジェクトを指します。

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

  4. ユーザーリストページに移動します。RAM ユーザー Anne を見つけ、[権限の追加] をクリックし、作成したばかりのポリシーを選択します。

ステップ 4:Leo への 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 操作が削除されています。Leo はファイルの読み取りのみ可能で、アップロードや変更はできません。

ステップ 5:指定ユーザーグループへの Private フォルダに対するアクセス拒否

ユーザーグループを使用して権限を集中管理できます。Private/ フォルダへのアクセスを拒否すべき RAM ユーザーを同じユーザーグループに追加します。その後、そのグループに拒否ポリシーをアタッチします。

説明

この方法は、ユーザーグループのメンバーである RAM ユーザーにのみ適用されます。新規ユーザーを含むアカウント内のすべての RAM ユーザーのアクセスを拒否するには、バケットポリシーを使用してバケットに拒否ポリシーを設定する必要があります。

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

  1. RAM ユーザーグループページに移動し、[ユーザーグループの作成] をクリックします。たとえば、DenyPrivateAccessGroup という名前を付けます。

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

拒否ポリシーの作成と付与

  1. RAM ポリシーページに移動し、[ポリシーの作成] をクリックします。

  2. [スクリプトエディター] タブを選択し、次のポリシー内容を入力します。

    {
      "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/*"
              ]
            }
          }
        }
      ]
    }

    ポリシーの分析

    • 最初の StatementPrivate/ パス配下のすべてのオブジェクトに対するすべての操作を拒否します。

    • 2 番目の Statement:ユーザーがファイルリストを閲覧できないように、Private/ フォルダのコンテンツの一覧表示を拒否します。

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

  4. RAM ユーザーグループページに移動します。ユーザーグループに対して [権限の追加] をクリックし、作成したばかりのポリシーを選択します。

グループ内の RAM ユーザーが Private/ フォルダにアクセスしようとすると、ユーザーがファイルのリスト表示を試みているかダウンロードを試みているかに関わらず、OSS は権限拒否エラーを返します。

関連ドキュメント