edit-icon download-icon

アクセス許可の設定

最終更新日: Aug 30, 2017

OSSでは、バケットやオブジェクトのアクセス権をそれぞれ設定できるため、リソースへの外部アクセスを簡単に制御できます。バケットは3種類のアクセス権が設定されています。

  • public-read-write:匿名ユーザはバケット内のオブジェクトを作成/検索/削除することができます。
  • public-read:匿名ユーザーはバケット内のオブジェクトを検索することができます。
  • private:匿名ユーザーはバケット内のオブジェクトにアクセスすることはできません。すべてのアクセスに署名が必要です。

バケットが作成されると、プライベート許可がデフォルトで適用されます。bucket.acl=でバケットのACL設定することができます。

  1. require 'aliyun/oss'
  2. client = Aliyun::OSS::Client.new(
  3. endpoint: 'endpoint',
  4. access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')
  5. bucket = client.get_bucket('my-bucket')
  6. puts bucket.acl

オブジェクトには、次の4種類のアクセス許可が設定されています。

  • default:オブジェクトは、それが属するバケットのアクセス許可を継承します。つまり、オブジェクトのアクセス許可は、オブジェクトが格納されているバケットのアクセス許可と同じです。
  • public-read-write:匿名ユーザーはオブジェクトを読み書きできます。
  • public-read:匿名ユーザーはオブジェクトを読み取ることができます。
  • private:匿名ユーザーはバケット内のオブジェクトにアクセスすることはできません。すべてのアクセスに署名が必要です。

オブジェクトが作成されると、既定で既定のアクセス許可が適用されます。オブジェクトのACL設定にbucket.set_object_aclを使用します。

  1. require 'aliyun/oss'
  2. client = Aliyun::OSS::Client.new(
  3. endpoint: 'endpoint',
  4. access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')
  5. bucket = client.get_bucket('my-bucket')
  6. acl = bucket.get_object_acl('my-object')
  7. puts acl # default
  8. bucket.set_object_acl('my-object', Aliyun::OSS::ACL::PUBLIC_READ)
  9. acl = bucket.get_object_acl('my-object')
  10. puts acl # public-read

注意:

  • オブジェクトがACLポリシー(デフォルトではない)で設定されている場合、オブジェクトACLは、オブジェクトがアクセスされたときのアクセス許可の認証時に優先されます。バケット ACLは無視されます。

  • 匿名アクセスが許可されている場合(オブジェクトに対してpublic-readまたはpublic-read-writeが設定されている場合)、ブラウザを使用してオブジェクトに直接アクセスできます。 例えば:

    1. http://bucket-name.oss-cn-hangzhou.aliyuncs.com/object.jpg
  • バケットまたはパブリックパーミッションを持つオブジェクトには、匿名クライアントからアクセスできます。

    1. require 'aliyun/oss'
    2. # If access_key_id and access_key_secret are not specified, an anonymous client will be created. The client can access only
    3. # the buckets and objects with the public permission.
    4. client = Aliyun::OSS::Client.new(endpoint: 'endpoint')
    5. bucket = client.get_bucket('my-bucket')
    6. bucket.get_object('my-object', :file => 'local_file')

ACLの詳細については、RAMを参照してください。