バケットポリシーとアクセス制御リスト (ACL) を設定することで、Object Storage Service (OSS) リソースへのパブリックアクセスを許可できます。パブリックアクセスでは、権限検証と認証が不要になるため、データ漏洩とアウトバウンドインターネットトラフィックのリスクが高まります。パブリックアクセスに関連するリスクを軽減するために、OSS では、グローバルレベルと個々のバケット、アクセスポイント、および Object FC アクセスポイントに対して、数ステップでパブリックアクセスブロックを有効にすることができます。パブリックアクセスブロックを有効にすると、既存のパブリックアクセス権限は無視され、パブリックアクセス権限を設定できなくなります。これにより、パブリックデータアクセスが無効になり、データセキュリティが確保されます。
バケットポリシーと ACL でパブリックアクセスが許可されているかどうかを確認する
OSS オブジェクトがパブリックにアクセス可能かどうかを評価するには、バケットポリシーと ACL (バケット ACL とオブジェクト ACL を含む) を確認する必要があります。いずれかの権限設定でパブリックアクセスが付与されている場合、リソースはセキュリティリスクに直面するため、パブリックアクセスブロックを有効にすることをお勧めします。
バケットポリシー
(推奨) GetBucketPolicyStatus オペレーションを呼び出す
GetBucketPolicyStatus オペレーションを呼び出して、バケットポリシーがパブリックアクセスを許可しているかどうかを確認できます。
IsPublic レスポンスパラメータの値が true の場合、バケットポリシーはパブリックアクセスを許可します。
IsPublic レスポンスパラメータの値が false の場合、バケットポリシーはパブリックアクセスを許可しません。
詳細については、「GetBucketPolicyStatus」をご参照ください。
バケットポリシー設定を手動で確認する
非パブリックアクセスの条件と例
ポリシー文のいずれか 1 つで、プリンシパルまたは条件のいずれかが次の表にリストされている基準のいずれかを満たしている場合、バケットポリシーは非パブリックアクセスを許可していると見なされます。
説明Action 要素と Resource 要素は、バケットポリシーがパブリックアクセスを許可するかどうかを決定しません。
バケットポリシーの Effect 要素の値が Deny の場合、バケットポリシーはパブリックアクセスを許可しません。
要素
フィールド
値
プリンシパル
該当なし
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
バケットポリシーに、すべての仮想プライベートクラウド (VPC) からのアクセスを許可するパブリックアクセス文と、特定のユーザーからのみアクセスを許可する非パブリックアクセス文の両方が含まれている場合、バケットポリシーはパブリックアクセスを許可していると見なされます。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:GetObject", "Principal": "*", // 全てのプリンシパル "Resource": "acs:oss:*:17464958576xxxx:examplebucket/*", "Condition": { "StringLike": { "acs:SourceVpc": [ "vpc-*" // 全ての VPC ] } } }, { "Effect": "Allow", "Action": "oss:*", "Principal": "27464958576xxxx", // 特定のプリンシパル "Resource": "*" } ] }
ACL
バケット ACL またはオブジェクト ACL が public-read または public-read-write に設定されている場合、パブリックアクセスが許可されます。
バケット ACL とオブジェクト ACL の両方が private に設定されている場合、パブリックアクセスは拒否されます。
異なるレベルでのパブリックアクセスブロック設定の優先順位
OSS では、グローバルレベルと個々のバケット、アクセスポイント、および Object FC アクセスポイントに対してパブリックアクセスブロックを有効にすることができます。パブリックアクセスブロック設定が異なるレベルで構成されている場合、OSS は次の優先順位を使用して最終的なアクセス効果を決定します。
OSS リソース > バケット > アクセスポイント > Object FC アクセスポイント
次のレベルでパブリックアクセスが許可されるかどうかは、前のレベルのパブリックアクセスブロック設定によって異なります。グローバルレベルでパブリックアクセスブロックが有効になっている場合、個々のバケット、アクセスポイント、および Object FC アクセスポイントへのパブリックアクセスはブロックされます。
バケットへのパブリックアクセスを許可するには、グローバルレベルとバケットのパブリックアクセスブロックを無効にする必要があります。
アクセスポイントを使用してバケットへのパブリックアクセスを許可するには、グローバルレベル、アクセスポイントが関連付けられているバケット、およびアクセスポイントのパブリックアクセスブロックを無効にする必要があります。
Object FC アクセスポイントを使用してバケットへのパブリックアクセスを許可するには、グローバルレベル、バケットのアクセスポイント、アクセスポイントが関連付けられているバケット、および Object FC アクセスポイントのパブリックアクセスブロックを無効にする必要があります。
使用上の注意
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
パブリックアクセスブロックを有効にすると、既存のパブリックアクセス権限は無視され、パブリックアクセス権限を設定できなくなります。パブリックアクセスブロックを無効にすると、既存のパブリックアクセス権限が再び有効になり、新しいパブリックアクセス権限を設定できるようになります。
すべてのユーザーがバケットのアクセスポイントを管理できるようにするバケットポリシーを設定した場合、アクセスポイントのパブリックアクセスブロックが有効になっている場合でも、ユーザーはバケットの第 3 レベルドメイン名を使用してアクセスポイントのパブリックアクセスブロックの状態を変更できます。アクセスポイントの設定は、バケットのサブドメインを使用して作成されたアクセスリクエストには影響しません。
クロスリージョンレプリケーション (CRR) または同一リージョンレプリケーション (SRR) タスクの場合、ソースバケットとデスティネーションバケットのパブリックアクセスブロックが有効になっているかどうかに関係なく、レプリケーション前後のオブジェクトの ACL は影響を受けません。デスティネーションバケットのパブリックアクセスブロックが有効になっている場合、オブジェクトの ACL が public-read または public-read-write であっても、デスティネーションバケットにレプリケートされたオブジェクトへのパブリックアクセスは許可されません。
方法
OSS コンソールを使用する
ossutil を使用する
OSS API を使用する
ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。
グローバルレベルでパブリックアクセスブロックを有効にするには、PutPublicAccessBlock オペレーションを呼び出します。詳細については、「PutPublicAccessBlock」をご参照ください。
バケットのパブリックアクセスブロックを有効にするには、PutBucketPublicAccessBlock オペレーションを呼び出します。詳細については、「PutBucketPublicAccessBlock」をご参照ください。
アクセスポイントのパブリックアクセスブロックを有効にするには、PutAccessPointPublicAccessBlock オペレーションを呼び出します。詳細については、「PutAccessPointPublicAccessBlock」をご参照ください。
Object FC アクセスポイントのパブリックアクセスブロックを有効にするには、PutAccessPointConfigForObjectProcess オペレーションを呼び出します。詳細については、「PutAccessPointConfigForObjectProcess」をご参照ください。
関連トピック
パブリックアクセスブロック設定は、グローバルレベル、および個々のバケット、アクセスポイント、Object FC アクセスポイントのアクセス権限を管理します。バケット内のオブジェクトに対してよりきめ細かいアクセス制御を実装するには、パブリックアクセスブロック設定とバケットポリシーおよびオブジェクト ACLを組み合わせることができます。