Edge からバックエンドへの TLS の構成(Cloud、Private Cloud)

API プロキシは、一般公開されるエンドポイントの、バックエンド サービスへのマッピングとして機能します。仮想ホストは、一般公開されている API プロキシをアプリに公開する方法を定義します。たとえば、仮想ホストは TLS を使用して API プロキシにアクセスできるかどうかを判定します。API プロキシを構成するときは、ProxyEndpoint 定義を編集して、使用する仮想ホストを構成します。

TargetEndpoint は、アウトバウンドの ProxyEndpoint に相当するものです。TargetEndpoint は、Edge からバックエンド サービスへの HTTP クライアントとして機能します。API プロキシを作成するとき、TargetEndpoint を 0 個以上使用するように構成できます。

詳細:

TargetEndpoint または TargetServer の構成

TargetEndpoint を構成するには、TargetEndpoint を定義する XML オブジェクトを編集します。API プロキシの TargetEndpoint を定義する XML ファイルを編集することで、TargetEndpoint を編集できます。または、Edge 管理 UI で編集します。

Edge 管理 UI を使用して TargetEndpoint を編集する手順は次のとおりです。

  1. Edge 管理 UI(https://enterprise.apigee.com)にログインします。
  2. 更新する API プロキシの名前を選択します。
  3. [Develop] タブを選択します。
  4. [Target Endpoints] で、[default] を選択します。
  5. コード領域に、TargetEndpoint 定義が次のように表示されます。
    <TargetEndpoint name="default">
      <Description/>
      <FaultRules/>
      <Flows/>
      <PreFlow name="PreFlow">
        <Request/>
        <Response/>
      </PreFlow>
      <PostFlow name="PostFlow">
        <Request/>
        <Response/>
      </PostFlow>
      <HTTPTargetConnection>
        <Properties/>
        <SSLInfo>
          <Enabled>true</Enabled>
          <TrustStore>ref://myTrustStoreRef</TrustStore>
        </SSLInfo>
        <URL>https://mocktarget.apigee.net</URL>
      </HTTPTargetConnection>
    </TargetEndpoint>
  6. 後述のバックエンドでの TLS 構成についての説明に従い、トラストストアを構成します。
  7. プロキシを変更し、保存します。API プロキシがデプロイ済みの場合、保存すると新しい設定で再デプロイされます。

TargetEndpoint 定義には name プロパティが含まれています。name プロパティの値を使用して、TargetEndpoint を使用する API プロキシの ProxyEndpoint 定義を構成します。詳細については、API プロキシ構成のリファレンスをご覧ください。

TargetEndpoint は、明示的なターゲット URL ではなく、TargetServer を参照するように構成できます。TargetServer 構成は、具体的なエンドポイント URL を TargetEndpoint 構成から切り離します。TargetServer は、複数のバックエンド サーバー インスタンスにわたる負荷分散とフェイルオーバーをサポートするために使用します。

次に TargetServer の定義例を示します。

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer>

TargetServer は、TargetEndpoint 定義の <HTTPTargetConnection> 要素内の名前で参照されます。次に示すように、1 つ以上の名前付き TargetServer を構成できます。

<TargetEndpoint name="default">
  ...
  <HTTPTargetConnection>
    <LoadBalancer>
      <Server name="target1" />
      <Server name="target2" />
    </LoadBalancer>
    <Path>/test</Path>
  </HTTPTargetConnection>
  ...
</TargetEndpoint>

詳細については、バックエンド サーバー間の負荷分散をご覧ください。

バックエンドでの TLS 構成について

バックエンドへの TLS アクセスを構成する前に、重要な点を 2 つ理解する必要があります。

  1. デフォルトでは、Edge はバックエンド証明書を検証しません。証明書を検証するように Edge を構成するには、トラストストアを作成する必要があります。
  2. 参照を使用して、Edge で使用するキーストアまたはトラストストアを指定します。

この両方の考慮事項については後述します。

証明書の検証を有効にするトラストストアの定義

TargetEndpoint または TargetServer を介して TLS リクエストを行う場合、デフォルトでは、Edge はバックエンド サーバーから受信した TLS 証明書を検証しません。つまり、Edge では次の検証を行いません。

  • 信頼できる CA によって署名されている証明書
  • 有効期限が切れていない証明書
  • 共通名を提示する証明書。共通名がある場合、Edge は、URL で指定されたホスト名と共通名の一致を検証しません。

バックエンド証明書を検証するように Edge を構成するには、次の手順を実施する必要があります。

  1. Edge にトラストストアを作成します。
  2. サーバーの証明書または証明書チェーンを、トラストストアにアップロードします。サーバー証明書がサードパーティによって署名されている場合は、ルート CA 証明書などの完全な証明書チェーンをトラストストアにアップロードする必要があります。暗黙的に信頼できる CA はありません。
  3. トラストストアを TargetEndpoint または TargetServer 定義に追加します。

詳細については、キーストアとトラストストアをご覧ください。

例:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

キーストアまたはトラストストアへの参照の使用

後述の例は、TLS をサポートするように TargetEndpoint または TargetServer を構成する方法を示しています。TLS を構成する一環として、トラストストアかキーストアを TargetEndpoint または TargetServer 定義の一部として指定します。

Apigee では、TargetEndpoint または TargetServer 定義でキーストアとトラストストアへの参照を使用することを、強く推奨します。参照を使用する利点は、TLS 証明書を更新する際に、異なるキーストアまたはトラストストアを指すように参照を更新するだけで済む点です。

TargetEndpoint または TargetServer 定義でのキーストアとトラストストアへの参照は、仮想ホストの場合と同様に機能します。

参照を使用するように TargetEndpoint または TargetServer を変更する

既存の TargetEndpoint または TargetServer 定義が、キーストアとトラストストアのリテラル名を使用していることがあります。参照を使用するように TargetEndpoint または TargetServer 定義を変更する手順は次のとおりです。

  1. 参照を使用するように TargetEndpoint または TargetServer 定義を更新します。
  2. Edge Message Processor を再起動します。
    • Public Cloud のお客様は、Apigee のサポートに連絡して Message Processor を再起動します。
    • Private Cloud のお客様は、Edge Message Processor を 1 つずつ再起動します。
  3. TargetEndpoint または TargetServer が正しく動作していることを確認します。

バックエンド サーバーに対する一方向 TLS の構成

TargetEndpoint 定義を使用する場合、Edge(TLS クライアント)からバックエンド サーバー(TLS サーバー)への一方向 TLS アクセスを構成すると、Edge で追加の構成は必要ありません。TLS の正しい構成は、バックエンド サーバーが行います。

ユーザーが確認する必要があるのは、TargetEndpoint 定義の <URL> 要素が HTTPS プロトコルによってバックエンド サービスを参照していることと、TLS の有効化のみです。

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

TargetServer を使用してバックエンド サービスを定義する場合、TargetServer 定義で TLS を有効にします。

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
  </SSLInfo> 
</TargetServer>

ただし、Edge でバックエンド証明書を検証する場合は、バックエンド証明書か証明書チェーンを含むトラストストアを作成する必要があります。次に、TargetEndpoint 定義でトラストストアを指定します。

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

または TargetServer 定義で次のようにします。

<TargetServer name="target1">
  <Host>mockserver.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
    <TrustStore>ref://myTrustStoreRef</TrustStore>
  </SSLInfo> 
</TargetServer>

一方向 TLS の構成手順は次のとおりです。

  1. バックエンド証明書を検証する場合、Edge にトラストストアを作成し、バックエンド証明書または CA チェーンをアップロードします。手順の詳細はキーストアとトラストストアをご覧ください。この例では、トラストストアを作成する必要がある場合、myTrustStore という名前を付けます。
  2. トラストストアを作成したら、次の POST API 呼び出しを使用して、上述の手順で作成したトラストストアへの myTrustStoreRef という名前の参照を作成します。

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>' -u email:password
    
  3. Edge 管理 UI を使用して、API プロキシの TargetEndpoint 定義を更新します(XML で API プロキシを定義する場合は、プロキシの XML ファイルを編集します)。
    1. Edge 管理 UI(https://enterprise.apigee.com)にログインします。
    2. Edge 管理 UI のメニューで、[APIs] を選択します。
    3. 更新する API プロキシの名前を選択します。
    4. [Development] タブを選択します。
    5. [Target Endpoints] で、[default] を選択します。
    6. コード領域で、<HTTPTargetConnection> 要素を編集して <SSLInfo> 要素を追加します。正しいトラストストア参照を指定し、<Enabled> を true に設定してください。
      <TargetEndpoint name="default">
        …
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        …
      </TargetEndpoint>
    7. API プロキシを保存します。API プロキシがデプロイ済みの場合、保存すると新しい設定で再デプロイされます。

バックエンド サーバーに対する双方向 TLS の構成

Edge(TLS クライアント)とバックエンド サーバー(TLS サーバー)間の双方向 TLS をサポートする場合は、次のようにします。

  • Edge にキーストアを作成し、Edge 証明書と秘密鍵をアップロードします。
  • バックエンド証明書を検証する場合、バックエンド サーバーから受け取った証明書と CA チェーンを保持するためのトラストストアを Edge に作成します。
  • バックエンド サーバーを参照する API プロキシの TargetEndpoint を更新し、TLS アクセスを構成します。

キーエイリアスを使用したキーストア証明書の指定

同じキーストア内に複数の証明書を定義し、それぞれに固有のエイリアスを設定できます。デフォルトでは、Edge はキーストア内で定義されている最初の証明書を使用します。

必要に応じて、<KeyAlias> プロパティで指定された証明書を使用するように Edge を構成できます。こうすることによって、複数の証明書のための 1 つのキーストアを定義し、使用する証明書を TargetServer 定義で選択できるようになります。<KeyAlias> と一致するエイリアスを持つ証明書が見つからない場合、Edge はキーストア内の最初の証明書を選択するというデフォルトのアクションを使用します。

Edge for Public Cloud のユーザーがこの機能を有効にするには、Apigee のサポートに問い合わせる必要があります。

双方向 TLS の構成

双方向 TLS を構成する手順は次のとおりです。

  1. キーストアとトラストストアに記載している手順を使用して、Edge にキーストアを作成し、証明書と秘密鍵をアップロードします。この例では、myTestKeystore という名前のキーストアを作成します。証明書と秘密鍵には myKey というエイリアス名を使用します。
  2. 次の POST API 呼び出しを使用して、上述の手順で作成したキーストアに myKeyStoreRef という名前の参照を作成します。

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myKeyStoreRef">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    

    この参照では、キーストアの名前を指定し、参照タイプを KeyStore としています。

    次の GET API 呼び出しを使用して、参照を表示します。

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/myKeyStoreRef /
    -u email:password
    
  3. バックエンド証明書を検証する場合、Edge にトラストストアを作成し、証明書と CA チェーンをアップロードします。手順の詳細はキーストアとトラストストアをご覧ください。この例では、トラストストアを作成する必要がある場合、myTrustStore という名前を付けます。
  4. トラストストアを作成したら、次の POST API 呼び出しを使用して、上述の手順で作成したトラストストアへの myTrustStoreRef という名前の参照を作成します。

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    
  5. Edge 管理 UI を使用して、API プロキシの TargetEndpoint 定義を更新します(XML で API プロキシを定義する場合は、プロキシの XML ファイルを編集します)。
    1. Edge 管理 UI(https://enterprise.apigee.com)にログインします。
    2. Edge 管理 UI のメニューで、[APIs] を選択します。
    3. 更新する API プロキシの名前を選択します。
    4. [Development] タブを選択します。
    5. [Target Endpoints] で、[default] を選択します。
    6. コード領域で、<HTTPTargetConnection> 要素を編集して <SSLInfo> 要素を追加します。正しいキーストアとキーエイリアスを指定し、<Enabled><ClientAuthEnabled> の両方の要素に true を設定します。
      <TargetEndpoint name="default">
        ...
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>true</ClientAuthEnabled>
            <KeyStore>ref://myKeyStoreRef</KeyStore>
            <KeyAlias>myKey</KeyAlias>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        ...
      </TargetEndpoint>
    7. API プロキシを保存します。API プロキシがデプロイ済みの場合、保存すると新しい設定で再デプロイされます。

変数を使用して TargetEndpoint に <SSLInfo> 値を指定するなど、<TargetEndpoint> で使用できるオプションの詳細については、API プロキシ構成リファレンスをご覧ください。

SNI の有効化

Edge は、Apigee Edge for Cloud と Apigee Edge for Private Cloud のデプロイで、Message Processor からターゲット エンドポイントへの Server Name Indication(SNI)の使用をサポートしています。

Edge for the Private Cloud では、既存のターゲット バックエンドと下位互換性を持たせるため、デフォルトでは SNI が無効になっています。ターゲット バックエンドが SNI をサポートするように構成されている場合は、この機能を有効にできます。詳細については、Edge での SNI の使用をご覧ください。