nakayumcの技術ブログ

エンジニア2年目のブログです。

AAPのカスタム認証情報タイプの使い方

はじめに

こちらは、エーピーコミュニケーションズ Advent Calendar 2022 の23日目のエントリとなります。

こんにちは、nakayumcです。

今回は、AAPの機能の一つである「カスタム認証情報タイプ」を使って、ユーザ名やパスワードをAnsibleの変数ではなくAAP上で管理出来るようにしてみます。

また、カスタム認証タイプの定義をextra_varsenv でログの出力で違いがあるのでこちらも合わせて比べてみます。

環境

  • Ansible Automation Platform 2.2

Playbook

今回はGithubからHTTPS認証を用いてGitHubからCloneするPlaybookで試してみます。
{{ GITHUB_USER }}{{ GITHUB_PASSWORD }} という変数は、AAPの認証情報で定義をしています。

---
  - name: git clone
    ansible.builtin.git:
      repo: "https://{{GITHUB_USER}}:{{GITHUB_PASSWORD}}@github.com/nakayumc0278/til.git"  #1行です
      dest: "./repository"

カスタム認証情報タイプを作成

まず、カスタム認証情報タイプ(変数を入れる箱のようなもの)を作成します。
AAP の左メニュー、管理 -> 認証情報タイプ を開き、追加ボタンをクリックし登録します。

  • 入力の設定
---
fields:
  - id: github_user
    type: string
    label: github_user
  - id: github_password
    type: string
    label: github_password
    secret: true
required:
  - github_user
  - github_password

ここでは、extra_vars変数に設定してみます。

---
extra_vars:
  GITHUB_USER: '{{ github_user }}'
  GITHUB_PASSWORD: '{{ github_password }}'

以上でカスタム認証情報タイプの設定が完了しました。

認証情報の入力

次に、AAP の左メニュー、リソース -> 認証情報 を開き、追加ボタンをクリックします。
認証情報タイプをクリックすると、先程「認証情報タイプ」で作成したものが出てくるのでクリックします。
ユーザ名とパスワード(APIキーでも可)を入力して保存します。

ジョブテンプレートに認証情報の追加

次に、ジョブテンプレートに先程設定した「認証情報」を追加します。

まず、AAP の左メニュー、リソース -> テンプレート -> 編集マーク でジョブテンプレートを編集します。

認証情報の虫眼鏡マーク -> カテゴリーを 「GitHub Credential Type」 を選択して「認証情報」を選択して保存します。

これで設定完了です。

実行してみよう

実際にPlaybookを起動してみた結果です。

このように正常に完了しましたが、詳細を見てみると認証情報がモロ出しでした。
これは、Playbookに no_log: true を追加すれば避けられますが、デバッグすると出力されてしまいます。

回避方法

ジョブの結果で出力を避けるには、カスタム認証情報タイプを環境変数にすることで回避できます。
実際に設定してみます。

カスタム認証情報を変更

AAP の左メニュー、管理 -> 認証情報タイプ を開き、編集します。
インジェクターの設定で、extra_varsenv に変更し、保存します。

env:
  GITHUB_USER: '{{ github_user }}'
  GITHUB_PASSWORD: '{{ github_password }}'

Playbookの変数を環境変数に設定

Playbookも環境変数にしたことで、変更が必要です。
環境変数を用いるために、{{ GITHUB_USER }}{{ GITHUB_PASSWORD }} を下記に変更します。

---
  - name: git clone
    ansible.builtin.git:
      repo: "https://${GITHUB_USER}:${GITHUB_PASSWORD}@github.com/nakayumc0278/til.git"
      dest: "./repository"

これで再度実行してみます。

このように環境変数を用いることで、認証情報を秘匿することが出来ました。