バケットポリシーを使用すると、Alibaba Cloudアカウント、RAMユーザー、RAMロールなどの匿名ユーザーまたは識別されたユーザーの特定のOSS (Object Storage Service) リソースへのアクセスを許可または拒否できます。 たとえば、特定のOSSリソースに対する読み取り専用権限を別のAlibaba CloudアカウントのRAMユーザーに付与できます。
共通の説明
RAMポリシーと比較して、バケットポリシーには、権限を付与するユーザーを指定するために使用されるPrincipal要素が含まれています。 Principal要素を指定して、さまざまなユーザーからの特定のOSSリソースへのアクセスを許可または拒否することができます。 特定のOSSリソースに対して異なるユーザーに異なる権限を付与したくない場合は、一元的に権限を管理できます。 これにより、異なるユーザーに対する繰り返しの承認または制限が防止されます。 たとえば、Principal要素を複数のRAMユーザーのUIDに設定して、特定のRAMユーザーと一致させることができます。 Principal要素をアスタリスク (*) に設定して、すべてのユーザーに一致させることができます。
使用上の注意
バケットポリシーを設定するときにPrincipal要素をアスタリスク (*) に設定し、Condition要素を指定すると、バケットポリシーはバケット所有者を含むすべてのユーザーに対して有効になります。 この場合、Denyステートメントがトリガーされると、バケットに対する完全な権限を持つバケット所有者からのアクセス要求は拒否されます。
バケットポリシーを設定するときにPrincipal要素をアスタリスク (*) に設定し、Condition要素を指定しない場合、バケットポリシーはバケット所有者を除くすべてのユーザーに対して有効になります。 この場合、Denyステートメントはトリガーされず、バケットに対する完全な権限を持つバケット所有者からのアクセス要求は拒否されません。
例1: 特定のRAMユーザーにバケットの読み書き権限を付与する
チームまたはパートナーの特定のメンバーに、バケット内のオブジェクトをアップロード、ダウンロード、および管理する権限を付与する場合は、これらのメンバーに対応するRAMユーザーに権限を付与するようにバケットポリシーを設定できます。 RAMユーザーごとにアクセスポリシーを設定する必要はありません。 次のサンプルコードは、UIDが27737962156157xxxx
および202147604935xxxx
であるRAMユーザーに、examplebucket
という名前のバケットを読み書きする権限を付与するようにバケットポリシーを設定する方法の例を示しています。
次のAllowステートメントでは、RAMユーザーにバケットを一覧表示する権限が付与されていません。 この場合、RAMユーザーはOSSコンソールの [バケット] ページですべてのバケットを表示したり、特定のバケットを見つけて開くことはできません。 RAMユーザーは、特定のバケットをお気に入りのパスに追加することでアクセスできます。 RAMユーザーは、バケットを一覧表示する権限を持つ必要はありません。 詳細は、「OSSアクセスパス」をご参照ください。
{
"バージョン":"1" 、
"ステートメント":[
{
"効果":"許可" 、
"Action":[
"oss:GetObject"、
"OSS:のputObject"、
"oss:GetObjectAcl" 、
"oss:PutObjectAcl" 、
"OSS:AbortMultipartUpload"、
"oss:ListParts",
"oss:RestoreObject" 、
"oss:GetVodPlaylist" 、
"oss:PostVodPlaylist" 、
"oss:PublishRtmpStream" 、
"oss:ListObjectVersions" 、
"oss:GetObjectVersion" 、
"oss:GetObjectVersionAcl" 、
"oss:RestoreObjectVersion"
],
"プリンシパル":[
"27737962156157xxxx" 、
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
]
},
{
"効果":"許可" 、
"Action":[
"oss:ListObjects"
],
"プリンシパル":[
"27737962156157xxxx" 、
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket"
],
"Condition":{
"StringLike":{
"oss: プレフィックス":[
"*"
]
}
}
}
]
}
例2: 特定のRAMユーザーにバケットの特定のディレクトリを読み取る権限を付与する
バケット内の特定のプロジェクトオブジェクトを改ざんから保護する必要があるが、特定のプロジェクトメンバーがこれらのオブジェクトを一覧表示して読み取ることを許可する場合は、プロジェクトオブジェクトを一覧表示して読み取る権限をメンバーに付与できます。 次のサンプルコードは、UIDが20214760404935xxxx
のRAMユーザーに、examplebucket
という名前のバケットのhangzhou/2020
およびshanghai/2015
ディレクトリを読み取る権限を付与するようにバケットポリシーを設定する方法の例を示しています。
次のAllowステートメントでは、RAMユーザーにバケットを一覧表示する権限が付与されていません。 この場合、RAMユーザーはOSSコンソールの [バケット] ページですべてのバケットを表示したり、特定のバケットを見つけて開くことはできません。 RAMユーザーは、特定のバケットをお気に入りのパスに追加することでアクセスできます。 RAMユーザーは、バケットを一覧表示する権限を持つ必要はありません。 詳細は、「OSSアクセスパス」をご参照ください。
{
"バージョン":"1" 、
"ステートメント":[
{
"Action":[
"oss:GetObject"、
"oss:GetObjectAcl" 、
"oss:GetObjectVersion" 、
"oss:GetObjectVersionAcl"
],
"効果":"許可" 、
"プリンシパル":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*" 、
"acs:oss:*:174649585760xxxx:examplebucket/shanghai/2015/*"
]
},
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Condition":{
"StringLike":{
"oss: プレフィックス":[
"hangzhou/2020/*" 、
"上海 /2015/*"
]
}
},
"効果":"許可" 、
"プリンシパル":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket"
]
}
]
}
例3: すべてのユーザーに、バケット内のすべてのオブジェクトのみを一覧表示する権限を付与する
バケットをパブリックリソース共有に使用し、すべてのユーザーにオブジェクト名を表示したいが、オブジェクトコンテンツを表示しない場合は、Principal要素をアスタリスク (*) に設定し、すべてのユーザーにバケット内のすべてのオブジェクトを一覧表示する権限を付与できます。 次のサンプルコードは、examplebucket
という名前のバケット内のすべてのオブジェクトのみを一覧表示する権限をすべてのユーザーに付与するようにバケットポリシーを設定する方法の例を示しています。
{
"バージョン":"1" 、
"ステートメント":[
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"効果":"許可" 、
"プリンシパル":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket"
]
}
]
}
例4: バケットに関する情報を表示し、バケット内のすべてのオブジェクトを一覧表示する権限を特定のRAMユーザーに付与する
チームまたはパートナーの特定のメンバーに、バケットに関する情報を表示し、バケット内のすべてのオブジェクトを一覧表示する権限を付与する場合は、これらのメンバーに対応するRAMユーザーに権限を付与するようにバケットポリシーを設定できます。 RAMユーザーごとにアクセスポリシーを設定する必要はありません。 次のサンプルコードは、examplebucket
という名前のバケットに関する情報を表示し、バケット内のオブジェクトを一覧表示する権限を特定のRAMユーザーに付与する方法の例です。
次のAllowステートメントでは、RAMユーザーにバケットを一覧表示する権限が付与されていません。 この場合、RAMユーザーはOSSコンソールの [バケット] ページですべてのバケットを表示したり、特定のバケットを見つけて開くことはできません。 RAMユーザーは、特定のバケットをお気に入りのパスに追加することでアクセスできます。 RAMユーザーは、バケットを一覧表示する権限を持つ必要はありません。 詳細は、「OSSアクセスパス」をご参照ください。
{
"バージョン":"1" 、
"ステートメント":[
{
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"効果":"許可" 、
"プリンシパル":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket"
]
}
]
}
例5: 特定のVPCを使用していないユーザーから送信されたリクエストを拒否する
特定のVPCからのみバケットへのアクセスを許可する場合は、acs:SourceVpc
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、他のVPCまたはインターネットからのリクエストを拒否します。 他のVPCからのリクエストが指定された条件と一致せず、バケットポリシーのDenyステートメントがトリガーされます。 インターネットからのリクエストは、指定されたVPC情報を含まず、バケットポリシーのDenyステートメントがトリガーされるため、指定された条件と一致しません。 次のサンプルコードは、t4nlw426y44rd3iq4 ****
VPCを使用しないユーザーからexamplebucket
という名前のバケット内のオブジェクトを読み取るリクエストを拒否するようにバケットポリシーを設定する方法の例を示しています。
次のDenyステートメントでは、Principal要素はアスタリスク (*) で、Condition要素が指定されています。 この場合、Denyポリシーステートメントは、バケット所有者を含むすべてのユーザーに対して有効になります。 バケットに対する完全な権限を持つバケット所有者が、別のVPCを使用してバケット内のオブジェクトを読み取るリクエストを開始した場合、リクエストは拒否されます。
次のDenyステートメントは、アクセスを拒否するためにのみ使用され、アクセス権限は付与されません。 承認されたプリンシパルにアクセス権限が付与されていない場合は、Allowステートメントを追加できます。
{
"バージョン":"1" 、
"ステートメント":[
{
"効果":"拒否" 、
"Action":[
"oss:GetObject"
],
"プリンシパル":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4 ****"
]
}
}
}
]
}
例6: 特定のパブリックIPアドレスを使用しないユーザーから送信されたリクエストを拒否する
特定のパブリックIPアドレスからのみバケットへのアクセスを許可する場合は、acs:SourceIp
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、VPCまたは他のパブリックIPアドレスからのリクエストを拒否できます。 他のパブリックIPアドレスからのリクエストが指定された条件と一致せず、バケットポリシーのDenyステートメントがトリガーされます。 VPCからのリクエストが指定された条件と一致せず、バケットポリシーのDenyステートメントがトリガーされます。 次のサンプルコードは、203.0.113.5
パブリックIPアドレスを使用しないユーザーからのexamplebucket
という名前のバケット内のオブジェクトの読み取り要求を拒否するようにバケットポリシーを構成する方法の例を示しています。
次のDenyステートメントでは、Principal要素はアスタリスク (*) で、Condition要素が指定されています。 この場合、Denyポリシーステートメントは、バケット所有者を含むすべてのユーザーに対して有効になります。 バケットに対する完全な権限を持つバケット所有者が、別のパブリックIPアドレスを使用してバケット内のオブジェクトを読み取る要求を開始した場合、要求は拒否されます。
次のDenyステートメントは、アクセスを拒否するためにのみ使用され、アクセス権限は付与されません。 承認されたプリンシパルにアクセス権限が付与されていない場合は、Allowステートメントを追加できます。
{
"バージョン":"1" 、
"ステートメント":[
{
"効果":"拒否" 、
"Action":[
"oss:GetObject"
],
"プリンシパル":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"NotIpAddress":{
"acs:SourceIp":[
"203.0.113.5"
]
}
}
}
]
}
例7: VPCの特定のCIDRブロックを使用しないユーザーから送信されたリクエストを拒否する
VPCの特定のCIDRブロックからのみバケットへのアクセスを許可する場合は、次の2つのDenyステートメントをバケットポリシーに追加できます。
acs:SourceVpc
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、他のVPCまたはインターネットからのリクエストを拒否します。 他のVPCからのリクエストが指定された条件と一致せず、バケットポリシーのDenyステートメントがトリガーされます。 インターネットからのリクエストには指定されたVPC情報が含まれておらず、バケットポリシーのDenyステートメントがトリガーされるため、インターネットからのリクエストは指定された条件に一致しません。acs:SourceIp
およびacs:SourceVpc
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、VPCの他のCIDRブロックからのリクエストを拒否します。
上記の2つのDenyステートメントをバケットポリシーに追加すると、2つのステートメント間の論理関係はORになります。 上記の条件のいずれかが満たされると、要求は拒否されます。 次のサンプルコードは、t4nlw426y44rd3iq4 ****
VPCの192.168.0.0/16
CIDRブロックを使用しないユーザーからexamplebucket
という名前のバケット内のオブジェクトを読み取るリクエストを拒否するようにバケットポリシーを設定する方法の例です。
次のDenyステートメントでは、Principal要素はアスタリスク (*) で、Condition要素が指定されています。 この場合、Denyポリシーステートメントは、バケット所有者を含むすべてのユーザーに対して有効になります。 バケットに対する完全な権限を持つバケット所有者が、VPCの別のCIDRブロックを使用してバケット内のオブジェクトを読み取るリクエストを開始した場合、リクエストは拒否されます。
次のDenyステートメントは、アクセスを拒否するためにのみ使用され、アクセス権限は付与されません。 承認されたプリンシパルにアクセス権限が付与されていない場合は、Allowステートメントを追加できます。
{
"バージョン":"1" 、
"ステートメント":[
{
"効果":"拒否" 、
"Action":[
"oss:GetObject"
],
"プリンシパル":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4 ****"
]
}
}
},
{
"効果":"拒否" 、
"Action":[
"oss:GetObject"
],
"プリンシパル":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4 ****"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"192.168.0.0/16"
]
}
}
}
]
}
例8: 特定のパブリックIPアドレスまたはVPCを使用しないユーザーから送信されたリクエストを拒否する
特定のパブリックIPアドレスまたはVPCからのみバケットへのアクセスを許可する場合は、次の2つのDenyステートメントをバケットポリシーに追加できます。
acs:SourceIp
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、他のパブリックIPアドレスからのリクエストを拒否します。 ただし、VPCにはIPアドレスがあり、同時に特定のVPCからバケットへのアクセスを許可する必要もあります。 他のパブリックIPアドレスからのリクエストを拒否する場合は、指定したVPCからのリクエストが拒否されないように、条件としてStringNotLike
フィールドのacs:SourceVpc
パラメーターを指定する必要があります。acs: SourceVpc
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、他のVPCからのリクエストを拒否します。 ただし、特定のパブリックIPアドレスからバケットへのアクセスを同時に許可する必要があり、パブリックIPアドレスには指定されたVPC IDが含まれていません。 他のVPCからのリクエストを拒否する場合は、StringLike
フィールドのacs:SourceVpc
パラメーターを条件として指定する必要があります。
上記の2つのDenyステートメントをバケットポリシーに追加すると、2つのステートメント間の論理関係はORになります。 上記の条件のいずれかが満たされると、要求は拒否されます。 次のサンプルコードは、203.0.113.5
パブリックIPアドレスまたはt4nlw426y44rd3iq4 ****
VPCを使用しないユーザーからexamplebucket
という名前のバケット内のオブジェクトを読み取るリクエストを拒否するようにバケットポリシーを設定する方法の例を示しています。
次のDenyステートメントでは、Principal要素はアスタリスク (*) で、Condition要素が指定されています。 この場合、Denyポリシーステートメントは、バケット所有者を含むすべてのユーザーに対して有効になります。 バケットに対する完全な権限を持つバケット所有者が、別のパブリックIPアドレスまたは別のVPCを使用してバケット内のオブジェクトを読み取るリクエストを開始した場合、リクエストは拒否されます。
次のDenyステートメントは、アクセスを拒否するためにのみ使用され、アクセス権限は付与されません。 権限付与プリンシパルにアクセス権限が付与されていない場合は、Allowステートメントを追加できます。
{
"バージョン":"1" 、
"ステートメント":[
{
"効果":"拒否" 、
"Action":[
"oss:GetObject"
],
"プリンシパル":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringNotLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"203.0.113.5"
]
}
}
},
{
"効果":"拒否" 、
"Action":[
"oss:GetObject"
],
"プリンシパル":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4 ****"
]
}
}
}
]
}