My Note

自己理解のためのブログ

AnsibleでSSMパラメータを管理する

AnsibleでSSMパラメータを管理する

ssmパラメータに登録(Valueが平文の場合)

  • aws_ssm_parameter_storeモジュールを利用する
    • 実行には botocore / boto3 (pipでインストールする)
  • instance_sizeと作成するami-idを登録してみる
  • string_typeは String を指定する
  • IAMロールが必要
    • AmazonEC2RoleforSSM
    • AmazonSSMFullAccess(必要に応じて絞る。為にすために一時的にFullAccessを付与)
- name: Register ssm-parameters
  aws_ssm_parameter_store:
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    region: "{{ region }}"
    string_type: String
  with_items:
    - { name: web_instance_size, value: "{{ web_instance_size }}"}
    - { name: web_base_ami, value: "{{ web_base_ami }}" }
  • 実行結果
TASK [ssm : Register ssm-parameters] ***********************************************************
ok: [localhost] => (item={u'name': u'web_instance_size', u'value': u't2.nano'})
ok: [localhost] => (item={u'name': u'web_base_ami', u'value': u'ami-06c43a7df16e8213c'})
  • ssm-parameterストアから抜粋

f:id:yhidetoshi:20190617083016p:plain

ssmパラメータに登録(Valueを暗号化する場合)

  • string_typeは SecureString を指定する
  • IAMロールが必要
    • AWSKeyManagementServicePowerUserを付与した
      • 暗号化にKMSを利用するため
- name: Register ssm-parameters encrypt-value
  aws_ssm_parameter_store:
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    region: "{{ region }}"
    string_type: SecureString
  with_items:
    - { name: sample_password, value: "{{ sample_password }}"}
  • ssm-parameterストアから抜粋

f:id:yhidetoshi:20190617083301p:plain

SecurityGroup-IDとSubnet-IDとIAMロールARNを動的にssmパラメータに登録する

  • web という名前のSecurityGroup-IDを登録する
    • registeraws-cliの結果を登録する
    • web_sgid.stdoutvalueにして登録する
  • public1 という名前のSubnet-IDを登録する
    • registeraws-cliの結果を登録する
    • web_subnet_id.stdoutvalueにして登録する
  • web という名前のIAMロールARNを登録する
    • registeraws-cliの結果を登録する
    • web_subnet_id.stdoutvalueにして登録する
- name: Fetch web_sgid
  command: /usr/local/bin/aws ec2 describe-security-groups --region {{ region }} --query 'SecurityGroups[?GroupName==`web`].GroupId' --output text
  register: web_sgid
  check_mode: no

- name: Fetch web_subnet_id public1
  command: /usr/local/bin/aws ec2 describe-subnets --region {{ region }} --filters Name=tag:Name,Values="public1" --query 'Subnets[].SubnetId' --output text
  register: web_subnet_id
  check_mode: no

- name: Fetch web_role_profile_arn
  command: /usr/local/bin/aws iam get-instance-profile --instance-profile-name web --query 'InstanceProfile.Arn' --output text
  register: web_role_profile_arn
  check_mode: no

- name: Register ssm-parameters
  aws_ssm_parameter_store:
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    region: "{{ region }}"
    string_type: String
  with_items:
    - { name: web_instance_size, value: "{{ web_instance_size }}"}
    - { name: web_base_ami, value: "{{ web_base_ami }}" }
    - { name: web_sgid, value: "{{ web_sgid.stdout }}"}
    - { name: web_subnet, value: "{{ web_subnet_id.stdout }}"}
    - { name: web_role_profile_arn, value: "{{ web_role_profile_arn.stdout }}"}

- name: Register ssm-parameters encrypt-value
  aws_ssm_parameter_store:
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    region: "{{ region }}"
    string_type: SecureString
  with_items:
    - { name: ansible_vault_password, value: "{{ vault_password }}"}
  • ssmのパラメータはこんな感じに

f:id:yhidetoshi:20190617083044p:plain