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

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

最終更新日:Sep 03, 2026

RAM ポリシーを使用して、OSS のバケット、ディレクトリ、オブジェクトに対してきめ細かなアクセス制御を設定します。フラットストレージモデルとプレフィックスベースのリスト表示がポリシー設計に与える影響、および異なる 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 つのパラメーターを使用して、ディレクトリのような構造を表示します。

パラメーター

説明

値の例

プレフィックス

指定されたプレフィックスで始まるキーを持つオブジェクトのみをレスポンスに含めるように制限します。

Development/

デリミタ

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

/

コンソールで Development/ フォルダーをクリックすると、このリクエストが OSS に送信されます。

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

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

リソース構成

操作対象

トリガーされる API

リソース構成

ポリシー設定のポイント

バケットのルートディレクトリをリスト表示

ListObjects、prefix が空、delimiter が /

acs:oss:*:*:examplebucket

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

ディレクトリへのアクセス

prefix が folder_name/ で、delimiter が / の ListObjects

acs:oss:*:*:examplebucket

Resource は、パスではなくバケットを指します。oss:Prefix 条件は、一覧表示できる範囲を制限します。

ファイルコンテンツの読み取りと書き込み

GetObject、PutObject

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

リソースはパスまで指定でき、ワイルドカード * をサポートしています。

コンソールと API/SDK アクセスの比較

コンソール経由のアクセスでは、バケットリストからターゲットディレクトリまで移動する必要があるため、直接的な 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 ユーザー「アン」

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

読み取り/書き込み

RAM ユーザー「レオ」

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

読み取り専用

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

Private/ ディレクトリとそのすべてのファイル

アクセス拒否

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

  1. バケットリストに移動し、バケットの作成 から examplebucket などのバケットを作成します。

  2. バケットに、ディレクトリの作成 を使用して Development、Marketing、Private の各ディレクトリを作成します (Private の下にサブディレクトリ 2017 も作成します)。

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

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

    • Development/ ディレクトリ: Alibaba Cloud.pdf、ProjectA.docx、ProjectB.docx

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

    • Private/2017/ ディレクトリ: images.zip、 promote.pptx

ステップ2:RAM ユーザー「アン」と「レオ」の作成

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

ステップ3:Development ディレクトリへの読み取り/書き込みアクセスの付与

ポリシーの設計

Development/ への読み書きアクセスには、2 種類の権限が必要です:

  1. 一覧表示権限: 一覧表示を Development プレフィックスに制限する Condition 付きで、Development/ 内のオブジェクトを一覧表示します (oss:ListObjects)。

  2. 読み取り/書き込み権限: Development/ 内のファイルの読み取りとアップロード (oss:GetObject、oss:PutObject)。リソースは examplebucket/Development/* に設定されます。

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

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

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

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

    ポリシーの分析:

    • 最初のステートメント: Condition の oss:Prefix を使用して一覧表示を Development ディレクトリおよびサブディレクトリに制限することで、バケットに対するリスト権限を付与します。

    • 2 番目のステートメント: 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/*"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject",
        "oss:GetObjectAcl"
      ],
      "Resource": "acs:oss:*:*:examplebucket/Marketing/*"
    }
  ]
}

oss:PutObject がアクションから除外されているため、 Leo はファイルの読み取りはできますが、アップロードや変更はできません。

ステップ5:Private ディレクトリへのアクセスの拒否

Private/ フォルダーにアクセスすべきでない 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/ 配下のオブジェクトに対するすべての操作を拒否します。

    • 2番目のステートメント: Private/ コンテンツの一覧表示を拒否するため、ユーザーはファイル一覧を表示できなくなります。

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

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

グループメンバーが Private/ フォルダー内のファイルを一覧表示またはダウンロードしようとすると、OSS は権限拒否エラーを返します。

関連ドキュメント