VPC ポリシーとバケットポリシーを組み合わせることで、ネットワークのソースとリソースの両レベルで Object Storage Service (OSS) へのアクセスを制御し、不正アクセスやデータの持ち出しを防止します。
仕組み
このソリューションは、VPC ポリシーとバケットポリシーを組み合わせて、ソース側の認可と宛先側の検証というモデルを形成します。VPC ポリシーは、VPC がアクセスできるバケットを制限し、きめ細やかな権限管理とリスクの分離を可能にします。バケットポリシーはリクエストのソースを検証し、認可された VPC からのトラフィックのみがリソースに到達するようにします。
許可されるアクセス:認可された VPC から認可されたバケットへのリクエストは、両方のポリシーで許可されます。
拒否されるアクセス:
VPC ポリシーによる拒否:VPC が、VPC ポリシーで認可されていないバケットにアクセスしようとします。
バケットポリシーによる拒否:認可されていない VPC からリクエストがバケットに到達します。
前提条件
二重のアクセス制御を設定する前に、以下の情報を収集してください。
実装
次の例では、二重のアクセス制御を実証します。ある企業ユーザー (UID: 174649585760xxxx) が、example-bucket という名前の OSS バケットにビジネスデータを保存しています。アプリケーションは、VPC vpc-t4nlw426y44rd3iq4xxxx 内の ECS インスタンスで実行されています (このIDの取得方法については、「前提条件」をご参照ください)。すべてのアクセスは、RAM ユーザー example-user (UID: 20655703638807****) の AccessKey を使用します。アクセス制御の目標は以下の通りです。
VPC ソース側の制御:VPC が
example-bucketのみにアクセスできるようにします。バケット宛先側の制御:指定された VPC 以外からのすべての OSS リクエストを拒否します。
ステップ1:VPC ポリシーの設定
VPC vpc-t4nlw426y44rd3iq4xxxx に対して、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" }acs:SourceVpcの値は、「前提条件」で説明したように、VPC コンソールから取得した対象の VPC ID です。ご自身の VPC ID に置き換えてください。ポリシーを確認し、設定 をクリックして、画面の指示に従ってください。
ステップ3:アクセス制御の検証
ossutil を使用して設定を検証します。ossutil 2.0 をダウンロードし、RAM ユーザーの AccessKey と内部エンドポイントで設定します。たとえば、oss-ap-southeast-1-internal.aliyuncs.com を使用します。
許可されるアクセスシナリオの検証
VPC vpc-t4nlw426y44rd3iq4xxxx 内の ECS インスタンスで、ユーザー 20655703638807**** の AccessKey を使用して example-bucket 内のオブジェクトを一覧表示します。
ossutil ls oss://example-bucket/両方のポリシーでアクセスが許可されるため、リクエストは成功します。
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 ソースを検証していることを確認できます。