バケットポリシーを使用すると、匿名ユーザーまたは Alibaba Cloud アカウント、Resource Access Management (RAM) ユーザー、RAM ロールなどの特定ユーザーによる特定の Object Storage Service (OSS) リソースへのアクセスを許可または拒否できます。たとえば、別の Alibaba Cloud アカウントの RAM ユーザーに、特定の OSS リソースに対する読み取り専用権限を付与できます。
説明
RAM ポリシーと比較して、バケットポリシーには、特定の OSS リソースへのアクセスを許可または拒否されるユーザーを指定する Principal 要素が追加で含まれています。バケットポリシーを使用すると、ユーザーごとに個別の権限を設定することなく、リソースに対する複数のユーザーのアクセス権限を一元的に管理できます。たとえば、Principal 要素に UID を指定して特定の RAM ユーザーを照合したり、Principal 要素をアスタリスク (*) に設定してすべてのユーザーを照合したりできます。
使用上の注意
バケットポリシーを設定する際に Principal 要素をアスタリスク (*) に設定し、Condition 要素を指定した場合、バケットポリシーはバケットのオーナーを含むすべてのユーザーに適用されます。この場合、アクセスリクエストが Deny 文をトリガーすると、デフォルトでバケットとその中のオブジェクトに対するすべてのアクセス権限を持つバケットオーナーからのリクエストであっても、そのリクエストは拒否されます。
バケットポリシーを設定する際に Principal 要素をアスタリスク (*) に設定し、Condition 要素を指定しない場合、バケットポリシーはバケットのオーナーを除くすべてのユーザーに適用されます。この場合、デフォルトでバケットとその中のオブジェクトに対するすべてのアクセス権限を持つバケットオーナーに対して Deny 文はトリガーされません。
例 1: 特定の RAM ユーザーにバケットへの読み書きアクセス権を付与する
チームの特定のメンバーやパートナーに、バケット内のオブジェクトをアップロード、ダウンロード、管理する権限を付与したい場合、バケットポリシーを設定してこれらのメンバーに権限を付与できます。RAM ユーザーごとにアクセスポリシーを設定する必要はありません。次のポリシー例では、UID が 27737962156157xxxx と 20214760404935xxxx の 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 ユーザーごとにアクセスポolicy を設定する必要はありません。次のポリシー例では、特定の 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 という名前のバケット内のすべてのオブジェクトを読み取ることを許可します。1 つの RAM ロールは指定されたセッションからのみバケット内のオブジェクトにアクセスでき、もう 1 つはすべてのセッションからバケット内のオブジェクトにアクセスできます。
バケットポリシーを使用して 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 (VPC) からのみバケットへのアクセスを許可したい場合は、acs:SourceVpc パラメーターを条件として指定し、バケットポリシーに Deny 文を追加して、他の VPC やインターネットからのリクエストを拒否できます。他の VPC やインターネットからのリクエストは、指定された VPC ID と一致しないため拒否されます。次のポリシー例では、t4nlw426y44rd3iq4xxxx ID で識別される VPC 以外のすべてのソースから examplebucket という名前のバケットへのすべてのオブジェクト読み取りリクエストを拒否します。
次の Deny 文では、Principal 要素はアスタリスク (*) に設定され、Condition 要素が指定されています。この場合、Deny 文はバケットのオーナーを含むすべてのユーザーに適用されます。バケットのオーナーが
t4nlw426y44rd3iq4xxxx以外の 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 アドレスや VPC からのリクエストは、指定されたパブリック IP アドレスと一致しないため拒否されます。次のポリシー例では、203.0.113.5 パブリック IP アドレスを使用しないユーザーから examplebucket という名前のバケット内のオブジェクトを読み取るリクエストを拒否します。
次の Deny 文では、Principal 要素はアスタリスク (*) に設定され、Condition 要素が指定されています。この場合、Deny 文はバケットのオーナーを含むすべてのユーザーに適用されます。バケットのオーナーが
203.0.113.5以外のパブリック 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 やインターネットからのリクエストは、指定された CIDR ブロックと一致しないため拒否されます。acs:SourceIpおよびacs:SourceVpcパラメーターを条件として指定し、バケットポリシーに Deny 文を追加して、指定された CIDR ブロック以外の CIDR ブロックからのリクエストを拒否します。
前述の Deny 文をバケットポリシーに追加すると、いずれかの条件が満たされた場合にアクセスが拒否されます。 以下のポリシー例では、t4nlw426y44rd3iq4xxxx VPC の 192.168.0.0/16 CIDR ブロックからのリクエストを除き、examplebucket という名前のバケット内のオブジェクトに対する読み取りリクエストが拒否されます。
次の Deny 文では、Principal 要素はアスタリスク (*) に設定され、Condition 要素が指定されています。この場合、Deny 文はバケットのオーナーを含むすべてのユーザーに適用されます。バケットのオーナーが
192.168.0.0/16以外の 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: 特定のパblic IP アドレスまたは VPC からのアクセスのみを許可する
特定のパブリック IP アドレスまたは VPC からのみバケットへのアクセスを許可したい場合は、バケットポリシーに次の Deny 文を追加できます。
acs:SourceIpパラメーターを条件として指定し、バケットポリシーに Deny 文を追加して、他のパブリック IP アドレスからのリクエストを拒否します。同時に、acs:SourceVpcパラメーターとStringNotLikeオペレーターを指定して、指定された VPC からのリクエストが拒否されないようにします。acs: SourceVpcパラメーターを条件として指定し、バケットポリシーに Deny 文を追加して、他の VPC からのリクエストを拒否します。同時に、acs:SourceVpcパラメーターとStringLikeオペレーターを指定して、指定された VPC 以外の VPC からのリクエストが拒否されないようにします。
上記の 2 つの Deny 文をバケットポリシーに追加すると、上記のいずれかの条件が満たされた場合にアクセスが拒否されます。次のポリシー例では、IP アドレスが 203.0.113.5 のユーザー、または VPC ID が t4nlw426y44rd3iq4xxxx のユーザーを除くすべてのユーザーが、宛先バケット examplebucket からファイルを読み取ることを拒否します。
次の Deny 文では、Principal 要素はアスタリスク (*) に設定され、Condition 要素が指定されています。この場合、Deny 文はバケットのオーナーを含むすべてのユーザーに適用されます。バケットのオーナーが
203.0.113.5およびt4nlw426y44rd3iq4xxxx以外のパブリック 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.*"
]
}
}
}
]
}例 11: バケットとオブジェクトの ACL を制限してパブリックアクセスを防止する
不正アクセスからデータを保護するために、2 つの Deny 文を設定して ACL ベースのパブリックアクセスを防止できます。
oss:x-oss-acl条件キーを使用して Deny 文を作成し、バケット ACL を非公開アクセスのみに制限します。公開読み取りまたは公開読み書き権限を設定しようとする試みはすべて拒否されます。oss:x-oss-object-acl条件キーを使用して Deny 文を作成し、オブジェクト ACL をprivateとdefaultに制限します。
上記の 2 つの deny 文をバケットポリシーに追加すると、いずれかの条件に一致するリクエストはすべて拒否されます。以下の例では、examplebucket でのパブリックアクセス設定を防止します。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:PutBucketAcl"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:examplebucket"
],
"Condition": {
"StringNotEquals": {
"oss:x-oss-acl": "private"
}
}
},
{
"Effect": "Deny",
"Action": [
"oss:PutObjectAcl"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:examplebucket/*"
],
"Condition": {
"StringNotEquals": {
"oss:x-oss-object-acl": [
"private",
"default"
]
}
}
}
]
}