このトピックでは、Resource Access Management (RAM) ユーザーの Object Storage Service (OSS) に対するアクセス権限を管理する方法について説明します。 RAM コンソールでは、カスタムポリシーを作成して RAM ユーザーにアタッチできます。

このタスクについて

  • RAM ユーザーの OSS 権限を管理する前に、以下のシステムポリシーを理解しておく必要があります。
    • AliyunOSSFullAccess:RAM ユーザーにOSSバケットを管理するためのアクセス権限を付与します。
    • AliyunOSSReadOnlyAccess:OSS バケットの読み取り専用のアクセス権限を付与します。

    これら 2 つのシステムポリシーが業務要件を満たすことができない場合、カスタムポリシーを作成できます。

  • RAM ユーザーの OSS 権限を管理する前に、OSS 権限を理解しておく必要があります。 詳細については、「概要」をご参照ください。

手順

  1. RAM ユーザーを作成します。
    詳細については、「RAM ユーザーの作成」をご参照ください。
  2. カスタムポリシーを作成します。
    詳細については、「カスタマイズポリシーの作成」および「ポリシーの例」をご参照ください。
  3. RAM ユーザーにポリシーをアタッチします。
    詳細については、「RAM ユーザーへの権限付与」をご参照ください。

ポリシーの例

  • 例 1: RAM ユーザーにバケット名が myphotos のバケットを管理する権限を付与します。
    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "oss:*",
                "Resource": [
                    "acs:oss:*:*:myphotos",
                    "acs:oss:*:*:myphotos/*"
                ]
            }
        ]
    }
  • Example 2: RAM ユーザーにバケット内のリソースの一覧表示および読み取りに必要な権限を付与します。
    • OSS SDK または CLIを使用して、RAM ユーザーにバケット名が myphotos のバケット内のリソースを一覧表示して読み取る権限を付与するには、以下のサンプルスクリプトを使用します。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "oss:ListObjects",
                  "Resource": "acs:oss:*:*:myphotos"
              },
              {
                  "Effect": "Allow",
                  "Action": "oss:GetObject",
                  "Resource": "acs:oss:*:*:myphotos/*"
              }
          ]
      }
    • RAM ユーザーが、OSS コンソールを使用してバケット名が myphotos のバケット内のリソースを一覧表示および読み取るための権限を付与するには、以下のサンプルスクリプトを使用します。
      RAM ユーザーが OSS コンソールにログインすると、 ListBuckets GetBucketAclGetObjectAcl API が呼び出され、バケットがパブリックであるかどうかを確認します。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                            "oss:ListBuckets",
                            "oss:GetBucketStat",
                            "oss:GetBucketInfo",
                            "oss:GetBucketTagging",
                            "oss:GetBucketAcl" 
                            ],    
                  "Resource": "acs:oss:*:*:*"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects",
                      "oss:GetBucketAcl"
                  ],
                  "Resource": "acs:oss:*:*:myphotos"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:GetObject",
                      "oss:GetObjectAcl"
                  ],
                  "Resource": "acs:oss:*:*:myphotos/*"
              }
          ]
      }
  • 例 3: RAM ユーザーが特定の IP アドレスを使用して OSS バケットにアクセスするための権限を付与します。
    • IP アドレス条件を Allow 要素に追加します。 RAM ユーザーに、CIDR ブロック192.168.0.0/16 または 172.16.1.0/16 内の IP アドレスを使用して、myphotos バケットからデータを読み取る権限が付与されます。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                            "oss:ListBuckets",
                            "oss:GetBucketStat",
                            "oss:GetBucketInfo",
                            "oss:GetBucketTagging",
                            "oss:GetBucketAcl" 
                            ], 
                  "Resource": [
                      "acs:oss:*:*:*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects",
                      "oss:GetObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos",
                      "acs:oss:*:*:myphotos/*"
                  ],
                  "Condition":{
                      "IpAddress": {
                          "acs:SourceIp": ["192.168.0.0/16", "172.16.1.0/16"]
                      }
                  }
              }
          ]
      }
    • IP アドレス条件を Deny 要素に追加します。 RAM ユーザーの IP アドレスが CIDR ブロック192.168.0.0/16 に存在しない場合、RAM ユーザーは myphotos バケットにアクセスできず、管理できません。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                            "oss:ListBuckets",
                            "oss:GetBucketStat",
                            "oss:GetBucketInfo",
                            "oss:GetBucketTagging",
                            "oss:GetBucketAcl" 
                            ], 
                  "Resource": [
                      "acs:oss:*:*:*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects",
                      "oss:GetObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos",
                      "acs:oss:*:*:myphotos/*"
                  ]
              },
              {
                  "Effect": "Deny",
                  "Action": "oss:*",
                  "Resource": [
                      "acs:oss:*:*:*"
                  ],
                  "Condition":{
                      "NotIpAddress": { {
                          "acs:SourceIp": ["192.168.0.0/16"]
                      }
                  }
              }
          ]
      }
      Deny コマンドを使用したポリシーは、Allow コマンドを使用したポリシーよりも優先度が高くなります。 myphotos バケットのデータを、IP アドレスが CIDR ブロック 192.168.0.0/16 に存在しない RAM ユーザーが読み取ろうとした場合、OSS は RAM ユーザーに対して、必要な権限が付与されていないことを通知します。
  • 例 4: RAM ユーザーに、OSS ディレクトリからデータを読み取る権限を付与します。

    この例では、写真を保存するバケット名は myphotos です。 バケットには、写真が撮影された場所に基づいて名前が付けられた複数のフォルダーがあります。 各フォルダーには、写真が撮影された年に基づいて名前が付けられたサブフォルダーがあります。

    myphotos[Bucket]
      ├── beijing
      │   ├── 2014
      │   └── 2015
      ├── hangzhou
      │   ├── 2013
      │   ├── 2014
      │   └── 2015 // Grant read-only permissions on this folder to a RAM user.
      └── qingdao
          ├── 2014
          └── 2015

    特定のシナリオに基づく別々の RAM ポリシーを作成して、RAM ユーザーにmyphotos/hangzhou/2015/ フォルダーの読み取り権限を付与できます。 以下に、3 つの一般的なシナリオの例を説明します。

    • シナリオ 1: RAM ユーザーに、フォルダー内のオブジェクトからデータを読み取る権限を付与しますが、オブジェクトを一覧表示する権限は付与しません。

      このシナリオでは、RAM ユーザーはフルパスを使用してオブジェクトデータを読み取ることができます。 このポリシーをアプリケーションにアタッチすることを推奨します。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:GetObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos/hangzhou/2015/*"
                  ]
              }
          ]
      }
    • シナリオ 2: RAMユーザーに、OSS CLI を使用して myphotos/hangzhou/2015/フォルダーとフォルダー内のオブジェクトを一覧表示する権限を付与します。

      このシナリオでは、RAM ユーザーは OSS CLI または API 呼び出しを使用して、フォルダーからデータを読み取ることができます。 このポリシーを使用して、関連するアクセス権限をソフトウェア開発者に付与することを推奨します。

      このシナリオでは、 ListObjects 権限が必要です。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:GetObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos/hangzhou/2015/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos"
                  ],
                  "Condition":{
                      "StringLike":{
                          "oss:Prefix":"hangzhou/2015/*"
                      }
                  }
              }
          ]
      }
    • シナリオ 3: RAM ユーザーに、OSS コンソールを使用してフォルダーにアクセスする権限を付与します。

      このシナリオでは、RAM ユーザーはビジュアル OSS クライアント (Windows のファイルエクスプローラーなど) を使用して、 myphotos/hangzhou/2015/フォルダーにアクセスできます。

      以下の権限が必要です。

      • すべてのバケットを一覧表示する権限
      • myphotos 内のフォルダーを一覧表示する権限
      • myphotos/hangzhou 内のフォルダーを一覧表示する権限
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                            "oss:ListBuckets",
                            "oss:GetBucketStat",
                            "oss:GetBucketInfo",
                            "oss:GetBucketTagging",
                            "oss:GetBucketAcl" 
                            ], 
                  "Resource": [
                      "acs:oss:*:*:*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:GetObject",
                      "oss:GetObjectAcl"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos/hangzhou/2015/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos"
                  ],
                  "Condition": {
                      "StringLike": {
                          "oss:Delimiter": "/",
                          "oss:Prefix": [
                              "",
                              "hangzhou/",
                              "hangzhou/2015/*"
                          ]
                      }
                  }
              }
          ]
      }