パブリックアクセスブロックは、アカウント、バケット、アクセスポイント、またはオブジェクト FC アクセスポイントのレベルで OSS リソースへの匿名アクセスを防止します。この機能を有効にすると、既存のパブリックアクセス権限は無視され、新しいパブリックアクセス権限は作成できなくなります。
バケットポリシーと ACL でのパブリックアクセスの確認
バケットポリシーと ACL を確認し、オブジェクトがパブリックアクセス可能かどうかを判断します。パブリックアクセスを許可する設定がある場合は、パブリックアクセスブロックを有効にします。
バケットポリシー
(推奨) GetBucketPolicyStatus API の呼び出し
GetBucketPolicyStatus API を呼び出して、バケットポリシーがパブリックアクセスを許可しているかどうかを確認します。
IsPublic が true の場合、バケットポリシーはパブリックアクセスを許可しています。
IsPublic が false の場合、バケットポリシーはパブリックアクセスを許可していません。
詳細については、「GetBucketPolicyStatus」をご参照ください。
バケットポリシー設定の手動確認
非パブリックアクセスの条件と例
バケットポリシーのステートメントは、そのプリンシパルまたは Condition 要素がこれらの基準のいずれかを満たす場合、非パブリックと見なされます。
説明Action および Resource 要素は、パブリックアクセスの評価に影響しません。
Effect 要素が Deny の場合、ポリシーはパブリックアクセスを許可しません。
要素
フィールド
値
プリンシパル
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 の両方がプライベートの場合、パブリックアクセスは拒否されます。
パブリックアクセスブロックの優先順位
パブリックアクセスブロックは、アカウント、バケット、アクセスポイント、およびオブジェクト 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
有効にすると、既存のパブリックアクセス権限は無視され、新しい権限は設定できなくなります。無効にすると、既存の権限が復元され、新しい権限が設定できるようになります。
バケットポリシーがすべてのユーザーにアクセスポイントの管理を許可している場合、アクセスポイントでパブリックアクセスブロックが有効になっていても、ユーザーはバケットのサブドメインを介してそのパブリックアクセスブロックのステータスを変更できます。アクセスポイントの設定は、バケットのサブドメインを介したリクエストには適用されません。
クロスリージョンレプリケーション (CRR) および同一リージョンレプリケーション (SRR) 中、オブジェクト ACL はパブリックアクセスブロックの設定に関係なく保持されます。送信先バケットでパブリックアクセスブロックが有効になっている場合、レプリケートされたオブジェクトの ACL が public-read または public-read-write であっても、それらのオブジェクトにパブリックアクセスすることはできません。
方法
OSS コンソールの使用
ossutil の使用
関連 API
コード内で署名を計算し、RESTful API を直接呼び出します。
アカウントレベルでパブリックアクセスをブロックするには、「PutPublicAccessBlock」をご参照ください。
バケットのパブリックアクセスをブロックするには、「PutBucketPublicAccessBlock」をご参照ください。
アクセスポイントのパブリックアクセスをブロックするには、「PutAccessPointPublicAccessBlock」をご参照ください。
オブジェクト FC アクセスポイントのパブリックアクセスをブロックするには、「PutAccessPointConfigForObjectProcess」をご参照ください。
関連トピック
バケット内のオブジェクトレベルのアクセスを制御するには、パブリックアクセスブロックをバケットポリシーおよびオブジェクト ACL と組み合わせます。