バケットポリシーとアクセス制御リスト (ACL) を設定することで、Object Storage Service (OSS) リソースへのパブリックアクセスを許可できます。 パブリックアクセスは、特定の権限または認証なしでOSSリソースへのアクセスを指定します。 パブリックアクセスは、データ侵害を引き起こしやすく、悪意のあるアクセスによりインターネット上に大量のアウトバウンドトラフィックを生成する可能性があります。 パブリックアクセスによって引き起こされるリスクを防ぐために、OSSでは、OSS、バケット、アクセスポイント、およびObject FCアクセスポイントに対して、いくつかの手順でブロックパブリックアクセスを有効にできます。 ブロックパブリックアクセスを有効にすると、既存のパブリックアクセス権限は無視され、パブリックアクセス権限を設定できません。 これにより、パブリックデータアクセスチャネルが無効になり、データセキュリティが確保されます。
バケットポリシーとACLでパブリックアクセスが許可されているかどうかを確認
OSS、バケット、アクセスポイント、またはオブジェクトFCアクセスポイントへのパブリックアクセスが許可されているかどうかを確認するには、バケットACLとオブジェクトACLを含むバケットポリシーとACLを表示する必要があります。 バケットポリシーまたはACLでパブリックアクセスが許可されている場合、リソースが不正なユーザーに公開される可能性があります。 パブリックアクセスを防止するには、ブロックパブリックアクセスを有効にします。
バケットポリシー
(推奨) APIを呼び出して、バケットポリシーでパブリックアクセスが許可されているかどうかを確認します
GetBucketPolicyStatus操作を呼び出して、バケットポリシーでパブリックアクセスが許可されているかどうかを確認できます。
IsPublicレスポンスパラメーターの値がtrueの場合、バケットポリシーでパブリックアクセスが許可されます。
IsPublicレスポンスパラメーターの値がfalseの場合、バケットポリシーでパブリックアクセスが拒否されます。
詳細については、「GetBucketPolicyStatus」をご参照ください。
バケットポリシーを表示して、バケットポリシーでパブリックアクセスが許可されているかどうかを確認します
非パブリックアクセスの条件と例
特定の条件が満たされている場合にのみ、バケットポリシーでパブリックアクセスは許可されません。 次の表に条件を示します。
説明Action要素とResource要素は、バケットポリシーでパブリックアクセスが許可されているかどうかを確認するための条件としては使用されません。
バケットポリシーのEffect要素の値がDenyの場合、バケットポリシーのパブリックアクセスは拒否されます。
要素
フィールド
例
依頼人
N/A
1つ以上のフィールドを固定値に設定します。 値にアスタリスク (*) ワイルドカード文字を含めることはできません。
Condition
acs:SourceVpcId
acs:SourceVpcIp
acs:SourceVpc
acs:AccessId
acs:SourceIp
IPv4アドレスの場合、マスクは8以上でなければなりません。
IPv6アドレスの場合、マスクは32以上でなければなりません。
次のサンプルコードは、パブリックアクセスを拒否するバケットポリシーの例を示しています。
{ "バージョン":"1" 、 "ステートメント":[ { "Action":[ "oss:GetObject"、 "oss:GetObjectAcl" 、 "oss:GetObjectVersion" 、 "oss:GetObjectVersionAcl" ], "効果":"許可" 、 "プリンシパル":[ "20214760404935xxxx" ], "Resource":[ "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*" 、 "acs:oss:*:174649585760xxxx:examplebucket/shanghai/2015/*" ] }, { "Action":[ "oss:ListObjects", "oss:ListObjectVersions" ], "Condition":{ "StringLike":{ "oss: プレフィックス":[ "hangzhou/2020/*" 、 "上海 /2015/*" ] } }, "効果":"許可" 、 "プリンシパル":[ "20214760404935xxxx" ], "Resource":[ "acs:oss:*:174649585760xxxx:examplebucket" ] } ] }
パブリックアクセスの条件と例
非パブリックアクセスの条件の1つが満たされていない場合、バケットポリシーでパブリックアクセスが許可されます。 例:
例 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:*", "プリンシパル": "27464958576xxxx" 、 "Resource": "*" } ] }
ACL
バケットACLまたはオブジェクトACLがpublic-readまたはpublic-read-writeに設定されている場合、パブリックアクセスが許可されます。
バケットACLとオブジェクトACLの両方がプライベートに設定されている場合、パブリックアクセスは拒否されます。
ブロックパブリックアクセス設定の優先度
OSSでは、OSS、バケット、アクセスポイント、またはオブジェクトFCアクセスポイントのブロックパブリックアクセスを有効にできます。 ブロックパブリックアクセスの設定が異なる場合、OSSは次の優先順位を適用します。
OSS> バケット> アクセスポイント> オブジェクトFCアクセスポイント
パブリックアクセスが次のレベルで許可されるかどうかは、前のレベルのブロックパブリックアクセス設定によって異なります。 OSSでブロックパブリックアクセスが有効になっている場合、バケット、アクセスポイント、またはオブジェクトFCアクセスポイントへのパブリックアクセスは許可されません。
バケットへのパブリックアクセスを許可する場合は、OSSとバケットのブロックパブリックアクセスを無効にする必要があります。
アクセスポイントを使用してバケットへのパブリックアクセスを許可する場合は、アクセスポイントが関連付けられているバケット、およびアクセスポイントを無効にする必要があります。
オブジェクトFCアクセスポイントを使用してバケットへのパブリックアクセスを許可する場合は、OSSのブロックパブリックアクセス、バケットのアクセスポイント、アクセスポイントが関連付けられているバケット、およびオブジェクトFCアクセスポイントを無効にする必要があります。
使用上の注意
RAMユーザーを使用してバケットとアクセスポイントのブロックパブリックアクセスを有効にするには、RAMユーザーに次の権限が必要です。
OSSのブロックパブリックアクセスを有効にする:
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 コンソールの使用
OSS APIの使用
参考資料
ブロックパブリックアクセスを使用すると、OSS、バケット、アクセスポイント、およびオブジェクトFCアクセスポイントへのアクセスを一元管理できます。 バケットまたはオブジェクト内の特定のリソースへのアクセスをきめ細かく管理するには、[バケットポリシー] と [オブジェクトACL] を一緒に使用する必要があります。