バケットポリシーを使用すると、Alibaba Cloudアカウント、RAMユーザー、RAMロールなどの匿名ユーザーまたは識別されたユーザーの特定のOSS (Object Storage Service) リソースへのアクセスを許可または拒否できます。 たとえば、特定のOSSリソースに対する読み取り専用権限を別のAlibaba CloudアカウントのRAMユーザーに付与できます。
説明
RAMポリシーと比較して、バケットポリシーには、特定のOSSリソースへのアクセスを許可または拒否されるユーザーを指定する追加のPrincipal要素が含まれています。 バケットポリシーを使用すると、各ユーザーに個別のアクセス許可を設定することなく、リソースに対する複数のユーザーのアクセス許可を一元管理できます。 たとえば、Principal要素にUIDを指定して特定のRAMユーザーを照合したり、Principal要素にアスタリスク (*) を設定してすべてのユーザーを照合したりできます。
使用上の注意
バケットポリシーを設定するときにPrincipal要素をアスタリスク (*) に設定し、Condition要素を指定すると、バケットポリシーはバケット所有者を含むすべてのユーザーに対して有効になります。 この場合、アクセス要求がDenyステートメントをトリガーすると、バケット所有者によって要求が行われた場合でも、要求は拒否されます。バケット所有者は、デフォルトでバケットとその中のオブジェクトに対するすべてのアクセス許可を持っています。
バケットポリシーを設定するときにPrincipal要素をアスタリスク (*) に設定し、Condition要素を指定しない場合、バケットポリシーはバケット所有者を除くすべてのユーザーに対して有効になります。 この場合、バケット所有者に対してはDenyステートメントはトリガーされません。バケット所有者は、デフォルトでバケットとその中のオブジェクトに対するすべてのアクセス許可を持っています。
例1: 特定のRAMユーザーにバケットへの読み取りおよび書き込みアクセス権を付与する
チームまたはパートナーの特定のメンバーに、バケット内のオブジェクトをアップロード、ダウンロード、および管理する権限を付与する場合は、これらのメンバーに権限を付与するようにバケットポリシーを設定できます。 RAMユーザーごとにアクセスポリシーを設定する必要はありません。 次のポリシーの例では、UIDが27737962156157xxxx
および20214760494035xxxx
であるRAMユーザーに、examplebucket
という名前のバケットを読み書きする権限を付与します。
次のAllowステートメントでは、RAMユーザーにバケットを一覧表示する権限が付与されていません。 RAMユーザーは、OSSコンソールの [バケット] ページからバケットを表示したり、許可されたバケットを入力したりできません。 RAMユーザーは、バケットをお気に入りのパスに追加することでバケットにアクセスできます。 詳細は、「OSSアクセスパス」をご参照ください。
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"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"
],
"Principal":[
"27737962156157xxxx",
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"oss:ListObjects"
],
"Principal":[
"27737962156157xxxx",
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket"
],
"Condition":{
"StringLike":{
"oss:Prefix":[
"*"
]
}
}
}
]
}
例2: 特定のRAMユーザーにバケットの特定のディレクトリを読み取る権限を付与する
バケット内の特定のプロジェクトオブジェクトを改ざんから保護し、特定のプロジェクトメンバーがこれらのオブジェクトを一覧表示して読み取ることを許可する場合は、プロジェクトオブジェクトを一覧表示して読み取る権限をメンバーに付与できます。 次のポリシーの例では、UIDが20214760404935xxxx
であるRAMユーザーに、examplebucket
という名前のバケットのhangzhou/2020
およびshanghai/2015
ディレクトリを読み取る権限を付与します。
次のAllowステートメントでは、RAMユーザーにバケットを一覧表示する権限が付与されていません。 RAMユーザーは、OSSコンソールの [バケット] ページからバケットを表示したり、許可されたバケットを入力したりできません。 RAMユーザーは、バケットをお気に入りのパスに追加することでバケットにアクセスできます。 詳細は、「OSSアクセスパス」をご参照ください。
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:GetObject",
"oss:GetObjectAcl",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*",
"acs:oss:*:174649585760xxxx:examplebucket/shanghai/2015/*"
]
},
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Condition":{
"StringLike":{
"oss:Prefix":[
"hangzhou/2020/*",
"shanghai/2015/*"
]
}
},
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket"
]
}
]
}
例3: すべてのユーザーに、バケット内のすべてのオブジェクトのみを一覧表示する権限を付与する
バケットをパブリックリソース共有に使用し、すべてのユーザーがオブジェクト名を表示できるようにしたいが、オブジェクトコンテンツを表示できないようにする場合は、Principal要素をアスタリスク (*) に設定し、すべてのユーザーにバケット内のすべてのオブジェクトを一覧表示する権限を付与できます。 次のポリシーの例では、examplebucket
という名前のバケット内のすべてのオブジェクトのみを一覧表示する権限をすべてのユーザーに付与します。
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket"
]
}
]
}
例4: バケットに関する情報を表示し、バケット内のすべてのオブジェクトを一覧表示する権限を特定のRAMユーザーに付与する
チームまたはパートナーの特定のメンバーに、バケットに関する情報を表示し、バケット内のすべてのオブジェクトを一覧表示する権限を付与する場合は、これらのメンバーに対応するRAMユーザーに権限を付与するようにバケットポリシーを設定できます。 RAMユーザーごとにアクセスポリシーを設定する必要はありません。 次のポリシーの例では、特定のRAMユーザーに、examplebucket
という名前のバケットに関する情報を表示し、バケット内のオブジェクトを一覧表示する権限を付与します。
次のAllowステートメントでは、RAMユーザーにバケットを一覧表示する権限が付与されていません。 RAMユーザーは、OSSコンソールの [バケット] ページからバケットを表示したり、許可されたバケットを入力したりできません。 RAMユーザーは、バケットをお気に入りのパスに追加することでバケットにアクセスできます。 詳細は、「OSSアクセスパス」をご参照ください。
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket"
]
}
]
}
例5: 特定のRAMロールにバケット内のオブジェクトを読み取る権限を付与する
RAMユーザーまたはアプリケーションがバケット内のオブジェクトへの一時的なアクセスを必要とする場合、RAMロールを作成し、必要な権限をRAMロールに割り当てることができます。 RAMユーザーまたはアプリケーションは、RAMロールを引き受けて、バケット内のオブジェクトへのアクセスに使用できる一時的なアクセス資格情報を取得できます。 次のサンプルポリシーでは、Alibaba Cloudアカウントの2つのRAMロールが、examplebucket
という名前のバケット内のすべてのオブジェクトを読み取ることができます。 一方のRAMロールは指定されたセッションからのみバケット内のオブジェクトにアクセスでき、もう一方のRAMロールはすべてのセッションからバケット内のオブジェクトにアクセスできます。
バケットポリシーを使用してRAMロールに権限を付与する場合は、Principal
要素をarn:sts ::< uid>:assumed-role/<role-name>/<session-name>
形式で指定します。 <role-name>
と <session-name>
の値は大文字と小文字を区別します。
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:GetObject"
],
"Effect": "Allow",
"Principal": [
"arn:sts::10323xxxxx72056:assumed-role/okrole/sessiontest",
"arn:sts::10323xxxxx72056:assumed-role/secondrole/*"
],
"Resource": [
"acs:oss:*:1032xxxxx672056:examplebucket/*"
]
}
]
}
例6: 特定のVPCへのアクセスを制限する
特定の仮想プライベートクラウド (VPC) からのみバケットへのアクセスを許可する場合は、acs:SourceVpc
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、他のVPCまたはインターネットからのリクエストを拒否します。 他のVPCからのリクエストが指定された条件と一致せず、バケットポリシーのDenyステートメントがトリガーされます。 インターネットからのリクエストが指定された条件と一致しないのは、リクエストにVPC情報が含まれておらず、バケットポリシーのDenyステートメントがトリガーされるためです。 次のサンプルポリシーは、t4nlw426y44rd3iq4xxxx
IDで識別されるVPC以外のすべてのソースからのexamplebucket
という名前のバケットへのすべてのオブジェクト読み取り要求を拒否します。
次のDenyステートメントでは、Principal要素はアスタリスク (*) で、Condition要素が指定されています。 この場合、拒否効果は、バケット所有者を含むすべてのユーザーに有効になります。 デフォルトでバケットに対する完全な権限を持つバケット所有者が、別のVPCを使用してバケット内のオブジェクトを読み取るリクエストを開始した場合、リクエストも拒否されます。
次のDenyステートメントは、アクセスを拒否するためにのみ使用され、アクセス権限は付与されません。 権限付与プリンシパルにアクセス権限が付与されていない場合は、Allowステートメントを追加できます。
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}
例7: 特定のパブリックIPアドレスへのアクセスを制限する
特定のパブリックIPアドレスからのみバケットへのアクセスを許可する場合は、acs:SourceIp
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、VPCまたは他のパブリックIPアドレスからのリクエストを拒否できます。 他のパブリックIPアドレスからのリクエストが指定された条件と一致せず、バケットポリシーのDenyステートメントがトリガーされます。 VPCからのリクエストが指定された条件と一致せず、バケットポリシーのDenyステートメントがトリガーされます。 次の例のポリシーは、203.0.113.5
パブリックIPアドレスを使用しないユーザーからのexamplebucket
という名前のバケット内のオブジェクトの読み取り要求を拒否します。
次のDenyステートメントでは、Principal要素はアスタリスク (*) で、Condition要素が指定されています。 この場合、拒否効果は、バケット所有者を含むすべてのユーザーに有効になります。 バケットに対する完全な権限をデフォルトで持つバケット所有者が、別のパブリックIPアドレスを使用してバケット内のオブジェクトを読み取る要求を開始した場合、その要求も拒否されます。
次のDenyステートメントは、アクセスを拒否するためにのみ使用され、アクセス権限は付与されません。 権限付与プリンシパルにアクセス権限が付与されていない場合は、Allowステートメントを追加できます。
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"NotIpAddress":{
"acs:SourceIp":[
"203.0.113.5"
]
}
}
}
]
}
例8: VPCの特定のCIDRブロックへのアクセスを制限する
VPCの特定のCIDRブロックからのみバケットへのアクセスを許可する場合は、次のDenyステートメントをバケットポリシーに追加できます。
acs:SourceVpc
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、他のVPCまたはインターネットからのリクエストを拒否します。 他のVPCからのリクエストが指定された条件と一致せず、バケットポリシーのDenyステートメントがトリガーされます。 インターネットからのリクエストにはVPC情報が含まれておらず、バケットポリシーのDenyステートメントがトリガーされるため、インターネットからのリクエストは指定された条件に一致しません。acs:SourceIp
およびacs:SourceVpc
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、VPCの他のCIDRブロックからのリクエストを拒否します。
上記の2つのDenyステートメントをバケットポリシーに追加すると、2つのステートメント間の論理関係はORになります。 上記の条件のいずれかが満たされると、アクセスは拒否されます。 次の例のポリシーは、VPCの192.168.0.0/16
CIDRブロックからのリクエストを除いて、examplebucket
という名前のバケット内のオブジェクトを読み取るリクエストを拒否します。t4nlw426y44rd3iq4xxxx
次のDenyステートメントでは、Principal要素はアスタリスク (*) で、Condition要素が指定されています。 この場合、拒否効果は、バケット所有者を含むすべてのユーザーに有効になります。 デフォルトでバケットに対する完全な権限を持つバケット所有者が、VPCの別のCIDRブロックを使用してバケット内のオブジェクトを読み取るリクエストを開始すると、リクエストは拒否されます。
次のDenyステートメントは、アクセスを拒否するためにのみ使用され、アクセス権限は付与されません。 権限付与プリンシパルにアクセス権限が付与されていない場合は、Allowステートメントを追加できます。
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
},
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"192.168.0.0/16"
]
}
}
}
]
}
例9: 特定のパブリックIPアドレスまたはVPCへのアクセスを制限する
特定のパブリックIPアドレスまたはVPCからのみバケットへのアクセスを許可する場合は、次のDenyステートメントをバケットポリシーに追加できます。
acs:SourceIp
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、他のパブリックIPアドレスからのリクエストを拒否します。 ただし、VPCにはIPアドレスがあり、同時に特定のVPCからバケットへのアクセスを許可する必要もあります。 他のパブリックIPアドレスからのリクエストを拒否する場合は、acs:SourceVpc
パラメーターとStringNotLike
演算子を指定して、指定したVPCからのリクエストが拒否されないようにする必要があります。acs: SourceVpc
パラメーターを条件として指定し、バケットポリシーにDenyステートメントを追加して、他のVPCからのリクエストを拒否します。 パブリックIPアドレスからのリクエストにはVPC情報は含まれておらず、VPC条件に基づいて拒否されます。 指定されたパブリックIPアドレスからのリクエストを許可するには、acs:SourceVpc
パラメーターとStringLike
演算子を指定して、指定されたIPアドレスが拒否されないようにする必要があります。
上記の2つのDenyステートメントをバケットポリシーに追加すると、2つのステートメント間の論理関係はORになります。 上記の条件のいずれかが満たされると、アクセスは拒否されます。 次の例のポリシーでは、IPアドレスが203.0.113.5
のユーザーまたはVPC IDがt4nlw426y44rd3iq4xxxx
のユーザーを除くすべてのユーザーが、宛先バケットexamplebucket
からファイルを読み取ることを拒否します。
次のDenyステートメントでは、Principal要素はアスタリスク (*) で、Condition要素が指定されています。 この場合、拒否効果は、バケット所有者を含むすべてのユーザーに有効になります。 デフォルトでバケットに対する完全な権限を持つバケット所有者が、別のパブリックIPアドレスまたは別のVPCを使用してバケット内のオブジェクトを読み取るリクエストを開始した場合、リクエストは拒否されます。
次のDenyステートメントは、アクセスを拒否するためにのみ使用され、アクセス権限は付与されません。 権限付与プリンシパルにアクセス権限が付与されていない場合は、Allowステートメントを追加できます。
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringNotLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"203.0.113.5"
]
}
}
},
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition":{
"StringLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}
例10: 一時的なアクセス資格情報を使用するユーザーへのAPIベースのアクセスの制限
一時的なアクセス資格情報を使用するユーザーにAPIベースのアクセスを制限する場合は、条件としてacs:AccessId
を指定し、バケットポリシーにDenyステートメントを追加して、Alibaba CloudアカウントまたはRAMユーザーのAccessKeyペアなどの非一時的なアクセス資格情報を使用してアクセスをブロックできます。 一時的でないアクセス資格情報を使用するアクセス要求は、Denyステートメントをトリガーします。 次の例のポリシーは、一時的なアクセス資格情報を使用するユーザーからの読み取りおよびリスト要求を除いて、examplebucket
という名前のバケットへのオブジェクト読み取りおよびリスト要求を拒否します。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition": {
"StringNotLike": {
"acs:AccessId": [
"TMP.*",
"STS.*"
]
}
}
}
]
}