リソースアクセス管理 (RAM) は、Alibaba Cloud が提供するリソースアクセス制御のためのサービスです。 RAM ポリシーは、ユーザーごとに設定します。 RAM ポリシーを設定することで、多数のユーザーを集中管理し、ユーザーがアクセスするリソースを管理できます。 たとえば、ユーザーが指定したバケットのみを読み取ることができるように、ユーザーの権限を制御できます。 RAM ユーザーは、作成者の Alibaba Cloud アカウントに属し、実際のリソースは所有していません。 つまり、すべてのリソースは、対応する Alibaba Cloud アカウントに属します。

ポリシー例

  • すべての許可を付与するポリシー

    すべての許可を付与するポリシーにより、アプリケーションは OSS 上ですべての操作を実行できるようになります。

    警告 安全性に乏しいため、すべての許可を付与するポリシーは、モバイルアプリケーションに対して使用しないことを推奨します。
    {
      "Statement": [
        {
          "Action": [
            "oss:*"
          ],
          "Effect": "Allow",
          "Resource": "acs:ecs:*:*:*"
        }
      ],
      "Version": "1"
    }
    OSS での操作 結果
    作成したすべてのバケットを一覧表示します。 成功
    text.txt のように、プレフィックスを付けずにオブジェクトをアップロードします。 成功
    text.txt のように、プレフィックスを付けずにオブジェクトをダウンロードします。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトをアップロードします。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトをダウンロードします。 成功
    test.txt のように、プレフィックスを付けずにオブジェクトを一覧表示します。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトを一覧表示します。 成功
  • すべてのオブジェクトに対する読み取り専用ポリシー

    読み取り専用ポリシーは、アプリケーションがバケット app-base-oss 内のすべてのオブジェクトを一覧表示およびダウンロードできることを示します。

    {
        "Statement": [
          {
            "Action": [
              "oss:GetObject"、
              "oss:PutObject"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    OSS での操作 結果
    作成した全バケットを一覧表示します。 失敗
    text.txt のように、プレフィックスを付けずにオブジェクトをアップロードします。 失敗
    test.txt のように、プレフィックスを付けずにオブジェクトをダウンロードします。 成功
    user1/test.txt のようにプレフィックスを付けてオブジェクトをアップロードします。 失敗
    user1/test.txt のように、プレフィックスを付けてオブジェクトをダウンロードします。 成功
    test.txt のように、プレフィックスを付けずにオブジェクトを一覧表示します。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトを一覧表示します。 成功
  • 特定のプレフィックスを持つオブジェクトに対する読み取り専用ポリシー

    このタイプのポリシーは、アプリケーションが、バケット app-base-oss 内の user1/ というプレフィックスをもつオブジェクトの一覧表示とダウンロードを実行できることを示します。しかし、他のプレフィックスを持つオブジェクトはダウンロードできません。 このタイプのポリシーを使用すると、バケット内の異なるプレフィックスごとにアプリケーションを分離できます。

    {
        "Statement": [
          {
            "Action": [
              "oss:GetObject"、
              "oss:PutObject"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    OSS での操作 結果
    作成した全バケットを一覧表示します。 失敗
    text.txt のように、プレフィックスを付けずにオブジェクトをアップロードします。 失敗
    test.txt のように、プレフィックスを付けずにオブジェクトをダウンロードします。 失敗
    user1/test.txt のように、プレフィックスを付けてオブジェクトをアップロードします。 失敗
    user1/test.txt のように、プレフィックスを付けてオブジェクトをダウンロードします。 成功
    test.txt のように、プレフィックスを付けずにオブジェクトを一覧表示します。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトを一覧表示します。 成功
  • 全オブジェクトに対する書き込み専用ポリシー

    全オブジェクトに対する書き込み専用ポリシーは、アプリケーションがオブジェクトをバケット app-base-oss にアップロードできることを示します。

    {
        "Statement": [
          {
            "Action": [
              "oss:PutObject"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    OSS での操作 結果
    作成した全バケットを一覧表示します。 失敗
    text.txt のように、プレフィックスを付けずにオブジェクトをアップロードします。 成功
    test.txt のように、プレフィックスを付けずにオブジェクトをダウンロードします。 失敗
    user1/test.txt のように、プレフィックスを付けてオブジェクトをアップロードします。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトをダウンロードします。 成功
    test.txt のように、プレフィックスを付けずにオブジェクトを一覧表示します。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトを一覧表示します。 成功
  • 特定のプレフィックスを持つオブジェクトに対する書き込み専用ポリシー

    このタイプのポリシーは、アプリケーションがプレフィックス user1/ を持つオブジェクトをバケット app-base-oss にアップロードできることを示します。 ただし、他のプレフィックスを持つオブジェクトはアップロードできません。 このタイプのポリシーを使用すると、バケット内の異なるプレフィックスごとにアプリケーションを分離できます。

    {
        "Statement": [
          {
            "Action": [
              "oss:PutObject"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    OSS 上の操作 結果
    作成した全バケットを一覧表示します。 失敗
    text.txt のように、プレフィックスを付けずにオブジェクトをアップロードします。 失敗
    test.txt のように、プレフィックスを付けずにオブジェクトをダウンロードします。 失敗
    user1/test.txt のように、プレフィックスを付けてオブジェクトをアップロードします。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトをダウンロードします。 失敗
    test.txt のように、プレフィックスを付けずにオブジェクトを一覧表示します。 失敗
    user1/test.txt のように、プレフィックスを付けてオブジェクトを一覧表示します。 失敗
  • 全オブジェクトに対する読み書きポリシー

    全オブジェクトに対する読み書きポリシーは、アプリケーションがオブジェクトをバケット app-base-oss にアップロードし、バケット内の全オブジェクトを一覧表示、ダウンロード、および削除できることを示します。

    {
        "Statement": [
          {
            "Action": [
              "oss:GetObject",
              "oss:PutObject",
              "oss:DeleteObject",
              "oss:ListParts",
              "oss:AbortMultipartUpload",
              "oss:ListObjects"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    OSS での操作 結果
    作成した全バケットを一覧表示します。 失敗
    text.txt のように、プレフィックスを付けずにオブジェクトをアップロードします。 成功
    test.txt のように、プレフィックスを付けずにオブジェクトをダウンロードします。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトをアップロードします。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトをダウンロードします。 成功
    test.txt のように、プレフィックスを付けずにオブジェクトを一覧表示します。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトを一覧表示します。 成功
  • 特定のプレフィックスを持つオブジェクトに対する読み書きポリシー

    このタイプのポリシーは、アプリケーションが user1/ のプリフィックスを持つオブジェクトをバケット app-base-oss にアップロードできることを示します。また、このプリフィクスを持つバケット内のすべてのオブジェクトに対して、一覧表示、ダウンロード、削除を実行できます。 しかし、他のプレフィックスを持つオブジェクトに対しては、読み取りおよび書き込み操作を実行できません。 このタイプのポリシーを使用すると、バケット内の異なるプレフィックスごとにアプリケーションを分離できます。

    {
        "Statement": [
          {
            "Action": [
              "oss:GetObject",
              "oss:PutObject",
              "oss:DeleteObject",
              "oss:ListParts",
              "oss:AbortMultipartUpload",
              "oss:ListObjects"
            ],
            "Effect": "Allow",
            "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
          }
        ],
        "Version": "1"
      }
    OSS での操作 結果
    作成したすべてのバケットを一覧表示します。 失敗
    text.txt のように、プレフィックスを付けずにオブジェクトをアップロードします。 失敗
    text.txt のように、プレフィックスを付けずにオブジェクトをダウンロードします。 失敗
    user1/test.txt のように、プレフィックスを付けてオブジェクトをアップロードします。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトをダウンロードします。 成功
    test.txt のように、プレフィックスを付けずにオブジェクトを一覧表示します。 成功
    user1/test.txt のように、プレフィックスを付けてオブジェクトを一覧表示します。 成功

複雑なポリシーの例

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oss:GetBucketAcl",
                "oss:ListObjects"
            ],
            "Resource": [
                "acs:oss:*:1775305056529849:mybucket"
            ],
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "acs:UserAgent": "java-sdk",
                    "oss:Prefix": "foo"
                },
                "IpAddress": {
                    "acs:SourceIp": "192.168.0.1"
                }
            }
        },
        {
            "Action": [
                "oss:PutObject",
                "oss:GetObject",
                "oss:DeleteObject"
            ],
            "Resource": [
                "acs:oss:*:1775305056529849:mybucket/file*"
            ],
            "Effect": "Allow",
            "Condition": {
                "IpAddress": {
                    "acs:SourceIp": "192.168.0.1"
                }
            }
        }
    ]
}

上記の例では、複雑な権限ポリシーが記述されています。 このポリシーを使用することで、ユーザーは RAM または STS を介して他のユーザーを認証できます。 ポリシーには、アクション、リソース、結果、および条件が指定された文が含まれます (ポリシーには複数の文を含めることができます)。

このポリシーでは、認証されたユーザーが mybucketmybucket / file * などのリソースにアクセスできるように許可を付与します。 さらに、このポリシーは、GetBucketAcl、GetBucket、PutObject、GetObject、DeleteObject などの操作もサポートしています。 条件フィールドに含まれる条件は、認証プロセスを通過して認証されたユーザーは、UserAgent が java-sdk で送信元 IP アドレスが 192.168.0.1 の場合にのみ関連リソースにアクセスできることを示します。 Prefix 条件は、GetBucket (ListObjects) アクションが実行されるときに使用されます。 フィールド の詳細は、「OSS ドキュメント」 をご参照ください。

Version

Version フィールドは、ポリシーのバージョンを指定します。 本ページの設定では、1 に設定されています。

Statement

Statement では権限セマンティクスを記述します。 さまざまなシナリオに従って、Statement には、アクション、エフェクト、リソース、および条件を個別に含む複数のセマンティクスを含めることができます。 リクエストを受け取ると、システムではポリシー内のすべての文がをチェックされます。 リクエストに一致するすべての文は、"Effect" の設定が、「Allow」か「Deny」かによって、2 つのカテゴリーに分類されます。認証を通過するかどうかが判断されるときに、「Deny」が設定された文が優先されます。 リクエストに一致したすべての文が「Allow」に分類されると、そのリクエストは認証を通過します。 リクエストに一致した文が「Deny」に分類されている場合、またはリクエストに一致する文がない場合、リクエストは拒否されます。

Action

アクションは 3 つのカテゴリに分類できます。

  • サービスレベルのアクション:ユーザーが所有するバケットを一覧表示するために使用される GetService アクションなどです。
  • バケットレベルのアクション:"oss:PutBucketAcl" や "oss:GetBucketLocation" など、バケットに対して実行されるアクションを示します。 各アクションの名前は、API に対応しています。
  • オブジェクトレベルのアクション:"oss:GetObject"、"oss:PutObject"、"oss:DeleteObject"、"oss:AbortMultipartUpload" など、オブジェクトに対して実行するアクションを示します。

オブジェクトに対するアクションの種類を承認するには、前述のアクションを1つ以上選択します。 さらに、前の例に示すように、全アクション名の先頭にoss:を付ける必要があります。 "Action" フィールドには、複数のアクションを指定できます。 以下の表は、アクションと API の間の対応関係を示しています。

  • サービスレベルのアクション
    API アクション
    GetService(ListBuckets) oss:ListBuckets
  • Bucket-level actions
    API アクション
    PutBucket oss:PutBucket
    GetBucket (ListObjects) oss:ListObjects
    PutBucketAcl oss:PutBucketAcl
    DeleteBucket oss:DeleteBucket
    GetBucketLocation oss:GetBucketLocation
    GetBucketAcl oss:GetBucketAcl
    GetBucketLogging oss:GetBucketLogging
    PutBucketLogging oss:PutBucketLogging
    DeleteBucketLogging oss:DeleteBucketLogging
    GetBucketWebsite oss:GetBucketWebsite
    PutBucketWebsite oss:PutBucketWebsite
    DeleteBucketWebsite oss:DeleteBucketWebsite
    GetBucketReferer oss:GetBucketReferer
    PutBucketReferer oss:PutBucketReferer
    GetBucketLifecycle oss:GetBucketLifecycle
    PutBucketLifecycle oss:PutBucketLifecycle
    DeleteBucketLifecycle oss:DeleteBucketLifecycle
    ListMultipartUploads oss:ListMultipartUploads
    PutBucketCors oss:PutBucketCors
    GetBucketCors oss:GetBucketCors
    DeleteBucketCors oss:DeleteBucketCors
    PutBucketReplication oss:PutBucketReplication
    GetBucketReplication oss:GetBucketReplication
    DeleteBucketReplication oss:DeleteBucketReplication
    GetBucketReplicationLocation oss:GetBucketReplicationLocation
    GetBucketReplicationProgress oss:GetBucketReplicationProgress
  • オブジェクトに対するアクション
    API アクション
    GetObject oss:GetObject
    HeadObject oss:GetObject
    PutObject oss:PutObject
    PostObject oss:PutObject
    InitiateMultipartUpload oss:PutObject
    UploadPart oss:PutObject
    CompleteMultipart oss:PutObject
    DeleteObject oss:DeleteObject
    DeleteMultipartObjects oss:DeleteObject
    AbortMultipartUpload oss:AbortMultipartUpload
    ListParts oss:ListParts
    CopyObject oss:GetObject,oss:PutObject
    UploadPartCopy oss:GetObject,oss:PutObject
    AppendObject oss:PutObject
    GetObjectAcl oss:GetObjectAcl
    PutObjectAcl oss:PutObjectAcl
    RestoreObject oss:RestoreObject

Resource

Resource フィールドは、指定されたリソースまたはリソースの種類 (ワイルドカード*で表現可能) を示します。 リソースフィールドの形式は、acs:oss:{region}:{bucket_owner}:{bucket_name}/{object_name} です。 バケットレベルのアクション名の場合、"/ {object_name}" 部分は不要です。 バケットレベルのアクションのリソースフィールドの形式は、acs:oss:{region}:{bucket_owner}:{bucket_name}です。 Resource フィールドには、複数のリソースを指定できます。 リージョンフィールドは現在サポートされておらず、上記例では * に設定されています。

Effect

Effect フィールドは、この文の許可結果を示します。「Allow」と「Deny」の 2 つの値があります。 リクエストに一致する文が複数ある場合、"Effect" の値が「Deny」の文が優先されます。

例えば、次のポリシーでは、ユーザーは指定されたディレクトリを削除できませんが、他のオブジェクトに対してすべての操作を実行できます。
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:*"
      ],
      "Resource": [
        "acs:oss:*:*:bucketname"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:*:bucketname/index/*",
      ]
    }
  ]
}

条件

条件フィールドは、許可ポリシーの条件を示します。 上記の例では、"acs:UserAgent" および "acs:SourceIp" のチェック条件を設定できます。また、"oss:Prefix" を条件として使用し、GetBucket アクションの実行時のリソースを制限できます。

OSS は以下の条件をサポートします。

条件 関数 有効値
acs:SourceIp 送信元 IP アドレスまたは IP 範囲を指定します。 IP アドレスまたは IP 範囲、ワイルドカード(*)を使用できます。
acs:UserAgent http useragent ヘッダーを指定します。 文字列
acs:CurrentTime 有効なアクセス時間を指定します。 ISO 8601 形式の時刻
acs:SecureTransport HTTPS プロトコルが使用されているかどうかを示します。 "true" or "false"
oss:Prefix ListObjects アクションが実行されるときに使用されるプレフィックスを示します。 有効なオブジェクト名

ベストプラクティス

OSS は、RAM ポリシーを素早く作成するのに役立つRAM ポリシーエディターを提供します。 ossbrowser を使用して、簡単なポリシーで権限を付与することもできます。ossbrowser は、特定のバケットやディレクトリにアクセスできるように RAM ユーザーを認証するグラフィカル管理ツールです。

さまざまなシナリオで許可ポリシーを設定する例については、「チュートリアル:バケットとオブジェクトへのアクセス制御」および「OSS の権限付与 (Authorization for OSS)」をご参照ください。