Skip to main content

GitHub API への ARC の認証

GitHub API に対して Actions Runner Controller を認証する方法について説明します。

GitHub App または personal access token (classic) を使うことで、GitHub API に対して Actions Runner Controller (ARC) の認証を行うことができます。

メモ

エンタープライズ レベルで、ランナーに対応する GitHub App を使用して認証を行うことはできません。 詳しくは、「グループを使用してセルフホストランナーへのアクセスを管理する」をご覧ください。

GitHub App で ARC の認証を行う

  1. 組織が所有するGitHub Appを作成してください。 詳しくは、「GitHub アプリの登録」をご覧ください。 次のように GitHub App を構成します。

    1. [ホームページの URL] に「https://github.com/actions/actions-runner-controller」と入力します。

    2. [アクセス許可] で [リポジトリのアクセス許可] をクリックします。 次に、ドロップダウン メニューを使って、次のアクセス許可を選びます。 * 管理: 読み取りと書き込み

      メモ

          `Administration: Read and write` は、リポジトリ スコープに登録するように Actions Runner Controller を構成する場合にのみ必要です。 組織のスコープで登録する必要はありません。
      
      •   **メタデータ**: 読み取り専用
        
    3. [アクセス許可] で、[組織のアクセス許可] をクリックします。 次に、ドロップダウン メニューを使って、次のアクセス許可を選びます。 * セルフホステッド ランナー 読み取りと書き込み

  2. GitHub App のページで GitHub App を作成した後、"アプリ ID" の値を書き留めます。 この値は後で使用します。

  3. [秘密キー] で、 [秘密キーの生成] をクリックし、.pem ファイルを保存します。 このキーは後で使用します。

  4. ページの左上隅のメニューで [アプリのインストール] をクリックし、Organization の横にある [インストール] をクリックして、Organization にアプリをインストールします。

  5. Organization でインストールのアクセス許可を確認した後、アプリのインストール ID を記録しておきます。 あなたはこれを後で使います。 アプリのインストール ID はアプリのインストール ページで確認でき、次の URL 形式になっています。

    https://github.com/organizations/ORGANIZATION/settings/installations/INSTALLATION_ID

  6. アプリ ID、インストール ID、および前の手順でダウンロードした .pem 秘密キー ファイルを Kubernetes にシークレットとして登録します。

    GitHub App の値を使って Kubernetes シークレットを作成するには、次のコマンドを実行します。

    メモ

    gha-runner-scale-set グラフがインストールされているのと同じ名前空間にシークレットを作成します。 この例では、名前空間は arc-runners クイックスタート ドキュメントと一致します。 詳しくは、「アクション ランナー コントローラーのクイックスタート」をご覧ください。

    Bash
    kubectl create secret generic pre-defined-secret \
       --namespace=arc-runners \
       --from-literal=github_app_id=123456 \
       --from-literal=github_app_installation_id=654321 \
       --from-literal=github_app_private_key='-----BEGIN RSA PRIVATE KEY-----********'
    

    次に、values.yaml ファイルのコピーで githubConfigSecret プロパティを使用して、シークレット名を参照として渡します。

    githubConfigSecret: pre-defined-secret
    

その他の Helm 構成のオプションについては、ARC リポジトリの values.yaml を参照してください。

personal access token (classic) で ARC の認証を行う

ARC では、personal access tokens (classic) を使ってセルフホステッド ランナーを登録できます。

メモ

personal access token (classic) での ARC の認証は、Enterprise レベルでランナーを登録するためにサポートされている唯一の認証方法です。

  1. 必要なスコープを使って personal access token (classic) を作成します。 必要なスコープは、リポジトリ、Organization、または Enterprise のどのレベルでランナーを登録するかによって異なります。 personal access token (classic) の作成方法の詳細については、「個人用アクセス トークンを管理する」を参照してください。

    ARC ランナーに必要な personal access token スコープの一覧を次に示します。

    • リポジトリ ランナー: repo
    • Organization ランナー: admin:org
    • Enterprise ランナー: manage_runners:enterprise
  2. personal access token (classic) の値を使って Kubernetes シークレットを作成するには、次のコマンドを使います。

    メモ

    gha-runner-scale-set グラフがインストールされているのと同じ名前空間にシークレットを作成します。 この例では、名前空間は arc-runners クイックスタート ドキュメントと一致します。 詳しくは、「アクション ランナー コントローラーのクイックスタート」をご覧ください。

    Bash
    kubectl create secret generic pre-defined-secret \
       --namespace=arc-runners \
       --from-literal=github_token='YOUR-PAT'
    
  3. お使いのvalues.yamlファイルのコピーで、シークレット名を参照渡しとして指定します。

    githubConfigSecret: pre-defined-secret
    

    データ 再利用可能アクション.actions-runner-controller-helm-chart-オプション %}

fine-grained personal access token を使用した ARC の認証

ARC では、fine-grained personal access tokens を使ってセルフホステッド ランナーを登録できます。

メモ

personal access token (classic) での ARC の認証は、Enterprise レベルでランナーを登録するためにサポートされている唯一の認証方法です。

  1. 必要なスコープを使って fine-grained personal access token を作成します。 必要なスコープは、リポジトリまたは organization のどちらのレベルでランナーを登録するかによって異なります。 fine-grained personal access token の作成方法について詳しくは、「個人用アクセス トークンを管理する」をご覧ください。

    ARC ランナーに必要な personal access token スコープの一覧を次に示します。

    • リポジトリ ランナー: * 管理: 読み取りと書き込み

    • organization (組織) のランナー: * 管理: 読み取り * セルフホステッド ランナー 読み取りと書き込み

  2. fine-grained personal access token の値を使って Kubernetes シークレットを作成するには、次のコマンドを使います。

    メモ

    gha-runner-scale-set グラフがインストールされているのと同じ名前空間にシークレットを作成します。 この例では、名前空間は arc-runners クイックスタート ドキュメントと一致します。 詳しくは、「アクション ランナー コントローラーのクイックスタート」をご覧ください。

    Bash
    kubectl create secret generic pre-defined-secret \
       --namespace=arc-runners \
       --from-literal=github_token='YOUR-PAT'
    
  3. お使いのvalues.yamlファイルのコピーで、シークレット名を参照渡しとして指定します。

    githubConfigSecret: pre-defined-secret
    

    データ 再利用可能アクション.actions-runner-controller-helm-chart-オプション %}

ARC をボルトのシークレットで認証する

メモ

Vault 統合は現在、Azure Key Vaultをサポートするパブリック プレビューで利用できます。

gha-runner-scale-set バージョン 0.12.0 以降、ARC では、外部コンテナーからのGitHub資格情報の取得がサポートされています。 Vault (コンテナー) の統合は、ランナースケールセットごとに構成されます。 つまり、セキュリティと運用の要件に応じて、一部のスケール セットは Kubernetes のシークレットを使って実行し、他のスケール セットではコンテナーベースのシークレットを使って実行することができます。

ボールト統合の有効化

ランナー スケール セットのボールト統合を有効にするには:

  1.        `githubConfigSecret` ファイルの **** フィールドを、ボールトに保管されているシークレットキーの名前に設定します。 この値には文字列を設定する必要があります。
    
  2.        `keyVault` のコメントを解除し、適切なプロバイダーとアクセスの詳細で設定してください。
    
  3. コントローラーとリスナーの両方に必要な証明書を提供してください****。 これを行うには、証明書が含まれるコントローラー イメージをリビルドするか、listenerTemplatecontrollerManager フィールドを使ってコントローラーとリスナーの両方で証明書をボリュームとしてマウントします。

秘密フォーマット

Azure Key Vaultに格納されるシークレットは、JSON 形式である必要があります。 構造は、お使いの認証の種類によって異なります。

例: GitHub トークン

{
  "github_token": "TOKEN"
}

例: GitHub アプリ

{
  "github_app_id": "APP_ID_OR_CLIENT_ID",
  "github_app_installation_id": "INSTALLATION_ID",
  "github_app_private_key": "PRIVATE_KEY"
}

Vault統合用の values.yaml の構成

証明書は .pfx ファイルとして格納され、/akv/cert.pfx でコンテナーにマウントされます。 次に示すのは、認証にこの証明書を使うように keyVault セクションを構成する方法の例です。

keyVault:
  type: "azure_key_vault"
  proxy:
    https:
      url: "PROXY_URL"
      credentialSecretRef: "PROXY_CREDENTIALS_SECRET_NAME"
    http: {}
    noProxy: []
  azureKeyVault:
    clientId: <AZURE_CLIENT_ID>
    tenantId: <AZURE_TENANT_ID>
    url: <AZURE_VAULT_URL>
    certificatePath: "/akv/cert.pfx"

コントローラーとリスナーへの証明書の提供

ARC で、コンテナーと組み合わせて認証を行うには、.pfx 証明書が必要です。 コントローラーのインストールの間にコントローラーとリスナーの両方のコンポーネントでこの証明書を使用できるようにする必要があります。 これを行うには、controllerManager ファイルの listenerTemplatevalues.yaml フィールドを使って、証明書をボリュームとしてマウントします。

volumes:
  - name: cert-volume
    secret:
      secretName: my-cert-secret
volumeMounts:
  - mountPath: /akv
    name: cert-volume
    readOnly: true

listenerTemplate:
  volumeMounts:
    - name: cert-volume
      mountPath: /akv/certs
      readOnly: true
  volumes:
    - name: cert-volume
      secret:
        secretName: my-cert-secret

次のコードは、スケール セットの values.yml ファイルの例です。

listenerTemplate:
  spec:
    containers:
      - name: listener
        volumeMounts:
          - name: cert-volume
            mountPath: /akv
            readOnly: true
    volumes:
      - name: cert-volume
        secret:
          secretName: my-cert-secret

Apache-2.0 ライセンスのもとで https://github.com/actions/actions-runner-controller/ から一部を引用しています。

Copyright 2019 Moto Ishizawa

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.