パブリックアクセスブロックは、アカウント、バケット、アクセスポイント、またはオブジェクト FC アクセスポイントのレベルで Object Storage Service (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 がパブリック読み取りまたはパブリック読み取り/書き込みの場合、パブリックアクセスが許可されます。
バケット 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 がパブリック読み取りまたはパブリック読み取り/書き込みであっても、そのオブジェクトにパブリックアクセスすることはできません。
方法
OSS コンソールの使用
ossutil の使用
関連 API
コード内で署名計算を行い、RESTful API を直接呼び出します。
アカウントレベルでパブリックアクセスをブロックするには、「PutPublicAccessBlock」をご参照ください。
バケットのパブリックアクセスをブロックするには、「PutBucketPublicAccessBlock」をご参照ください。
アクセスポイントのパブリックアクセスをブロックするには、「PutAccessPointPublicAccessBlock」をご参照ください。
オブジェクト FC アクセスポイントのパブリックアクセスをブロックするには、「PutAccessPointConfigForObjectProcess」をご参照ください。
影響と移行ガイド
バケット ACL をパブリック読み取りからプライベートに変更した後にパブリックアクセスブロックを有効にすると、バケット内のオブジェクトへの匿名 URL リクエストに対して 403 Forbidden が返されます。匿名アクセスに依存するビジネスは中断されます。一般的なエラーレスポンスは次のようになります:
AccessDenied
You have no right to access this object because of bucket acl.バケットをパブリック読み取りに公開することなくアクセスを復元するには、匿名アクセスの代わりに次のいずれかの方法を使用します:
署名付き URL:指定された期間の一時的なアクセスを許可します。短期間または一度限りのアクセスシナリオでこの方法を使用します。
バケットポリシー:特定のアカウント、IP アドレス、またはリファラーに長期的なアクセスを許可します。既知の固定された呼び出し元セットを継続的に承認する必要がある場合にこの方法を使用します。
この変更を本番バケットに適用する前に、テストバケットで新しいアクセス方法を検証し、オフピーク時に変更を適用してビジネスに影響がないことを確認してから展開してください。
よくある質問
パブリックアクセスブロックが有効になっているためにバケットポリシーを作成できない場合はどうすればよいですか?
バケットでパブリックアクセスブロックが有効になっている場合、パブリックアクセスを許可するバケットポリシー (たとえば、Principal を * に設定するものなど) は拒否されます。リクエストは失敗し、HTTP 403 エラーとエラーメッセージ Put public bucket policy is not allowed が返されます。パブリックアクセスを許可するバケットポリシーを作成するには、まずバケットのパブリックアクセスブロックを無効にする必要があります。その後、バケットポリシーを作成できます。
パブリックアクセスブロックを無効にするにはどうすればよいですか?
次の手順では、バケットレベルを例として使用します:
OSS コンソールにログインします。
左側のナビゲーションペインで、バケット をクリックします。表示されたページで、対象のバケット名をクリックします。
公開アクセス禁止 タブで、パブリックアクセスブロックをオフにします。
表示される確認ダイアログボックスに、ダイアログボックスに表示されている確認フレーズを入力し、[OK] をクリックします。
パブリックアクセスブロックを無効にすると、既存のパブリックアクセス許可が再び有効になります。ACL がパブリック読み取りのバケットの場合、匿名ユーザーは再びバケット内のオブジェクトにアクセスできるようになります。
パブリックアクセスブロックを無効にした後、セキュリティリスクはありますか?
パブリックアクセスブロックを無効にすると、以前は無視されていたバケット ACL とバケットポリシーのアクセス許可が直ちに有効になります。パブリックアクセスブロックを無効にする前に、次のことを確認してください:
バケット ACL がプライベートに設定されていること。
オブジェクト ACL がプライベートに設定されていること。
バケットポリシーが意図しないパブリックアクセスを許可していないこと。
関連ドキュメント
バケット内のオブジェクトレベルのアクセスを制御するには、パブリックアクセスブロックをバケットポリシーやオブジェクト ACL と組み合わせます。
モニタリングとアラート
公開アクセス禁止 のステータスの変更は管理操作であり、リアルタイムのアクセスログには記録されません。ステータスの変更を監視し、アラートを設定するには、ActionTrail のイベント追跡または API ポーリングを使用します。
ActionTrail イベント追跡 (推奨)
[ActionTrail コンソール] で、証跡を作成します。イベントタイプを管理イベントに設定し、イベントを [Simple Log Service (SLS)] に配信します。
[イベントアラート] ページで、アラートルールを作成し、イベント名を
PutBucketPublicAccessBlockとDeleteBucketPublicAccessBlockに設定します。公開アクセス禁止 のステータスが変更されると、アラート通知がトリガーされます。
API ポーリング
GetPublicAccessBlock オペレーションを呼び出して、アカウントレベルの 公開アクセス禁止 設定ステータスを取得します。結果をカスタムメトリックとして Cloud Monitor に報告し、しきい値ベースのアラートルールを設定します。