すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:パブリックアクセスブロック

最終更新日:Apr 11, 2025

バケットポリシーとアクセス制御リスト (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:PutPublicAccessBlockoss:GetPublicAccessBlockoss:DeletePublicAccessBlock

    • 個々のバケット: oss:PutBucketPublicAccessBlockoss:GetBucketPublicAccessBlockoss:DeleteBucketPublicAccessBlock

    • 個々のアクセスポイント: oss:PutAccessPointPublicAccessBlockoss:GetAccessPointPublicAccessBlockoss:DeleteAccessPointPublicAccessBlock

    • 個々の Object FC アクセスポイント: oss:PutAccessPointConfigForObjectProcessoss:GetAccessPointConfigForObjectProcessoss:DeleteAccessPointForObjectProcess

  • パブリックアクセスブロックを有効にすると、既存のパブリックアクセス権限は無視され、パブリックアクセス権限を設定できなくなります。パブリックアクセスブロックを無効にすると、既存のパブリックアクセス権限が再び有効になり、新しいパブリックアクセス権限を設定できるようになります。

  • すべてのユーザーがバケットのアクセスポイントを管理できるようにするバケットポリシーを設定した場合、アクセスポイントのパブリックアクセスブロックが有効になっている場合でも、ユーザーはバケットの第 3 レベルドメイン名を使用してアクセスポイントのパブリックアクセスブロックの状態を変更できます。アクセスポイントの設定は、バケットのサブドメインを使用して作成されたアクセスリクエストには影響しません。

  • クロスリージョンレプリケーション (CRR) または同一リージョンレプリケーション (SRR) タスクの場合、ソースバケットとデスティネーションバケットのパブリックアクセスブロックが有効になっているかどうかに関係なく、レプリケーション前後のオブジェクトの ACL は影響を受けません。デスティネーションバケットのパブリックアクセスブロックが有効になっている場合、オブジェクトの ACL が public-read または public-read-write であっても、デスティネーションバケットにレプリケートされたオブジェクトへのパブリックアクセスは許可されません。

方法

OSS コンソールを使用する

グローバルレベルでパブリックアクセスブロックを有効にする

  1. OSS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、データサービス > 公開アクセス禁止 を選択します。

  3. 公開アクセス禁止 ページで、パブリックアクセスブロックをオンにし、画面の指示に従って設定を完了します。

バケットのパブリックアクセスブロックを有効にする

  1. OSS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、権限管理 > 公開アクセス禁止 を選択します。

  4. 公開アクセス禁止 タブで、パブリックアクセスブロックをオンにし、画面の指示に従って設定を完了します。

アクセスポイントのパブリックアクセスブロックを有効にする

  1. OSS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、エンドポイントリスト をクリックします。[アクセスポイント] ページで、パブリックアクセスブロックを有効にするアクセスポイントの名前をクリックします。

  3. エンドポイントの基本情報 セクションで、パブリックアクセスブロックの横にある [有効化] をクリックし、画面の指示に従って設定を完了します。

Object FC アクセスポイントのパブリックアクセスブロックを有効にする

  1. OSS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、オブジェクト FC アクセスポイントリスト をクリックします。[Object FC アクセスポイント] ページで、パブリックアクセスブロックを有効にする Object FC アクセスポイントをクリックします。

  3. FC アクセスポイントの基本情報 セクションで、パブリックアクセスブロックの横にある [有効化] をクリックし、画面の指示に従って設定を完了します。

ossutil を使用する

ossutil を使用してパブリックアクセスブロックを有効にすることができます。 ossutil のインストール方法については、「ossutil のインストール」をご参照ください。

  • 次のサンプルコマンドは、グローバルレベルでパブリックアクセスブロックを有効にします。

    ossutil api put-public-access-block --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    詳細については、「put-public-access-block」をご参照ください。

  • 次のサンプルコマンドは、examplebucket という名前のバケットのパブリックアクセスブロックを有効にします。

    ossutil api put-bucket-public-access-block --bucket examplebucket --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    詳細については、「put-bucket-public-access-block」をご参照ください。

  • 次のサンプルコマンドは、アクセスポイントのパブリックアクセスブロックを有効にします。

    ossutil api put-access-point-public-access-block --bucket examplebucket --access-point-name ap-01 --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    詳細については、「put-access-point-public-access-block」をご参照ください。

OSS API を使用する

ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。

  • グローバルレベルでパブリックアクセスブロックを有効にするには、PutPublicAccessBlock オペレーションを呼び出します。詳細については、「PutPublicAccessBlock」をご参照ください。

  • バケットのパブリックアクセスブロックを有効にするには、PutBucketPublicAccessBlock オペレーションを呼び出します。詳細については、「PutBucketPublicAccessBlock」をご参照ください。

  • アクセスポイントのパブリックアクセスブロックを有効にするには、PutAccessPointPublicAccessBlock オペレーションを呼び出します。詳細については、「PutAccessPointPublicAccessBlock」をご参照ください。

  • Object FC アクセスポイントのパブリックアクセスブロックを有効にするには、PutAccessPointConfigForObjectProcess オペレーションを呼び出します。詳細については、「PutAccessPointConfigForObjectProcess」をご参照ください。

関連トピック

パブリックアクセスブロック設定は、グローバルレベル、および個々のバケット、アクセスポイント、Object FC アクセスポイントのアクセス権限を管理します。バケット内のオブジェクトに対してよりきめ細かいアクセス制御を実装するには、パブリックアクセスブロック設定とバケットポリシーおよびオブジェクト ACLを組み合わせることができます。