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

Object Storage Service:RAM ポリシーを使用したアクセスの制御

最終更新日:May 01, 2025

このトピックでは、Resource Access Management (RAM) ポリシーを使用して、Object Storage Service (OSS) バケット、ディレクトリ、およびオブジェクトへのアクセスを制御する方法について説明します。

背景情報

RAM ポリシーは、ユーザーに基づいて構成される承認ポリシーです。 RAM ポリシーを構成して、従業員、システム、アプリケーションなどのユーザーを管理できます。 また、ユーザーがアクセスできるリソースを指定することもできます。 たとえば、ユーザーにバケットへの読み取り 権限のみを付与する RAM ポリシーを作成できます。

RAM ポリシーは JSON 形式です。 RAM ポリシーには、次のフィールドが含まれています。

  • Statement: 承認ステートメント。 RAM ポリシーには、複数の承認ステートメントを含めることができます。

  • Effect: RAM ポリシーの効果。 有効な値: Allow および Deny。

    説明

    RAM ポリシーに Allow ステートメントと Deny ステートメントの両方が含まれている場合、Deny ステートメントが Allow ステートメントよりも優先されます。

  • Action: リソースに対する承認された操作。

RAM ポリシーの生成には、RAM Policy Editor を使用することをお勧めします。 詳細については、「RAM Policy Editor」をご参照ください。

RAM ポリシーと比較して、バケットポリシーは OSS コンソールで構成できます。 バケットオーナーは、他のユーザーに OSS リソースへのアクセス 権限を付与できます。 詳細については、「バケットポリシーを構成して他のユーザーに OSS リソースへのアクセスを承認する」をご参照ください。

バケットとディレクトリ

OSS はフラットなデータモデル構造を使用します。 すべてのオブジェクトはバケットに格納されます。 階層型ファイルシステムで使用されるディレクトリとサブディレクトリは、OSS には存在しません。 ただし、OSS コンソールでディレクトリ階層をシミュレートして、オブジェクトをグループ化、分類、および管理できます。 次の図は、OSS コンソールのサンプルディレクトリを示しています。 ram

OSS は分散オブジェクトストレージ サービスであり、オブジェクトはキーと値のペアとして識別されます。 オブジェクト名に基づいてオブジェクトのコンテンツを取得できます。 たとえば、oss-dg.pdf という名前のオブジェクトと、次のディレクトリが examplebucket という名前のバケットに格納されています: DevelopmentMarketing、および Private

  • ディレクトリを作成すると、OSS コンソールはキーが DirectoryName/ 形式のオブジェクトを作成します。

  • オブジェクトをディレクトリにアップロードすると、OSS コンソールはオブジェクトのキーを DirectoryName/ObjectName 形式に設定します。

    キーでは、DirectoryName がプレフィックスであり、スラッシュ (/) がデリミタです。 バケット内の共通のプレフィックスとデリミタを共有するすべてのオブジェクトを一覧表示できます。 OSS コンソールでディレクトリをクリックすると、次の図に示すように、ディレクトリ内のオブジェクトが一覧表示されます。

    development

    説明

    examplebucket バケットの Development ディレクトリ内のオブジェクトを一覧表示するために、OSS コンソールは OSS にリクエストを送信して、指定されたプレフィックス Development とスラッシュ (/) デリミタを含む名前のオブジェクトを一覧表示します。 前の例では、次のキーを持つ 3 つのオブジェクトが examplebucket バケットに格納されています: Development/Alibaba Cloud.pdfDevelopment/ProjectA.docx、および Development/ProjectB.docx

このチュートリアルを開始する前に、ルートレベルのバケットコンテンツの概念を理解する必要があります。 たとえば、examplebucket バケットには次のオブジェクトが含まれています。

  • Development/Alibaba Cloud.pdf

  • Development/ProjectA.docx

  • Development/ProjectB.docx

  • Marketing/data2020.xlsx

  • Marketing/data2021.xlsx

  • Private/2017/images.zip

  • Private/2017/promote.pptx

  • oss-dg.pdf

これらのオブジェクトのキーは、DevelopmentMarketing、および Private ディレクトリをルートレベルのディレクトリとして、oss-dg.pdf をルートレベルのオブジェクトとする論理階層を決定します。 OSS コンソールでバケット名をクリックすると、Development/Marketing/Private/ など、複数のオブジェクトで共有される共通のプレフィックスとデリミタがルートレベルのディレクトリとして表示されます。 oss-dg.pdf オブジェクトにはプレフィックスがありません。 オブジェクトはルートレベルのオブジェクトとして表示されます。

ram

リクエストとレスポンス

RAM ユーザーに 権限を付与する前に、OSS コンソールが OSS とどのように対話するかを理解する必要があります。

  • バケットにアクセスするためのリクエストを送信する

    OSS コンソールで examplebucket バケットをクリックすると、OSS コンソールは GetBucket(ListObjects) リクエストを OSS に送信します。

    • リクエスト例

      GET /?prefix=&delimiter=/ HTTP/1.1
      Host: examplebucket.oss-cn-hangzhou.aliyuncs.com
      Date: Fri, 24 Feb 2012 08:43:27 GMT
      Authorization: OSS qn6q*******************:DNrn******************

      前のリクエストでは、prefix パラメーターの値は空のままになり、delimiter パラメーターの値はスラッシュ (/) です。

    • レスポンス例

      HTTP/1.1 200 OK
      x-oss-request-id: 534B371674E88A4D8906****
      Date: Fri, 7 Aug 2020 08:43:27 GMT
      Content-Type: application/xml
      Content-Length: 712
      Connection: keep-alive
      Server: AliyunOSS
      <?xml version="1.0" encoding="UTF-8"?>
      <ListBucketResult xmlns="http://doc.oss-cn-hangzhou.aliyuncs.com">
      <Name>examplebucket</Name>
      <Prefix></Prefix>
      <Marker></Marker>
      <MaxKeys>100</MaxKeys>
      <Delimiter>/</Delimiter>
          <IsTruncated>false</IsTruncated>
          <Contents>
              <Key>oss-dg.pdf</Key>
              ...
          </Contents>
         <CommonPrefixes>
              <Prefix>Development</Prefix>
         </CommonPrefixes>
            <CommonPrefixes>
              <Prefix>Marketing</Prefix>
         </CommonPrefixes>
            <CommonPrefixes>
              <Prefix>Private</Prefix>
         </CommonPrefixes>
      </ListBucketResult>
    • レスポンスの解析

      OSS コンソールは、OSS から返されたレスポンスを解析し、バケット内のルートレベルのオブジェクトとディレクトリを表示します。

      ram

  • バケット内のディレクトリにアクセスするためのリクエストを送信する

    OSS コンソールで examplebucket バケットの Development/ ディレクトリをクリックすると、OSS コンソールは GetBucket(ListObjects) リクエストを OSS に送信します。 リクエストには、prefix パラメーターと delimiter パラメーターが含まれています。

    • リクエスト例

      GET /?prefix=Development/&delimiter=/ HTTP/1.1
      Host: examplebucket.oss-cn-hangzhou.aliyuncs.com
      Date: Fri, 24 Feb 2012 08:43:27 GMT
      Authorization: OSS qn6q*******************:DNrn******************

      前のリクエストでは、prefix パラメーターの値は Development/ であり、delimiter パラメーターの値はスラッシュ (/) です。

    • レスポンス例

      レスポンスでは、OSS は指定されたプレフィックスを含むキーを持つオブジェクトを返します。

      HTTP/1.1 200 OK
      x-oss-request-id: 534B371674E88A4D8906****
      Date: Fri, 7 Aug 2020 08:43:27 GMT
      Content-Type: application/xml
      Content-Length: 712
      Connection: keep-alive
      Server: AliyunOSS
      <?xml version="1.0" encoding="UTF-8"?>
      <ListBucketResult xmlns="http://doc.oss-cn-hangzhou.aliyuncs.com">
      <Name>examplebucket</Name>
      <Prefix>Development/</Prefix>
      <Marker></Marker>
      <MaxKeys>100</MaxKeys>
      <Delimiter>/</Delimiter>
          <IsTruncated>false</IsTruncated>
          <Contents>
              <Key>ProjectA.docx</Key>
              ...
          </Contents>
          <Contents>
              <Key>ProjectB.docx</Key>
              ...
          </Contents>
          <Contents>
              <Key>Alibaba Cloud.pdf</Key>
              ...
          </Contents>
      </ListBucketResult>
    • レスポンスの解析

      OSS コンソールは、OSS から返されたレスポンスを解析し、Development/ ディレクトリ内のオブジェクトを表示します。

      development

シナリオ

たとえば、examplebucket バケットのオーナーであり、バケット内のすべてのオブジェクトとディレクトリのアクセス制御リスト (ACL) が非公開であるとします。 RAM ユーザー Anne に、バケット内の Development ディレクトリ、およびディレクトリ内のサブディレクトリとオブジェクトに対する読み取りおよび書き込み 権限を付与します。 RAM ユーザー Leo に、Marketing ディレクトリ、およびディレクトリ内のサブディレクトリとオブジェクトに対する読み取り専用 権限を付与します。 また、現在の Alibaba Cloud アカウントのすべての RAM ユーザーが Private ディレクトリにアクセスできないようにします。

手順 1: バケットを作成し、オブジェクトをアップロードする

  1. OSS コンソール にログオンし、examplebuckt という名前のバケットを作成します。 詳細については、「バケットの作成」をご参照ください。

  2. Development、MarketingPrivate という名前のディレクトリを作成します。 詳細については、「ディレクトリの作成」をご参照ください。

  3. 次の要件に基づいて、ディレクトリに オブジェクトをアップロード します

    • oss-dg.pdf オブジェクトを examplebucket バケットのルートディレクトリにアップロードします。

    • Alibaba Cloud.pdf、ProjectA.docx、ProjectB.docx オブジェクトを Development ディレクトリにアップロードします。

    • data2020.xlsx と data2021.xlsx オブジェクトを Marketing ディレクトリにアップロードします。

    • images.zip と promote.pptx オブジェクトを Private ディレクトリにアップロードします。

手順 2: RAM ユーザー Anne と Leo を作成する

RAM コンソール で RAM ユーザー Anne と Leo を作成します。 詳細については、「RAM ユーザーの作成」をご参照ください。

手順 3: RAM ユーザー Anne に Development ディレクトリに対する読み取りおよび書き込み権限を付与する

  1. AllowAnneToReadAndWriteFolderDevelopment ポリシーを RAM ユーザー Anne にアタッチします。

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

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

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

    4. 次のポリシードキュメントを入力し、[OK] をクリックします。

      {
          "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/*"
                  ]
              }
          ]
      }
    5. 表示されるダイアログボックスで、ポリシーの名前と説明を入力し、OK をクリックします。

  2. AllowAnneToReadAndWriteFolderDevelopment ポリシーを RAM ユーザー Anne にアタッチします。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

手順 4: RAM ユーザー Leo に Marketing ディレクトリに対する読み取り専用権限を付与する

手順 3 を参照して、AllowLeoToReadAndWriteFolderMarketing という名前のカスタムポリシーを作成します。 次のポリシーを使用して、Marketing ディレクトリと Marketing ディレクトリ内のすべてのオブジェクトに対する読み取り専用 権限を RAM ユーザー Leo に付与します。

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

手順 5: 現在の Alibaba Cloud アカウントのすべての RAM ユーザーから Private ディレクトリへのアクセスを拒否する

  1. ユーザーグループを作成し、ユーザーグループにメンバーを追加します。 詳細については、「RAM ユーザーグループの作成」および「RAM ユーザーグループへの RAM ユーザーの追加」をご参照ください。

    ユーザーグループを作成した後、Alibaba Cloud 内のすべての RAM ユーザーをユーザーグループに追加します。

  2. DenyAllRamToAccessFolderPrivate という名前のカスタムポリシーを作成します。

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

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

    3. 次のポリシードキュメントを入力し、[OK] をクリックします。

      {
          "Version":"1",
          "Statement":[
              {
                  "Effect":"Deny", // 拒否
                  "Action":[
                      "oss:*"
                  ],
                  "Resource":[
                      "acs:oss:*:*:examplebucket/Private/*"
                  ],
                  "Condition":{
      
                  }
              },
              {
                  "Effect":"Deny", // 拒否
                  "Action":[
                      "oss:ListObjects"
                  ],
                  "Resource":[
                      "acs:oss:*:*:*"
                  ],
                  "Condition":{
                      "StringLike":{
                          "oss:Prefix":[
                              "Private/",
                              "Private/*"
                          ]
                      }
                  }
              }
          ]
      }
    4. 表示されるダイアログボックスで、ポリシーの名前と説明を入力し、OK をクリックします。

  3. DenyAllRamToAccessFolderPrivate ポリシーをユーザーグループにアタッチします。 詳細については、「RAM ユーザーグループに権限を付与する」をご参照ください。

    ポリシーをユーザーグループにアタッチした後、ユーザーグループ内の RAM ユーザーは examplebucket バケット内の Private ディレクトリにアクセスできません。 RAM ユーザーが Private/2017/images.zip および Private/2017/promote.pptx オブジェクトを Private ディレクトリに一覧表示するリクエストを送信すると、OSS はエラーレスポンスを返します。