Object Storage Service (OSS) バケットへのアクセスに使用されるIPアドレスが動的に変更されます。 静的IPアドレスを使用してバケットにアクセスするように、ECS (Elastic Compute Service) インスタンスにリバースプロキシを設定できます。
背景情報
OSSはRESTful APIを使用してサービスを提供します。 バケットのデフォルトドメイン名またはバケットにマップされているカスタムドメイン名を使用して、OSSバケットにアクセスできます。 ただし、特定のシナリオでは、静的IPアドレスを使用してOSSにアクセスする必要がある場合があります。
セキュリティ上の理由から、社内の従業員とビジネスシステムが指定されたパブリックIPアドレスのみにアクセスできるようにアウトバウンドルールを設定する必要がある企業もあります。 ただし、OSSのバケットへのアクセスに使用されるIPアドレスは動的に変更されます。 この場合、企業は要件を満たすためにファイアウォール規則を頻繁に変更する必要があります。
Alibaba Finance Cloudのネットワークアーキテクチャでは、Alibaba Finance CloudからのリクエストのみがAlibaba Finance Cloudの内部ネットワーク固有のバケットにアクセスできます。 インターネットからのアクセス要求は拒否されます。
これらの問題を解決するには、ECSインスタンスを使用して、OSSにアクセスするためのリバースプロキシを設定します。
手順
迅速な展開
Resource Orchestration Service (ROS) を使用してECSインスタンスとOSSバケットを設定し、CentOSを実行するECSインスタンスにNGINXをデプロイできます。 ROSを使用してOSSへのアクセス用にリバースプロキシを設定するには、次の手順を実行します。
数回クリックするだけでクラウドリソースをデプロイできます。
ROSコンソールの [スタックの作成] ウィザードに移動します。
ROSコンソールの [スタックの作成] ウィザードの [テンプレートの選択] ステップで、スタック名と作成するOSSバケットの名前を入力します。 購入するECSインスタンスのゾーン、インスタンスタイプ、システムディスクカテゴリ、およびパスワードを指定し、[新しいOSSBucketを作成する場合] をオフにし、[作成] をクリックします。
表示されるページの [スタック情報] タブで、スタックのステータスは [作成中] になります。
スタックのステータスが [作成済み] になったら、[出力] タブをクリックして、数回クリックするだけでデプロイされるECSインスタンスやOSSバケットなどのリソースを表示します。
ROSを使用して、OSSにアクセスするためのリバースプロキシを設定します。
[出力] タブで、ECSPublicIPの値をコピーします。
OSSコンソールにログインします。 左側のナビゲーションウィンドウで、[バケット] をクリックします。 バケットリスト ページで、作成したバケットの名前をクリックします。 オブジェクト ページで、アップロード をクリックします。 表示されるページで、アクセス制御リスト (ACL) がパブリックであるオブジェクトをアップロードし、オブジェクト名をコピーします。
ブラウザで
ECSPublicIP/object name
を使用して、OSSリソースにアクセスします。
不要なコストを回避するためにテストリソースをリリースします。
スタックページの右上隅にある [削除] をクリックします。
[スタックの削除] ダイアログボックスで、[スタックを削除する方法] を [リソースのリリース] に設定し、[OK] をクリックします。
手動展開
ECSインスタンスを作成します。
この例では、CentOS 7.6 (64ビット) を実行するECSインスタンスが作成されます。 アクセスするECSインスタンスとバケットが同じリージョンにあることを確認してください。
詳細は、インスタンスの作成をご参照ください。
ECS インスタンスに接続します。
ECSインスタンスへの接続方法については、 「ECSコンソール (エクスプレスバージョン) を使用したECSインスタンスの作成と管理」をご参照ください。
次のコマンドを実行してNGINXをインストールします。
sudo yum install -y nginx
デフォルトでは、NGINXファイルは次のパスにインストールされます。ディレクトリ 説明 /usr/sbin/nginx NGINX実行可能ファイルを格納します。 /etc/nginx 設定ファイルを格納します。 /usr/share/nginx 静的ファイルを格納します。 /var/log/nginx ログを保存します。 次のコマンドを実行して、nginx.confファイルを開きます。
sudo vi /etc/nginx/nginx.conf
次の手順を参照して、nginx.confファイルのHTTPモジュールを変更します。
重要このトピックでは、デモ環境を例として使用します。 データのセキュリティを確保するため、実際のシナリオに基づいてHTTPSモジュールを設定することを推奨します。 詳細については、「NGINXまたはTengineサーバーへのSSL証明書のインストール」をご参照ください。
この設定方法を使用すると、1つのバケットに対してのみリバースプロキシを設定できます。
サーバ { 80 default_serverを聞く。 listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # デフォルトのサーバーブロックの設定ファイルを読み込みます。 include /etc/nginx/default.d/*.conf; 場所/{ proxy_pass https://bucketname.oss-cn-beijing-internal.aliyuncs.com; proxy_set_headerホスト $ホスト; } }
パラメーター
説明
server_name
リバースプロキシサービスを提供するために使用されるIPアドレス。 このパラメーターをECSインスタンスのパブリックIPアドレスに設定します。
proxy_pass
リダイレクトのドメイン名。
アクセスするECSインスタンスとバケットが同じリージョンにある場合は、バケットの内部ドメイン名を指定します。 詳細については、「OSSドメイン名」トピックの「内部ネットワーク経由のOSSへのアクセス」セクションをご参照ください。
アクセスするECSインスタンスとバケットが異なるリージョンにある場合は、バケットのパブリックドメイン名を指定します。 詳細については、OSSドメイン名の「パブリックネットワーク経由のOSSへのアクセス」をご参照ください。
セキュリティを確保するために、ブラウザでバケットのデフォルトドメイン名を使用してバケット内のイメージオブジェクトまたはwebページオブジェクトにアクセスすると、オブジェクトがダウンロードされます。 ブラウザを使用して画像オブジェクトまたはwebページオブジェクトをプレビューするには、オブジェクトが保存されているバケットにカスタムドメイン名をマップし、そのカスタムドメイン名をproxy_passパラメーターの値に追加します。 詳細については、「カスタムドメイン名のマップ」をご参照ください。
proxy_set_headerホスト
このパラメーターを追加すると、NGINXがOSSにリクエストを送信するときに、$hostの値がECSインスタンスのIPアドレスに置き換えられます。
次のシナリオでは、このパラメーターを追加する必要があります。
署名エラーが発生します。
バケットにマップされているカスタムドメイン名は、ECSインスタンスのパブリックIPアドレスに解決されます。ブラウザーを使用して、バケット内のイメージオブジェクトまたはwebページオブジェクトをプレビューする必要があります。 カスタムドメイン名のCNAMEレコードを追加せずに、リバースプロキシが構成されているバケットにカスタムドメイン名をマッピングできます。 この場合、proxy_passパラメーターをバケットの内部ドメイン名またはパブリックドメイン名に設定できます。 詳細については、「カスタムドメイン名のマップ」をご参照ください。
説明このパラメーターは、プロキシサーバーへのアクセスを要求するためにカスタムドメイン名が使用されるシナリオに適用されます。 IPアドレスを使用してプロキシサーバーへのアクセスを直接リクエストする場合は、
proxy_set_header Host $host
パラメーターをnginx.confファイルに追加する必要があります。次のコマンドを実行して、NGINX実行可能ファイルのディレクトリに移動します。
cd /usr/sbin/
次のコマンドを実行してNGINXを起動します。
sudo。/nginx
ECSインスタンスのTCPポート80を有効にします。
デフォルトでは、NGINXはTCPポート80を使用します。 したがって、ECSインスタンスのセキュリティグループを設定するときは、TCPポート80を有効にする必要があります。
詳細については、「セキュリティグループルールの追加」をご参照ください。
ECSインスタンスのパブリックIPアドレスにオブジェクトパスを追加して、OSSリソースにアクセスします。
この例では、デフォルトのドメイン名が使用されます。 ローカルブラウザを使用してOSSリソースにアクセスする場合、OSSリソースはデフォルトでダウンロードされます。 アクセスするOSSリソースをプレビューする場合は、proxy_passパラメーターを設定するときにカスタムドメイン名を使用する必要があります。
説明オブジェクトアクセス制御リスト (ACL) が非公開の場合、オブジェクトURLに署名する必要があります。 詳細については、「署名V1を使用した署名付きURLの作成」をご参照ください。