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インスタンスを作成します。
この例では、Windows Server 2019 Datacenter 64ビットのECSインスタンスが使用されています。 アクセスするインスタンスとバケットが同じリージョンにあることを確認してください。
詳細は、インスタンスの作成をご参照ください。
ECS インスタンスに接続します。
ECSインスタンスへの接続方法については、 「ECSコンソール (エクスプレスバージョン) を使用したECSインスタンスの作成と管理」をご参照ください。
NGINXパッケージをダウンロードし、解凍します。
この例では、Nginx 1.19.2が使用されます。
変更します。Modify thenginx.confファイルを作成します。
重要このトピックでは、デモ環境を例として使用します。 データのセキュリティを確保するため、実際のシナリオに基づいてHTTPSモジュールを設定することを推奨します。 詳細については、「NGINXまたはTengineサーバーへのSSL証明書のインストール」をご参照ください。
この設定方法を使用すると、1つのバケットに対してのみリバースプロキシを設定できます。
confディレクトリに移動し、メモ帳を使用してnginx.confファイルを開きます。
nginx.confファイルの内容を変更します。
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; server { listen 80; server_name 47.**.**.43; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location / { proxy_pass http://bucketname.oss-cn-hangzhou-internal.aliyuncs.com; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_connect_timeout 15s; proxy_read_timeout 15s; proxy_send_timeout 15s; proxy_set_header Connection ""; proxy_buffering off; proxy_request_buffering off; } } }
パラメーター
説明
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実行可能ファイルがあるディレクトリに移動します。 nginx.exeをダブルクリックしてNGINXを起動します。
ECSインスタンスのTCPポート80を有効にします。
デフォルトでは、NGINXはTCPポート80を使用します。 したがって、ECSインスタンスのセキュリティグループを設定するときは、TCPポート80を有効にする必要があります。
詳細については、「セキュリティグループルールの追加」をご参照ください。
ECSインスタンスのパブリックIPアドレスにオブジェクトパスを追加して、OSSリソースにアクセスします。
この例では、デフォルトのドメイン名が使用されます。 ローカルブラウザを使用してOSSリソースにアクセスする場合、OSSリソースはデフォルトでダウンロードされます。 アクセスするOSSリソースをプレビューする場合は、proxy_passパラメーターを設定するときにカスタムドメイン名を使用する必要があります。
説明オブジェクトアクセス制御リスト (ACL) が非公開の場合、オブジェクトURLに署名する必要があります。 詳細については、「URLにV1署名を含める」をご参照ください。