パブリックアクセスブロックは、OSS リソースへの匿名アクセスを防止します。アカウント、バケット、アクセスポイント、またはオブジェクト FC アクセスポイントのレベルでこの機能を有効にすると、バケットポリシーと ACL に存在するパブリックアクセス権限が無視され、新しいパブリックアクセス権限がブロックされます。
バケットポリシーと ACL でのパブリックアクセスの確認
バケットポリシーと ACL (バケット ACL とオブジェクト ACL) を確認して、OSS オブジェクトがパブリックアクセス可能かどうかを判断します。いずれかの権限でパブリックアクセスが許可されている場合は、パブリックアクセスブロックを有効にしてください。
バケットポリシー
(推奨) GetBucketPolicyStatus API の呼び出し
GetBucketPolicyStatus API を呼び出して、バケットポリシーがパブリックアクセスを許可しているかどうかを確認します。
-
IsPublic が true の場合、バケットポリシーはパブリックアクセスを許可します。
-
IsPublic が false の場合、バケットポリシーはパブリックアクセスを許可しません。
詳細については、「GetBucketPolicyStatus」をご参照ください。
バケットポリシー設定の手動確認
非パブリックアクセスの条件と例
-
バケットポリシーのステートメントは、そのプリンシパルまたは条件要素が次のいずれかの基準を満たす場合、非パブリックと見なされます。
説明-
Action 要素と Resource 要素は、パブリックアクセスの評価に影響しません。
-
Effect 要素が Deny の場合、ポリシーはパブリックアクセスを許可しません。
要素
フィールド
値
プリンシパル
N/A
アスタリスク (*) ワイルドカードを含まない 1 つ以上の固定値。
条件
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
バケットポリシーに、すべての Virtual Private Cloud (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 の場合、パブリックアクセスは拒否されます。
異なるレベルにおけるパブリックアクセスブロックの優先順位
パブリックアクセスブロックは、アカウント、バケット、アクセスポイント、およびオブジェクト FC アクセスポイントのレベルで有効にできます。複数のレベルで設定されている場合、OSS は次の優先順序を適用します:
アカウント > バケット > アクセスポイント > オブジェクト FC アクセスポイント
上位レベルの設定は、競合する下位レベルの設定を上書きします。例えば、アカウントレベルでパブリックアクセスブロックを有効にすると、個々の設定に関係なく、すべてのバケット、アクセスポイント、およびオブジェクト FC アクセスポイントのパブリックアクセスがブロックされます。
-
バケットへのパブリックアクセスを許可するには、アカウントレベルとバケットの両方でパブリックアクセスブロックを無効にする必要があります。
-
アクセスポイントを介したパブリックアクセスを許可するには、アカウントレベル、関連するバケット、およびアクセスポイントでパブリックアクセスブロックを無効にする必要があります。
-
オブジェクト FC アクセスポイントを介したパブリックアクセスを許可するには、アカウントレベル、バケット、関連するアクセスポイント、およびオブジェクト FC アクセスポイントでパブリックアクセスブロックを無効にする必要があります。
使用上の注意
-
RAM ユーザーがパブリックアクセスブロックを管理するには、次の権限が必要です:
-
アカウントレベル:
oss:PutPublicAccessBlock、oss:GetPublicAccessBlock、およびoss:DeletePublicAccessBlock -
各バケット:
oss:PutBucketPublicAccessBlock、oss:GetBucketPublicAccessBlock、およびoss:DeleteBucketPublicAccessBlock -
各アクセスポイント:
oss:PutAccessPointPublicAccessBlock、oss:GetAccessPointPublicAccessBlock、およびoss:DeleteAccessPointPublicAccessBlock -
各オブジェクト FC アクセスポイント:
oss:PutAccessPointConfigForObjectProcess、oss:GetAccessPointConfigForObjectProcess、およびoss:DeleteAccessPointForObjectProcess
-
-
パブリックアクセスブロックが有効になっている場合、既存のパブリックアクセス権限は無視され、新しいパブリックアクセス権限は設定できません。この機能を無効にすると、既存の権限が再び有効になり、新しい権限を設定できるようになります。
-
バケットポリシーがすべてのユーザーにアクセスポイントの管理を許可している場合、アクセスポイントに対してパブリックアクセスブロックが有効になっていても、ユーザーはバケットの第 3 レベルのドメイン名を通じてアクセスポイントのパブリックアクセスブロックのステータスを変更できます。アクセスポイントの設定は、バケットのサブドメインを介して行われたリクエストには適用されません。
-
クロスリージョンレプリケーション (CRR) と同一リージョンレプリケーション (SRR) では、パブリックアクセスブロックの設定に関係なく、レプリケーション中にオブジェクト ACL が保持されます。コピー先のバケットでパブリックアクセスブロックが有効になっている場合、レプリケートされたオブジェクトの ACL が public-read または public-read-write であっても、それらのオブジェクトにパブリックアクセスすることはできません。
方法
OSS コンソールの使用
ossutil の使用
関連 API
RESTful API を直接呼び出すことができます。署名の計算をコードに含める必要があります。
-
アカウントレベルでパブリックアクセスをブロックするには、「PutPublicAccessBlock」をご参照ください。
-
バケットのパブリックアクセスをブロックするには、「PutBucketPublicAccessBlock」をご参照ください。
-
アクセスポイントのパブリックアクセスをブロックするには、「PutAccessPointPublicAccessBlock」をご参照ください。
-
オブジェクト FC アクセスポイントのパブリックアクセスをブロックするには、「PutAccessPointConfigForObjectProcess」をご参照ください。
関連トピック
バケット内のオブジェクトレベルのアクセスを制御するには、パブリックアクセスブロックをバケットポリシーおよびオブジェクト ACL と組み合わせます。