TLS 認証情報の取得: 例

このトピックの内容は一例にすぎません。ここでは、TLS 証明書を認証局(CA)Let's Encrypt から取得する方法について説明します。これは主に、CA によって承認された証明書と鍵のペアを取得する方法が他にない場合に行う手順です。この例では、Let's Encrypt CA、Certbot クライアント、Google Cloud Platform Cloud DNS を使用して証明書を生成する方法を示します。

認証情報を使用できる場所

クラスタ外部に公開されている 2 つの Istio Ingress ゲートウェイに TLS 認証情報を指定する必要があります。

ゲートウェイ TLS の要件
MART Ingress ゲートウェイ 承認済みの TLS 証明書と鍵のペアが必要です。
ランタイム Ingress ゲートウェイ 自己署名証明書と鍵のペア、または承認済みの TLS 認証情報を使用できます。
外部接続もご覧ください。

要件

ドメイン名登録事業者から取得したドメイン名が必要です。Google Domains または他のドメイン登録事業者を通じてドメイン名を登録できます。

Cloud DNS を構成する

承認済みの TLS 認証情報を取得するには、修飾ドメイン名が必要です。Google Cloud DNS を使用してドメイン名を取得し、ドメイン サーバーを管理する手順を次に示します。
  1. Google Cloud コンソールを開き、ステップ 1: Google Cloud アカウントを作成するで作成したアカウントでログインします。
  2. ステップ 2: GCP プロジェクトを作成するで作成したプロジェクトを選択します。
  3. Cloud DNS API を有効にします。API の有効化に関する記事をご覧ください。
  4. 2 つの静的 IP アドレスを作成します。
    • GKE を使用している場合は、静的外部 IP アドレスの予約の手順に沿って 2 つの静的 IP アドレスを作成します。アドレスには任意の名前を付けることができます(apigee-hybrid-martapigee-hybrid-runtime など)。完了すると、次のステップのクラスタ構成で使用する 2 つの IP 番号が作成されます(35.225.131.18934.66.75.196 など)。
    • Anthos GKE を使用している場合は、Anthos GKE ドキュメントの手順に沿って 2 つの静的 IP アドレスを作成します。
  5. 一般公開マネージド ゾーンを作成します。手順については、一般公開マネージド ゾーンの作成に関する記事をご覧ください。
  6. apigee-hybrid-mart のために予約した外部 IP を取得します。
  7. MART エンドポイントのレコードセットを作成します。前の手順で取得した外部 IP を入力し、ドメイン名に接頭辞(mart など)を追加します。手順については、新しいレコードの作成に関する記事をご覧ください。

  8. apigee-hybrid-runtime 用に予約した外部 IP を取得します。
  9. Istio Ingress エンドポイントのレコードセットを作成します。これは、ハイブリッド ゲートウェイに API 呼び出しを実行する際のアドレスです。前の手順で取得した外部 IP を入力し、ドメイン名に接頭辞(apitest など)を追加します。手順については、新しいレコードの作成に関する記事をご覧ください。

  10. 次の例に示すように、DNS レコードデータをコピーします。

  11. Google Domains のドメインページに戻ります。
  12. ドメインを選択します。
  13. [DNS] を選択します。
  14. [ネームサーバー] セクションで [編集] をクリックします。
  15. ネットワーク サービスの Cloud DNS ページからコピーしたドメイン ネームサーバーを入力します。

これで、Google Cloud DNS がドメインの DNS レコードを管理するようになりました。

VM に Certbot をインストールする

ドメイン サーバーを管理するように Cloud DNS が設定されたので、次に dns_google プラグインを使用して、Certbot クライアントを Cloud VM にインストールします。クライアントを使用して、Let's Encrypt エンドポイントからドメインの承認済み証明書を取得できます。

  1. Google Cloud コンソールを開き、ステップ 1: Google Cloud アカウントを作成するで作成したアカウントでログインします。
  2. ステップ 2: GCP プロジェクトを作成するで作成したプロジェクトを選択します。
  3. [IAM と管理] > [サービス アカウント] を選択します。

    [サービス アカウント] ビューに、プロジェクトのサービス アカウントのリストが表示されます。

  4. 新しいサービス アカウントを作成するには、ビューの上部にある [+サービス アカウントを作成] をクリックします。

    [サービス アカウントの詳細] ビューが表示されます。

  5. [サービス アカウント名] フィールドに、サービス アカウントの名前を入力します。

    必要に応じて [サービス アカウントの説明] フィールドに説明を追加できます。説明は、特定のサービス アカウントの用途を把握するのに役立ちます。

  6. [作成] をクリックします。

    GCP により新しいサービス アカウントが作成され、[サービス アカウント権限] ビューが表示されます。このビューを使用して、新しいサービス アカウントにロールを割り当てます。

  7. [ロールを選択] プルダウン リストをクリックします。
  8. プロジェクト オーナー ロールを選択します。
  9. [続行] をクリックします。
  10. [完了] をクリックします。
  11. GCP Console で [Compute Engine] > [VM インスタンス] を選択します。
  12. certmanager という名前の VM インスタンスを作成します。
  13. [ブートディスク] セクションで、SSD 永続ドライブ用に CentOS7 と 20 GB を選択します。
  14. サービス アカウントを上で作成したアカウントに設定します。
  15. Certbot と dns_google プラグインをマシンにインストールし、Certbot クライアントを実行します。
      sudo su -
      yum -y install yum-utils
      yum install certbot -y
      yum install certbot-dns-google -y
      certbot certonly --dns-google -d *.your_domain_name,*.your_domain_name --server https://acme-v02.api.letsencrypt.org/directory
      

    次に例を示します。

    sudo su -
    yum -y install yum-utils
    yum install certbot -y
    yum install certbot-dns-google -y
    certbot certonly --dns-google -d *.apigee-hybrid-docs.net,*.apigee-hybrid-docs.net --server https://acme-v02.api.letsencrypt.org/directory
    
  16. 承認済みの証明書と秘密鍵ファイルは、cd /etc/letsencrypt/live/your_domain_name/ ディレクトリにあります。

    次に例を示します。

    cd /etc/letsencrypt/live/apigee-hybrid-docs.net
    ls
      cert.pem  chain.pem  fullchain.pem  privkey.pem  README

  17. fullchain.pem ファイルと privkey.pem ファイルをローカルマシンにコピーします。
  18. 証明書と秘密鍵を指すようにオーバーライド ファイルを更新します。hostAliases には、以前に作成した DNS 名を使用します。

    次に例を示します。

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: default
        hostAliases: ["apitest.apigee-hybrid-docs.net"]
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
        routingRules:
          - env: test
    
    mart:
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
      sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
      sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
      replicaCountMin: 1
      replicaCountMax: 1
      hostAlias: "mart.apigee-hybrid-docs.net"
  19. 変更を適用します。

    mart 構成を変更した場合は、その変更を適用します。

    apigeectl apply -f your_overrides_file -c mart

    envs 構成を変更した場合は、その変更を適用します。

    apigeectl apply -f your_overrides_file -c runtime
  20. 構成のテスト

    新しい API プロキシを作成してデプロイするの説明に従って、プロキシをデプロイしてテストします。