VPC ポリシーとバケットポリシーを組み合わせることで、OSS に対して二重レイヤーのアクセス制御を実現します。このアプローチにより、ネットワークソースレベルおよびリソースレベルの両方でアクセスを制御し、データを保護します。これにより、不正アクセスやデータの持ち出しリスクを効果的に軽減できます。
仕組み
バケットポリシーのみに依存する代わりに、この二重制御ソリューションでは VPC ポリシーを追加して、多層的なセキュリティモデルを構築します。これにより、ソース側での権限付与と送信先側での検証というフレームワークが形成され、データアクセスのセキュリティが大幅に強化されます。VPC ポリシーは、ネットワークソースからどのバケットにアクセスできるかを制限することで、きめ細かい権限管理とリスクの隔離を可能にします。一方、バケットポリシーはストレージ送信先でアクセス元を検証し、許可された VPC からのリクエストのみがリソースにアクセスできるようにします。
許可されるアクセス:許可された VPC 内から許可されたバケットにアクセスすると、両方のポリシーがアクセスを許可します。
拒否されるアクセス:
VPC ポリシーによる拒否:許可された VPC からのリクエストが、VPC ポリシーで許可されていないバケットへのアクセスを試みる場合。
バケットポリシーによる拒否:許可されていない VPC からのリクエストがバケットへのアクセスを試みる場合。
実装
このセクションでは、二重アクセス制御の構成方法を示すシナリオを紹介します。ある企業ユーザー(UID:174649585760xxxx)は、重大なビジネスデータを example-bucket という名前の OSS バケットに保存しています。そのアプリケーションは、ID が vpc-t4nlw426y44rd3iq4xxxx の VPC 内にある複数の ECS インスタンス上で動作しています。最小権限の原則に従い、すべてのビジネスアクセスは、example-user(UID:20655703638807****)という RAM ユーザーの AccessKey を使用して実行されます。以下のアクセス制御目標を達成する必要があります。
VPC ソース側制御:指定された OSS リソース(
example-bucket)にのみアクセスを許可するよう、VPC を制限します。バケット送信先側制御:指定された VPC 以外から発信されたすべての OSS アクセスリクエストを拒否します。
手順 1:VPC ポリシーの構成
ID が vpc-t4nlw426y44rd3iq4xxxx の VPC に対してエンドポイントポリシーを作成し、OSS 内の example-bucket 内のリソースにのみアクセスできるように制限します。
VPC コンソールに移動します。左側のナビゲーションウィンドウで、エンドポイント をクリックします。
エンドポイントの作成 をクリックし、以下の設定でエンドポイントを構成します。
エンドポイントを初めて使用する場合は、事前に エンドポイントサービスの有効化 を行ってください。
リージョン:VPC が配置されているリージョン(例:シンガポール)を選択します。
エンドポイント名:エンドポイントの名前を入力します。
エンドポイントタイプ:ゲートウェイ を選択します。
エンドポイントサービス:Alibaba Cloud サービス を選択し、リストから OSS エンドポイントサービスを選択します。サービス名は
ossで終わります。VPC:対象の VPC を選択します。
ルートテーブル:対象のルートテーブルを選択します。
アクセスポリシー:エディターに以下のポリシーを入力します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Principal": [ "20655703638807****" ], "Resource": [ "acs:oss:*:*:example-bucket", "acs:oss:*:*:example-bucket/*" ] } ] }
構成内容を確認後、OK をクリックします。
手順 2:バケットポリシーの構成
バケットポリシーを構成し、vpc-t4nlw426y44rd3iq4xxxx 以外の VPC からの OSS リソースへのアクセスリクエストを拒否します。
バケット リストに移動し、対象のバケットをクリックします。
バケットの左側ナビゲーションウィンドウで、 をクリックします。
構文で追加 を選択し、編集 をクリックして、エディターに以下のポリシーを入力します。
{ "Statement": [ { "Action": [ "oss:*" ], "Effect": "Deny", "Principal": [ "20655703638807****" ], "Resource": "acs:oss:*:*:*", "Condition": { "StringNotEquals": { "acs:SourceVpc": [ "vpc-t4nlw426y44rd3iq4xxxx" ] } } } ], "Version": "1" }ポリシーが正しいことを確認後、設定 をクリックし、画面の指示に従います。
手順 3:アクセス制御の検証
このセクションでは、ossutil コマンドラインツールを使用して、二重アクセス制御の構成を検証する方法を説明します。コマンドを実行する前に、ossutil 2.0 をダウンロードし、RAM ユーザーの AccessKey および内部エンドポイントアドレスで構成してください。たとえば、oss-ap-southeast-1-internal.aliyuncs.com を使用します。
許可されるアクセスシナリオの検証
許可された VPC(vpc-t4nlw426y44rd3iq4xxxx)内の ECS インスタンス上で、許可されるユーザー(UID:20655703638807****)の AccessKey を使用して、example-bucket 内のオブジェクトを一覧表示します。
ossutil ls oss://example-bucket/アクセスリクエストは成功し、VPC ポリシーおよびバケットポリシーの両方がアクセスを許可していることが確認できます。
VPC ポリシー拒否シナリオの検証
同じ VPC 内から、VPC ポリシーで許可されていないバケット(例:other-bucket)へのアクセスを試みます。
ossutil ls oss://other-bucket/以下のようなメッセージが表示され、アクセスが拒否されます。Access denied by VPC endpoint policy.. これは、VPC ポリシーがソース側でアクセス可能なバケットの範囲を制限していることを確認するものです。
バケットポリシーによる拒否シナリオの検証
許可されていない VPC またはパブリックインターネットから、同じユーザーの AccessKey を使用して example-bucket にアクセスします。
ossutil ls oss://example-bucket/以下のようなメッセージが表示され、アクセスが拒否されます。Access denied by bucket policy.. これは、バケットポリシーが送信先側で VPC ソースを検証していることを確認するものです。