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

Object Storage Service:バケットポリシー

最終更新日:Feb 07, 2026

バケットポリシーは、バケットにアタッチされる権限付与ポリシーです。他の Alibaba Cloud アカウント、RAM ユーザー、または匿名ユーザーに対してアクセスを許可する場合に使用できます。バケットポリシーは、クロスアカウント認証、匿名アクセス制御、および IP アドレスまたは VPC を基準としたアクセス制限をサポートします。

仕組み

バケットポリシーは、リソースベースの認可モデルを使用します。ポリシーはバケットに直接アタッチされ、特定の条件のもとで、ユーザー、アカウント、ロールなどのプリンシパルが、どのリソースに対してどのような操作を実行できるかを定義します。

ユーザーがアクセス要求を送信すると、OSS はバケットポリシーおよび RAM ポリシーを含むすべての関連ポリシーを評価し、「明示的な拒否が優先される(explicit deny takes precedence)」ルールを適用します。明示的な Deny ステートメントが存在する場合、その要求は即座にブロックされ、すべての Allow ステートメントを上書きします。Deny も Allow も該当しない場合、要求はデフォルトで拒否されます。

バケットポリシーは、以下の特別なルールに従ってバケットオーナーにも適用されます:

  • プリンシパルがワイルドカード文字(*)に設定されており、かつ条件(Condition)が指定されていない場合、そのポリシーはバケットオーナー以外のユーザーにのみ適用されます

  • プリンシパルがワイルドカード文字(*)に設定されており、かつ条件(Condition)が指定されている場合、そのポリシーはバケットオーナーを含むすべてのユーザーに適用されます

同じユーザーに対して複数のバケットポリシーステートメントを設定した場合、そのユーザーの有効な権限は、すべてのステートメントの UNION となり、拒否が優先される ルールに従います。

重要
  • acs:SourceIp を含むバケットポリシーを設定する場合は、必ず acs:SourceVpc も併記してください。

バケットポリシーの設定

OSS では、グラフィカルな方法と構文ベースの方法の 2 種類の設定方法をサポートしています。ご利用のユースケースに最も適した方法を選択してください。

  • グラフィカルな方法:一般的な認可シナリオ向けに直感的でフォームベースの操作体験を提供し、ポリシー設定を簡素化します。

  • 構文ベースの方法:JSON を使用して完全なポリシーを作成します。この方法は、すべての高度な機能および複雑な条件の組み合わせをサポートし、最大限の柔軟性を提供します。

グラフィカルな方法

  1. バケット一覧に移動し、対象のバケットをクリックします。

  2. 左側のナビゲーションウィンドウで、アクセスの制御 > バケットポリシー をクリックします。

  3. GUI で追加 をクリックし、新規権限 をクリックして、設定を行います。

    設定項目

    説明

    関連リソース

    バケット全体 または 指定されたリソース のいずれかを選択して、権限を付与します。

    リソースパス

    • 関連リソース = バケット全体 を選択した場合、リソースパスbucket-name/* になります。

    • 関連リソース指定されたリソース に設定した場合、権限を付与するフォルダまたは個別のオブジェクトを入力します。複数のレコードを追加できます。

    ユーザー

    権限を付与するユーザーまたはアカウントを指定します。

    • すべてのアカウント (*):匿名ユーザーを含むすべてのユーザーを権限付与対象とします。

    • RAM ユーザー:現在の Alibaba Cloud アカウントから RAM ユーザーを選択します。

      Alibaba Cloud アカウントまたは、バケット管理権限および RAM コンソールにおける ListUsers 権限の両方を持つ RAM ユーザーとしてログインしている必要があります。それ以外の場合、現在のアカウントの RAM ユーザー一覧を表示できません。

    • 他のアカウント:別の Alibaba Cloud アカウントまたは RAM ユーザーの UID、あるいは一時的なロールの ARN(例:arn:sts 形式、具体的には arn:sts::1798************:assumed-role/role-name/session-name)を入力します。複数のユーザーを 1 行ずつ指定できます。

      RAM ロールを権限付与対象とする場合、そのロールは OSS コンソール経由でバケットにアクセスできません。代わりに ossutil、SDK、または API を使用してください。

    許可された操作

    • 基本設定:一般的な権限の組み合わせから選択します。読み取り専用 (ListObject を除く)読み取り専用 (ListObject を除く)読み取り/書き込みフルコントロール、または アクセス拒否 のいずれかを選択します。

      説明

      OSS-HDFS サービスのユーザーが .dlsdata/ ディレクトリおよびそのオブジェクトにアクセスできるようにするため、OSS-HDFS が有効化されたバケットに対してバケットポリシーを設定する際は、アクセス拒否 を選択しないでください。

    • 詳細設定効果許可する または 拒否)および 操作 をカスタマイズします。

    条件(任意)

    ポリシーが適用される条件を設定します。

    • アクセス方式HTTPS または HTTP を選択します。選択した方式でリクエストが送信された場合にのみ、ポリシーが適用されます。

    • IP =:許可する IP アドレスまたは CIDR ブロックの一覧を入力します。これらの IP からのリクエストの場合にのみ、ポリシーが適用されます。

    • IP ≠:ブロックする IP アドレスまたは CIDR ブロックの一覧を入力します。これらの IP 以外からのリクエストの場合にのみ、ポリシーが適用されます。

    • VPC =:現在のアカウントから VPC を選択するか、他のアカウントの VPC ID を入力します。指定された VPC からのリクエストの場合にのみ、ポリシーが適用されます。

    • VPC ≠:現在のアカウントから VPC を選択するか、他のアカウントの VPC ID を入力します。指定された VPC 以外からのリクエストの場合にのみ、ポリシーが適用されます。

    複数の条件を指定した場合、ポリシーが適用されるにはすべての条件を満たす必要があります(AND 論理)。

  4. 設定内容を確認後、OK をクリックしてバケットポリシーを適用します。

構文ベースの方法

  1. バケット一覧に移動し、対象のバケットをクリックします。

  2. 左側のナビゲーションウィンドウで、アクセスの制御 > バケットポリシー をクリックします。

  3. 構文で追加 をクリックし、編集 をクリックして、エディターに JSON 形式のポリシーを入力します。

    例:VPC vpc-t4nlw426y44rd3iq4xxxx 以外から送信されたリクエストに対して、ユーザー 20214760404935xxxx による example-bucket 上のすべての操作を拒否するポリシーです。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": "oss:*",
                "Principal": [
                    "20214760404935xxxx"
                ],
                "Resource": [
                    "acs:oss:*:174649585760xxxx:example-bucket",
                    "acs:oss:*:174649585760xxxx:example-bucket/*"
                ],
                "Condition": {
                    "StringNotEquals": {
                        "acs:SourceVpc": "vpc-t4nlw426y44rd3iq4xxxx"
                    }
                }
            }
        ]
    }

    完全なポリシーには Version および Statement が必要です。

    • Version:ポリシーのバージョン。値は固定で 1 であり、変更できません。

    • Statement:ポリシーの本体で、1 つ以上の Allow または Deny ルールを含みます。各ステートメントには、EffectActionPrincipalResourceCondition の要素が含まれます。

      ポリシー要素

      説明

      例の権限付与ポリシーにおける意味

      Effect

      ポリシーの効果。有効な値は Allow または Deny です。

      リクエストを拒否します。

      Action

      リソースに対する操作。ワイルドカード文字 * を使用できます。

      OSS のすべての操作(oss:*)を拒否します。

      Principal

      ポリシーが適用されるエンティティ(ユーザー、アカウント、ロールなど)です。

      空のリスト(Principal:[])は、Principal:["*"] と同等の動作をします。

      ポリシーは RAM ユーザー 20214760404935xxxx にのみ適用されます。

      Resource

      ポリシーが適用されるリソースです。

      ポリシーは example-bucket およびそのすべてのオブジェクトに適用されます。

      Condition

      ポリシーが有効になる条件です。

      複数の条件を指定した場合、ポリシーが適用されるにはすべての条件を満たす必要があります(AND 論理)。

      Deny ルールは、VPC 以外vpc-t4nlw426y44rd3iq4xxxx から送信されたリクエストに対してのみ適用されます。

      ポリシー要素の完全な一覧については、「ポリシーの構文および要素」をご参照ください。

  4. ポリシー内容を確認後、保存 をクリックし、画面上の指示に従ってください。

ベクターバケット向けのバケットポリシーの設定

ベクターバケットでは、バケットポリシーの設定に構文ベースの方法のみがサポートされています。

  1. ベクターバケット一覧に移動し、対象のベクターバケットをクリックします。

  2. 左側のナビゲーションウィンドウで、アクセスの制御 > バケットポリシー をクリックします。

  3. 編集 をクリックして、エディターに JSON 形式のポリシーを入力します。

    例:このポリシーは、ユーザー 20816353761158**** に対して、vector-bucket-example バケット内の indextest インデックステーブルのベクトルデータに対する読み取りおよび書き込みアクセスを許可します。

    {
      "Version": "1",
      "Statement": [{
        "Effect": "Allow",
        "Action": [
          "oss:PutVectors",
          "oss:GetVectors"
        ],
        "Principal": [
          "20816353761158****"
        ],
        "Resource": [
          "acs:ossvector:*:*:vector-bucket-example/indextest"
        ]
      }]
    }

    完全なポリシーには Version および Statement が必要です。

    • Version:ポリシーのバージョン。値は固定で 1 であり、変更できません。

    • Statement:ポリシーの本体で、1 つ以上の Allow または Deny ルールを含みます。各ステートメントには、EffectActionPrincipalResourceCondition の要素が含まれます。

      ポリシー要素

      説明

      例の権限付与ポリシーにおける説明

      Effect

      ポリシーの効果。有効な値は Allow および Deny です。

      リクエストを許可します。

      Action

      リソースに対する操作。ワイルドカード文字 * を使用できます。

      ベクトルデータの読み取りおよび書き込み。

      Principal

      ポリシーが適用されるエンティティ(ユーザー、アカウント、ロールなど)です。

      空のリスト(Principal:[])は、Principal:["*"] と同等の動作をします。

      ポリシーは RAM ユーザー 20816353761158**** にのみ適用されます。

      Resource

      ポリシーが適用されるリソースです。

      ポリシーは、vector-bucket-example バケット内の indextest インデックステーブルに適用されます。

      Condition

      ポリシーが有効になる条件です。

      複数の条件を指定した場合、ポリシーが適用されるにはすべての条件を満たす必要があります(AND 論理)。

      なし。

      ポリシー要素の完全な一覧については、「ポリシーの構文および要素」をご参照ください。

  4. ポリシー内容を確認後、保存 をクリックし、画面上の指示に従ってください。

よくある権限付与のユースケース

以下に、バケットポリシーの典型的な実世界での利用例を示します。権限の付与、アクセス制限、セキュリティ制御をカバーしており、それぞれにご自身の要件に応じてカスタマイズ可能な完全なポリシー例が含まれています。

シナリオ 1:特定の RAM ユーザーへの読み取り/書き込み権限の付与

チームメンバーまたはパートナーに対して、バケットポリシーを使用して読み取り/書き込み権限を付与できます。この例では、UID が 27737962156157xxxx および 20214760404935xxxx の RAM ユーザーに対して、example-bucket バケットへの読み取り/書き込みアクセスを許可します。

説明

このポリシーは、RAM ユーザーに対してバケット一覧表示の権限を付与しません。そのため、ユーザーはバケット一覧ページですべてのバケットを表示したり、対象のバケットをクリックしたりすることはできません。代わりに、左側のナビゲーションウィンドウで お気に入りのパス > + をクリックすることで、バケットを追加およびアクセスできます。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "oss:GetObject",
                "oss:PutObject",
                "oss:GetObjectAcl",
                "oss:PutObjectAcl",
                "oss:AbortMultipartUpload",
                "oss:ListParts",
                "oss:RestoreObject",
                "oss:GetVodPlaylist",
                "oss:PostVodPlaylist",
                "oss:PublishRtmpStream",
                "oss:ListObjectVersions",
                "oss:GetObjectVersion",
                "oss:GetObjectVersionAcl",
                "oss:RestoreObjectVersion"
            ],
            "Principal":[
                "27737962156157xxxx",
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ]
        },
        {
            "Effect":"Allow",
            "Action":[
                "oss:ListObjects"
            ],
            "Principal":[
                "27737962156157xxxx",
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "*"
                    ]
                }
            }
        }
    ]
}

シナリオ 2:特定の RAM ユーザーに対する特定ディレクトリの読み取り専用権限の付与

プロジェクトファイルを改ざんから保護しつつ、承認済みユーザーによる読み取りを許可できます。この例では、RAM ユーザー 20214760404935xxxx に対して、example-bucket バケットの読み取り専用アクセスを許可します。アクセス範囲は、プレフィックス hangzhou/2020 および shanghai/2015 を持つディレクトリに限定されます。

説明

このポリシーは、RAM ユーザーに対してバケット一覧表示の権限を付与しません。そのため、ユーザーはバケット一覧ページですべてのバケットを表示したり、対象のバケットをクリックしたりすることはできません。代わりに、左側のナビゲーションウィンドウで お気に入りのパス > + をクリックすることで、バケットを追加およびアクセスできます。

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:GetObject",
                "oss:GetObjectAcl",
                "oss:GetObjectVersion",
                "oss:GetObjectVersionAcl"
            ],
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/hangzhou/2020/*",
                "acs:oss:*:174649585760xxxx:example-bucket/shanghai/2015/*"
            ]
        },
        {
            "Action":[
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "hangzhou/2020/*",
                        "shanghai/2015/*"
                    ]
                }
            },
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

シナリオ 3:特定の RAM ユーザーに対するバケット内容一覧表示権限の付与

チームメンバーまたはパートナーに対して、すべてのバケット情報を表示およびバケットの内容を一覧表示することを許可できます。この例では、RAM ユーザーに対して、すべてのバケット情報を表示および example-bucket バケットの内容を一覧表示する権限を付与します。

説明

このポリシーは、RAM ユーザーに対してバケット一覧表示の権限を付与しません。そのため、ユーザーはバケット一覧ページですべてのバケットを表示したり、対象のバケットをクリックしたりすることはできません。代わりに、左側のナビゲーションウィンドウで お気に入りのパス > + をクリックすることで、バケットを追加およびアクセスできます。

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:Get*",
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

シナリオ 4:特定の RAM ロールへの読み取り専用アクセスの付与

RAM ユーザーまたはアプリケーションに対して、バケットオブジェクトへの一時的なアクセスを許可できます。これを行うには、RAM ロールを作成し、権限を割り当てます。その後、ユーザーまたはアプリケーションはそのロールを偽装(assume)して、オブジェクトの読み取りに必要な一時的な資格情報を取得できます。この例では、1 つの RAM ロールのすべてのセッションおよび別の RAM ロールの特定のセッションに対して、example-bucket バケット内のすべてのオブジェクトへの読み取りアクセスを許可します。

説明

RAM ロールを権限付与対象とする場合、Principal は次の形式に従う必要があります:arn:sts::<uid>:assumed-role/<role-name>/<session-name><role-name> および <session-name> の値は大文字小文字を区別します。

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oss:GetObject"
            ],
            "Effect": "Allow",
            "Principal": [
                "arn:sts::10323xxxxx72056:assumed-role/role-name/session-name",
                "arn:sts::10323xxxxx72056:assumed-role/role2-name/*"
            ],
            "Resource": [
                "acs:oss:*:10323xxxxx72056:example-bucket/*"
            ]
        }
    ]
}

シナリオ 5:すべてのユーザーへの一覧表示権限の付与

バケットがパブリックなリソース共有に使用される場合、ファイルの内容にアクセスせずにファイル名を一覧表示できるように、すべての訪問者を許可したいことがあります。この目的には、プリンシパルをワイルドカードのアスタリスク(*)に設定し、すべてのファイルを一覧表示する権限を付与します。以下の例では、example-bucket バケット内のすべてのファイルを一覧表示する権限をすべての訪問者に付与します。

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Effect":"Allow",
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

シナリオ 6:パブリックネットワークからのアクセスを制限

バケットへのパブリックネットワーク(インターネット)からのすべてのアクセスをブロックできます。これを行うには、acs:SourceVpc 条件を使用して、VPC 以外からのリクエストを拒否する Deny ステートメントを作成します。インターネットからのリクエストは VPC プレフィックスを持たないため失敗します。この例では、VPC ネットワークからのアクセスを除き、example-bucket バケットへのすべてのアクセスを拒否します。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "oss:*",
      "Principal": [
        "*"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:example-bucket/*",
        "acs:oss:*:174649585760xxxx:example-bucket"
      ],
      "Condition": {
        "StringNotLike": {
          "acs:SourceVpc": [
            "vpc-*"
          ]
        }
      }
    }
  ]
}

シナリオ 7:特定の VPC からのみのアクセスを許可

単一の VPC へのバケットアクセスを制限できます。これを行うには、acs:SourceVpc 条件を使用して、他の VPC やインターネットからのリクエストをブロックする拒否ステートメントを作成します。他の VPC やインターネットからのリクエストは、指定された VPC ID と一致しないため失敗します。この例では、VPC t4nlw426y44rd3iq4xxxx 内のユーザーを除き、すべてのユーザーに対して example-bucket バケット内のオブジェクトへの読み取りアクセスを拒否します。

説明
  • 以下の Deny ポリシーステートメントのプリンシパルはワイルドカードのアスタリスク(*)であり、かつ条件(Condition)が指定されているため、この Deny ポリシーステートメントはバケットオーナーを含むすべてのユーザーに適用されます。

  • この Deny ステートメントはアクセス制限のみを実施します。権限の付与は一切行いません。プリンシパルが権限を持っていない場合、アクセスを許可するための Allow ステートメントを追加する必要があります。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        }
    ]
}

シナリオ 8:特定のパブリック IP アドレスからのみのアクセスを許可

バケットへのアクセスを単一のパブリック IP アドレスに制限できます。これを行うには、acs:SourceIp 条件を使用して、他の IP アドレスからのリクエストをブロックする Deny ステートメントを作成します。他の IP アドレスからのリクエストは、指定された IP アドレスと一致しないため失敗します。この例では、IP アドレス 203.0.113.5 を持つユーザーを除き、example-bucket バケットへの読み取りアクセスをすべてのユーザーに対して拒否します。

説明
  • 以下の Deny ポリシーステートメントのプリンシパルはワイルドカードのアスタリスク(*)であり、かつ条件(Condition)が指定されているため、この Deny ポリシーステートメントはバケットオーナーを含むすべてのユーザーに適用されます。

  • この Deny ステートメントはアクセス制限のみを実施します。権限の付与は一切行いません。プリンシパルが権限を持っていない場合、アクセスを許可するための Allow ステートメントを追加する必要があります。

{
  "Version": "1",
  "Statement": [{
    "Effect": "Deny",
    "Action": [
      "oss:GetObject"
    ],
    "Principal": [
      "*"
    ],
    "Resource": [
      "acs:oss:*:174649585760xxxx:example-bucket/*"
    ],
    "Condition": {
      "NotIpAddress": {
        "acs:SourceIp": [
          "203.0.113.5"
        ]
      },
      "StringNotLike": {
        "acs:SourceVpc": [
          "vpc-*"
        ]
      }
    }
  },
    {
      "Effect": "Deny",
      "Action": [
        "oss:GetObject"
      ],
      "Principal": [
        "*"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:example-bucket/*"
      ],
      "Condition": {
        "StringLike": {
          "acs:SourceVpc": [
            "vpc-*"
          ]
        }
      }
    }
  ]
}

シナリオ 9:特定の VPC 内の特定 IP 範囲からのみのアクセスを許可

バケットへのアクセスを、特定の VPC 内の特定 IP 範囲に制限できます。これを行うには、2 つの Deny ステートメントを作成します:

  • acs:SourceVpc 条件キーを使用して、他の VPC またはインターネットからのリクエストをブロックする Deny ポリシーステートメントを作成します。他のパブリック IP アドレスまたは VPC からのリクエストは、指定された IP 条件を満たさないため、Deny ルールがトリガーされます。

  • acs:SourceIp および acs:SourceVpc 条件を使用して、VPC 内の指定 IP 範囲外からのリクエストをブロックします。

いずれかの Deny ステートメントが満たされた場合、拒否がトリガーされます。この例では、VPC t4nlw426y44rd3iq4xxxx 内で 192.168.0.0/16 範囲の IP アドレスを持つユーザーを除き、example-bucket バケット内のオブジェクトへの読み取りアクセスをすべてのユーザーに対して拒否します。

説明
  • 以下の Deny ポリシーステートメントのプリンシパルはワイルドカードのアスタリスク(*)であり、かつ条件(Condition)が指定されているため、この Deny ポリシーステートメントはバケットオーナーを含むすべてのユーザーに適用されます。

  • この Deny ステートメントはアクセス制限のみを実施します。権限の付与は一切行いません。プリンシパルが権限を持っていない場合、アクセスを許可するための Allow ステートメントを追加する必要があります。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        },
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                },
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "192.168.0.0/16"
                    ]
                }
            }
        }
    ]
}

シナリオ 10:特定のパブリック IP アドレスまたは特定の VPC からのみのアクセスを許可

バケットへのアクセスを、特定のパブリック IP アドレスまたは特定の VPC のいずれかに制限できます。これを行うには、2 つの Deny ステートメントを作成します:

  • acs:SourceIp 条件を使用して他のパブリック IP からのリクエストをブロックし、StringNotLikeacs:SourceVpc を使用して指定された VPC を除外します。

  • acs:SourceVpc 条件を使用して他の VPC からのリクエストをブロックし、StringLikeacs:SourceVpc を使用して指定されたパブリック IP アドレスを除外します。これにより、VPC ID の欠落による誤った拒否を回避できます。

いずれかの Deny ステートメントが満たされた場合、拒否がトリガーされます。この例では、IP アドレス 203.0.113.5 を持つユーザーまたは VPC ID t4nlw426y44rd3iq4xxxx を持つユーザーを除き、example-bucket バケット内のオブジェクトへの読み取りアクセスをすべてのユーザーに対して拒否します。

説明
  • 以下の Deny ポリシーステートメントのプリンシパルはワイルドカードのアスタリスク(*)であり、かつ条件(Condition)が指定されているため、この Deny ポリシーステートメントはバケットオーナーを含むすべてのユーザーに適用されます。

  • この Deny ステートメントはアクセス制限のみを実施します。権限の付与は一切行いません。プリンシパルが権限を持っていない場合、アクセスを許可するための Allow ステートメントを追加する必要があります。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotLike":{
                    "acs:SourceVpc":[
                        "vpc-*"
                    ]
                },
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "203.0.113.5"
                    ]
                }
            }
        },
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringLike":{
                    "acs:SourceVpc":[
                        "vpc-*"
                    ]
                },
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        }
    ]
}

シナリオ 11:IP ブラックリストの設定

特定の IP アドレスまたは IP アドレス範囲からバケットおよびそのオブジェクトへのアクセスをブロックできます。これを行うには、バケットポリシー内に Deny ポリシーを使用して、指定された IP アドレスからのすべてのリクエストを拒否します。

説明
  • 以下の Deny ポリシーステートメントのプリンシパルはワイルドカードのアスタリスク(*)であり、かつ条件(Condition)が指定されているため、この Deny ポリシーステートメントはバケットオーナーを含むすべてのユーザーに適用されます。

  • カンマで区切ることで、複数の IP アドレスまたは IP アドレス範囲を指定できます。

{
  "Version": "1",
  "Statement": [{
    "Effect": "Deny",
    "Action": "oss:*",
    "Principal": [
      "*"
    ],
    "Resource": [
      "acs:oss:*:174649585760xxxx:example-bucket/*",
      "acs:oss:*:174649585760xxxx:example-bucket"
    ],
    "Condition": {
      "IpAddress": {
        "acs:SourceIp": [
          "101.***.***.100"
        ]
      },
      "StringLike": {
        "acs:SourceVpc": [
          "*"
        ]
      }
    }
  }]
}

シナリオ 12:API 呼び出し時に一時的な資格情報の使用を必須化

API アクセス時に一時的な資格情報の使用を必須化できます。これを行うには、acs:AccessId 条件を使用して、Alibaba Cloud アカウントまたは RAM ユーザーからの長期的な資格情報をブロックする Deny ステートメントを作成します。長期的な資格情報を使用したリクエストは Deny ルールをトリガーします。この例では、example-bucket バケットに対するすべての Get および List 操作を、`TMP.` または `STS.` で始まる一時的な資格情報を使用するユーザーを除き、すべてのユーザーに対して拒否します。

{
    "Version": "1",
    "Statement": [
        {            
            "Effect": "Deny",
            "Action":[
                "oss:Get*",
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "acs:AccessId": [
                        "TMP.*",
                        "STS.*"
                 ]
                }
            }
        }
    ]
}

シナリオ 13:バケットおよびオブジェクトのパブリック ACL 設定を防止

バケットおよびオブジェクトの公開読み取り(public-read)または公開読み書き(public-read-write)のアクセス制御リスト(ACL)設定を防止できます。これを行うには、2 つの Deny ステートメントを作成します:

  • oss:x-oss-acl 条件を使用して、private 以外のバケット ACL 設定をブロックします。ACL を public-read または public-read-write に設定しようとした場合、Deny ルールがトリガーされます。

  • oss:x-oss-object-acl 条件を使用して、private または default 以外のオブジェクト ACL 設定をブロックします。

いずれかの Deny ステートメントが満たされた場合、拒否がトリガーされます。この例では、example-bucket バケットのパブリック ACL 設定を拒否します。

{
    "Version": "1",
    "Statement": [
        {            
            "Effect": "Deny",
            "Action": [
                "oss:PutBucketAcl"
            ],
            "Principal": [
                "*"
            ],
            "Resource": [
                "acs:oss:*:*:example-bucket"
            ],
            "Condition": {
                "StringNotEquals": {
                    "oss:x-oss-acl": "private"
                }
            }
        },
        {            
            "Effect": "Deny",
            "Action": [
                "oss:PutObjectAcl"
            ],
            "Principal": [
                "*"
            ],
            "Resource": [
                "acs:oss:*:*:example-bucket/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "oss:x-oss-object-acl": [
                        "private",
                        "default"
                    ]
                }
            }
        }
    ]
}

開発およびツール連携

コンソールでの設定に加えて、グラフィカルツール、コマンドラインツール、SDK、または直接の API 呼び出しを使用してバケットポリシーを管理できます。

  • ossbrowser の使用

    コンソールと同様の視覚的なインターフェイスを使用して、バケットレベルのポリシー操作を実行できます。まず ossbrowser をインストールおよびサインインし、画面上の指示に従ってバケットポリシーを設定してください。

  • ossutil の使用

    put-bucket-policy 操作を呼び出してポリシーを設定できます。

    説明

    ベクターバケットのポリシーを設定するには、ossutil vectors-api put-bucket-policy コマンドを使用します。

  • SDK の使用

    JavaPythonGoNode.js など、さまざまな言語の SDK を使用してポリシーを設定できます。SDK の選択肢について詳しくは、「SDK リファレンス」をご参照ください。

  • API の直接呼び出し

    PutBucketPolicy 操作を呼び出してバケットポリシーを設定できます。

クォータおよび制限事項

  • ポリシーのサイズ:1 つのバケットには複数のバケットポリシーを設定できますが、すべてのポリシーの合計サイズは 16 KB を超えられません。

  • フィールド長:バケットポリシー内の各フィールドは、4095 バイトを超えることはできません。

関連ドキュメント