はじめに
community.awsにあるssm_parameterモジュールで、ユーザとパスワードを登録します。
AWS Systems Manager(SSM)パラメータストアは名前にシークレットと付かないし、同系統のサービスでシークレットマネージャーがあるためセキュリティは強くないイメージを持ってしまいますが、そんなことはありません。
オプションには string_type
があり、平文のString
StringList
、暗号化のSecureString
と選択できます。
環境
- ansible core: 2.13.7
- community.aws: 5.0.0
5.0.0以降ののモジュール名はcommunity.aws.ssm_parameterで、それより前はcommunity.aws.aws_ssm_parameter_storeです。
使い方は特に変わりありません。
パラメータストアにユーザとパスワードを登録する
パラメータストアは、1組のkey:value(またはlist)が登録できます。
複数のkey:valueが登録できるシークレートマネージャとは異なります。
Playbook
2組のkey:valueを登録するので、それぞれモジュールを実行します。
また、パラメータストアの値はlookupプラグインで取得できます。
--- - hosts: localhost gather_facts: no tasks: - name: Create key/value pair in AWS SSM parameter store community.aws.ssm_parameter: name: "web_user" string_type: "String" # ユーザの種別はStringを指定 value: "admin" - name: Create key/value pair in AWS SSM parameter store community.aws.ssm_parameter: name: "web_password" string_type: "SecureString" # パスワードの種別はSecureStringを指定 value: "oioioioi" - debug: msg: "{{ lookup('amazon.aws.aws_ssm', item) }}" # lookupプラグインを使って呼び出す loop: - "web_user" - "web_password"
実行ログ
想定通りに登録されました。
$ ansible-playbook add_paramater.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [localhost] ************************************************************************** TASK [Create key/value pair in AWS SSM parameter store] *********************************** changed: [localhost] TASK [Create key/value pair in AWS SSM parameter store] *********************************** changed: [localhost] TASK [debug] ****************************************************************************** ok: [localhost] => (item=web_user) => { "msg": "admin" } ok: [localhost] => (item=web_password) => { "msg": "oioioioi" } PLAY RECAP ******************************************************************************** localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 $
「/」で階層構造を表示する
nameの先頭に「/」を付ける必要があります。
複数のkey:valueをまとめられるシークレットマネージャーと比べると見づらい部分もありますが、
先頭にシステム名を入れスラッシュで区切ると、登録数が増えても幾分か見やすくなります。
Playbook
--- - hosts: localhost gather_facts: no tasks: - name: Create key/value pair in AWS SSM parameter store community.aws.ssm_parameter: name: "/web/user" # 先頭に必ず「/」を入れる string_type: "String" value: "admin" - name: Create key/value pair in AWS SSM parameter store community.aws.ssm_parameter: name: "/web/password" # 先頭に必ず「/」を入れ string_type: "SecureString" value: "oioioioi" - debug: msg: "{{ lookup('amazon.aws.aws_ssm', item) }}" loop: - "/web/user" - "/web/password"
実行ログ
無事に取得できました。
$ ansible-playbook add_paramater.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [localhost] ************************************************************************** TASK [Create key/value pair in AWS SSM parameter store] *********************************** changed: [localhost] TASK [Create key/value pair in AWS SSM parameter store] *********************************** changed: [localhost] TASK [debug] ****************************************************************************** ok: [localhost] => (item=/web/user) => { "msg": "admin" } ok: [localhost] => (item=/web/password) => { "msg": "oioioioi" } PLAY RECAP ******************************************************************************** localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 $
備考
値を登録するだけであれば、パラメータストアは値の履歴が残り、課金されるまでの上限も余裕があるため、シークレットマネージャーよりも使いやすいかもしれません。
また、CloudFormationではSecureStringは作成できないようです。