Object Storage Service (OSS) バケットへのアクセスに使用されるIPアドレスが動的に変更されます。 静的IPアドレスを使用してOSSバケットにアクセスするように、ECS (Elastic Compute Service) インスタンスにリバースプロキシを設定できます。
背景情報
OSSはRESTful APIを使用してサービスを提供します。 バケットのデフォルトドメイン名またはバケットにマップされているカスタムドメイン名を使用して、OSSバケットにアクセスできます。 ただし、特定のシナリオでは、静的IPアドレスを使用してOSSにアクセスする必要がある場合があります。
セキュリティ上の理由から、社内の従業員とビジネスシステムが指定されたパブリックIPアドレスのみにアクセスできるようにアウトバウンドルールを設定する必要がある企業もあります。 ただし、OSSのバケットへのアクセスに使用されるIPアドレスは動的に変更されます。 この場合、企業は要件を満たすためにファイアウォール規則を頻繁に変更する必要があります。
Alibaba Finance Cloudのネットワークアーキテクチャでは、Alibaba Finance CloudからのリクエストのみがAlibaba Finance Cloudの内部ネットワーク固有のバケットにアクセスできます。 インターネットからのアクセス要求は拒否されます。
これらの問題を解決するには、ECSインスタンスを使用して、OSSにアクセスするためのリバースプロキシを設定します。
手順
ECSインスタンスを作成します。
この例では、Ubuntu 18.04 (64ビット) を実行するECSインスタンスが作成されます。 アクセスするインスタンスとバケットが同じリージョンにあることを確認してください。
ECSインスタンスの作成方法の詳細については、「ECSコンソールを使用したECSインスタンスの作成と管理」をご参照ください。
ECS インスタンスに接続します。
ECSインスタンスへの接続方法については、 「ECSコンソール (エクスプレスバージョン) を使用したECSインスタンスの作成と管理」をご参照ください。
次のコマンドを実行して、APTリポジトリを更新します。
sudo apt-getアップデート
次のコマンドを実行してNGINXをインストールします。
sudo apt-getインストール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つのバケットに対してのみリバースプロキシを設定できます。
サーバ { listen 80; server_name 47.**.**.73; 場所/{ proxy_pass http://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に署名する必要があります。 詳細については、「URLへの署名の追加」をご参照ください。