バケットポリシーとアクセス制御リスト (ACL) を設定することで、Object Storage Service (OSS) リソースへのパブリックアクセスを許可できます。パブリックアクセスには特定の権限や ID 検証が不要なため、データ漏洩や不要なアウトバウンドインターネットトラフィックのリスクが高まります。これらのリスクを軽減するため、OSS ではアカウントレベル、個々のバケット、アクセスポイント、または Object FC アクセスポイントでパブリックアクセスのブロックを有効にできます。この機能を有効にすると、既存のパブリック権限は無視され、新しいパブリック権限の付与が防止されるため、データセキュリティの確保に役立ちます。
リソースがパブリックにアクセス可能かどうかの判断
バケットポリシーと、バケット ACL やオブジェクト ACL を含むアクセス制御リスト (ACL) を確認して、OSS リソースがパブリックにアクセス可能かどうかを判断できます。いずれかの設定でパブリックアクセスが許可されている場合、リソースはリスクにさらされているため、パブリックアクセスのブロックを有効にする必要があります。
バケットポリシー
(推奨) API 操作の呼び出し
GetBucketPolicyStatus 操作を呼び出して、現在のバケットポリシーがパブリックアクセスを許可しているかどうかを確認できます。
IsPublic 応答フィールドが true に設定されている場合、現在のバケットポリシーはパブリックアクセスを許可しています。
IsPublic 応答フィールドが false に設定されている場合、現在のバケットポリシーはパブリックアクセスを許可していないか、バケットポリシーが設定されていません。
詳細については、「GetBucketPolicyStatus」をご参照ください。
手動チェック
非パブリックアクセスの条件と例
バケットポリシー内の文は、その Principal または Condition 要素が次のいずれかの条件を満たす場合、非パブリックと見なされます。
説明Action および Resource 要素は、アクセスがパブリックであるかどうかを判断するための条件としては使用されません。
バケットポリシーの Effect が Deny の場合、その文は非パブリックと見なされます。
要素
フィールド
値
Principal
N/A
1 つ以上の静的フィールドを指定します。値にアスタリスク (*) ワイルドカードを含めることはできません。
Condition
acs:SourceVpcId
1 つ以上の静的フィールドを指定します。値にアスタリスク (*) ワイルドカードを含めることはできません。
acs:SourceVpc
1 つ以上の静的フィールドを指定します。値にアスタリスク (*) ワイルドカードを含めることはできません。
acs:AccessId
1 つ以上の静的フィールドを指定します。値にアスタリスク (*) ワイルドカードを含めることはできません。
acs:SourceVpcIp
IPv4 アドレスの場合、マスクは 8 以上である必要があります。
IPv6 アドレスの場合、マスクは 32 以上である必要があります。
acs:SourceIp
IPv4 アドレスの場合、マスクは 8 以上である必要があります。
IPv6 アドレスの場合、マスクは 32 以上である必要があります。
非パブリックアクセスの例
{ "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" ] } ] }
パブリックアクセスの条件と例
バケットポリシーが非パブリックアクセスの条件を満たさない場合、パブリックアクセスを許可していると見なされます。以下にいくつかの例を示します。
例 1
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:GetObject", "Principal": "*", "Resource": "acs:oss:*:17464958576xxxx:examplebucket/*" } ] }例 2
ポリシーにパブリックアクセス (すべての VPC からのアクセスを許可) と非パブリックアクセス (指定されたユーザーからのアクセスのみを許可) の両方を許可する文が含まれている場合でも、そのポリシーはパブリックアクセスを許可していると見なされます。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:GetObject", "Principal": "*", "Resource": "acs:oss:*:17464958576xxxx:examplebucket/*", "Condition": { "StringLike": { "acs:SourceVpc": [ "vpc-*" ] } } }, { "Effect": "Allow", "Action": "oss:*", "Principal": "27464958576xxxx", "Resource": "*" } ] }
ACL
バケット ACL またはオブジェクト ACL が public-read または public-read-write に設定されている場合、パブリックアクセスが許可されます。
バケット ACL とオブジェクト ACL の両方が private に設定されている場合、パブリックアクセスは許可されません。
異なるレベルでのパブリックアクセスのブロック設定の優先度
OSS は、アカウント、バケット、アクセスポイント、および Object FC アクセスポイントのレベルでパブリックアクセスのブロックを有効にすることをサポートしています。これらのレベルでパブリックアクセスのブロック設定が一致しない場合、OSS は次の優先順位を使用して有効なアクセス権限を決定します。
Account > Bucket > Access point > Object FC Access Pointこの優先順位に基づき、より高いレベルでのパブリックアクセスのブロック設定が、より低いレベルでのパブリックアクセスが許可されるかどうかを決定します。アカウントレベルでパブリックアクセスのブロックが有効になっている場合、どのバケット、アクセスポイント、または Object FC アクセスポイントでもパブリックアクセスは許可されません。
バケットへのパブリックアクセスを許可するには、アカウントレベルおよびそのバケットでパブリックアクセスのブロックを無効にします。
アクセスポイントへのパブリックアクセスを許可するには、アカウントレベル、そのアクセスポイントに関連付けられたバケット、およびそのアクセスポイントでパブリックアクセスのブロックを無効にします。
Object FC アクセスポイントへのパブリックアクセスを許可するには、アカウントレベル、その Object FC アクセスポイントに関連付けられたアクセスポイント、そのアクセスポイントに関連付けられたバケット、およびその Object FC アクセスポイントでパブリックアクセスのブロックを無効にします。
使用上の注意
Resource Access Management (RAM) ユーザーがパブリックアクセスをブロックするには、次の権限が必要です。
アカウントレベル:
oss:PutPublicAccessBlock、oss:GetPublicAccessBlock、およびoss:DeletePublicAccessBlock。バケットレベル:
oss:PutBucketPublicAccessBlock、oss:GetBucketPublicAccessBlock、およびoss:DeleteBucketPublicAccessBlock。アクセスポイントレベル:
oss:PutAccessPointPublicAccessBlock、oss:GetAccessPointPublicAccessBlock、およびoss:DeleteAccessPointPublicAccessBlock。Object FC アクセスポイントレベル:
oss:PutAccessPointConfigForObjectProcess、oss:GetAccessPointConfigForObjectProcess、およびoss:DeleteAccessPointForObjectProcess。
パブリックアクセスのブロックが有効になっている場合、既存のパブリックアクセス権限は無視され、新しいパブリックアクセス権限を作成することはできません。パブリックアクセスのブロックが無効になっている場合、既存の権限が有効になり、新しいパブリックアクセス権限を作成できます。
バケットポリシーが誰でもアクセスポイントの管理 API 操作を呼び出せるように設定されている場合、アクセスポイントでパブリックアクセスのブロックが有効になっていても、ユーザーはバケットの第 3 レベルドメイン名を使用してそのパブリックアクセスのブロック設定を変更できます。これは、バケットの第 3 レベルドメイン名を使用して行われたリクエストは、アクセスポイントの設定の影響を受けないためです。
クロスリージョンレプリケーション (CRR) または同一リージョンレプリケーション (SRR) の場合、ソースバケットと宛先バケットでパブリックアクセスのブロックが有効になっているかどうかに関係なく、レプリケーション後にオブジェクトの ACL は保持されます。宛先バケットでパブリックアクセスのブロックが有効になっている場合、レプリケートされたオブジェクトの ACL が public-read または public-read-write であっても、それらのオブジェクトにパブリックにアクセスすることはできません。
方法
OSS コンソールの使用
ossutil コマンドラインインターフェイスの使用
関連 API 操作
プログラムに高いカスタマイズ要件がある場合は、直接 REST API リクエストを行うことができます。そのためには、署名を計算するためのコードを手動で記述する必要があります。
アカウントレベルでのパブリックアクセスのブロックの API 操作の詳細については、「PutPublicAccessBlock」をご参照ください。
バケットのパブリックアクセスのブロックの API 操作の詳細については、「PutBucketPublicAccessBlock」をご参照ください。
アクセスポイントのパブリックアクセスのブロックの API 操作の詳細については、「PutAccessPointPublicAccessBlock」をご参照ください。
Object FC アクセスポイントのパブリックアクセスのブロックの API 操作の詳細については、「PutAccessPointConfigForObjectProcess」をご参照ください。
リファレンス
パブリックアクセスのブロックを使用すると、アカウントレベル、および個々のバケット、アクセスポイント、Object FC アクセスポイントで権限を一元管理できます。バケット内のリソースや個々のオブジェクトをより詳細に制御するには、バケットポリシーとオブジェクト ACL を使用できます。