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

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

最終更新日:Dec 05, 2024

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

背景情報

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

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

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

  • 効果: RAMポリシーの効果。 有効な値は、Allow および Deny です。

    説明

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

  • Action: リソースに対して許可されたアクション。

RAMポリシーエディターを使用してRAMポリシーを生成することを推奨します。 詳細については、「RAM Policy Editor」をご参照ください。

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

バケットとディレクトリ

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

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

  • Developmentディレクトリを作成すると、キーがDevelopment/ のオブジェクトがOSSコンソールに作成されます。 スラッシュ (/) は、区切り文字としてキーに含まれます。

  • ProjectA.docxという名前のオブジェクトをDevelopmentディレクトリにアップロードすると、オブジェクトはOSSコンソールにアップロードされ、オブジェクトのキーはDevelopment/ProjectA.docxに設定されます。

    キーでは、Developmentはプレフィックス、スラッシュ (/) は区切り文字です。 バケット内の共通のプレフィックスと区切り文字を共有するすべてのオブジェクトを一覧表示できます。 OSSコンソールで、[Development] ディレクトリをクリックすると、ディレクトリ内のオブジェクトが一覧表示されます。 次の図は、Developmentディレクトリ内のオブジェクトを示しています。

    development

    説明

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

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

  • Development/Alibaba Cloud.pdf

  • Development/ProjectA.docx

  • Development/ProjectB.docx

  • マーケティング /data2020.xlsx

  • マーケティング /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とどのようにやり取りするかを理解する必要があります。

  • バケットへのアクセス要求を送信する

    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に送信します。 リクエストには、プレフィックスとデリミタパラメータが含まれます。

    • リクエストの例

      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) はデフォルトでプライベートです。 バケット内のDevelopmentディレクトリ、およびディレクトリ内のサブディレクトリとオブジェクトに対する読み取りおよび書き込み権限をRAMユーザーAnneに付与する必要があります。 RAMユーザーLeoに、Marketingディレクトリおよびディレクトリ内のサブディレクトリおよびオブジェクトに対する読み取り専用権限を付与する必要があります。 また、現在のAlibaba CloudアカウントのすべてのRAMユーザーがPrivateディレクトリにアクセスできないようにします。

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

  1. examplebucketという名前のバケットを作成します。

    1. Alibaba Cloudアカウントを使用してOSSコンソールにログインします。

    2. examplebucketという名前のバケットを作成します。 詳細については、「バケットの作成」をご参照ください。

  2. バケットにDevelopmentMarketingPrivateディレクトリを作成します。 詳細については、「ディレクトリの作成」をご参照ください。

  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. 次のポリシーコンテンツを入力し、[次へ] をクリックしてポリシー情報を編集します。

      次のポリシーコンテンツを使用して、RAMユーザーAnneにDevelopmentディレクトリおよびディレクトリ内のすべてのオブジェクトの読み取りおよび書き込み権限を付与します。

      {
          "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. ポリシーの 名前 および [指定] パラメーターを指定します。

    6. OK をクリックします。

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

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

AllowLeoToReadAndWriteFolderMarketingという名前のカスタムポリシーを作成するには、手順3を参照してください。 次のポリシーコンテンツを使用して、MarketingディレクトリおよびMarketingディレクトリ内のすべてのオブジェクトに対する読み取り専用権限をRAMユーザーに付与します。 ポリシーコンテンツには、次の設定が含まれます。

{
    "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ユーザーからプライベートディレクトリへのアクセスを拒否する

  1. ユーザーグループを作成し、ユーザーグループにメンバーを追加します。

    ユーザーグループの作成方法の詳細については、「RAMユーザーグループの作成」をご参照ください。 ユーザーグループを作成したら、現在のAlibaba CloudアカウントのすべてのRAMユーザーをユーザーグループに追加します。 詳細については、「RAMユーザーグループへのRAMユーザーの追加」をご参照ください。

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

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

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

    3. 次のポリシーコンテンツを入力し、[次へ] をクリックしてポリシー情報を編集します。

      次のポリシーコンテンツを使用して、現在のAlibaba CloudアカウントのすべてのRAMユーザーからプライベートディレクトリへのアクセスを拒否します。

      {
          "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. ポリシーの 名前 および [指定] パラメーターを指定します。

    5. OK をクリックします。

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

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