Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【AWS・Ansible】コマンド1つでIAM Role作成

2020/06/12
Ansibieはナンセンス!
Terraformで書きましょう!
ーーーーーーーーーーーーー

構成管理ツールAnsibleを使って、以下を作成します。

  • IAM Role
  • IAM Policy

後述する「事前準備」が完了しましたら、
以下のコマンドで、いつでも同様の環境が作れるようになります。

実行コマンド

$ ansible-playbook -i hosts/[環境名] aws-iam.yml

実行には、aws profileの設定が必要になります。
AWSアカウント情報をパラメータファイルに記載し実行することも可能ですが、
セキュリティ面を考慮し、aws profileを使用しました。

まだ設定されていない方は、以下の公式ドキュメントを参考に設定を行ってください。

名前付きプロファイル - AWS CLI の設定

事前準備

以下が必要になります。
足りないのもは、インストールしてください。

  • boto
  • python >= 2.6
  • Jinja2

次に、以下のファイルを作成しましょう。

Playbookファイル

このファイルでは、実行するTaskを定義します。
コマンドを実行すると、上からTaskが順に実行されます。

aws-iam.yml
---
- hosts: localhost
  connection: local
  gather_facts: False
  become: False
  tasks:
    - name: "IAM Roles"
      iam:
        iam_type: role
        name: "{{ item.name }}"
        state: present
        profile: "{{ profile }}"
      with_items: "{{ iam_role }}"
    - name: "IAM Policy"
      iam_policy:
        iam_type: role
        iam_name: "{{ item.0.name }}"
        policy_name: "{{ item.1 }}"
        policy_json: "{{ lookup('template','policy/' + item.1 + '.json', convert_data=False) }}"
        state: present
        profile: "{{ profile }}"
      with_subelements:
        - "{{ iam_role }}"
        - policy

IAM Policyファイル

policy/[プロキシ名].json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
       ここに許可するアクションを記載
      ],
      "Resource": [
       許可先のAWSリソースを記載
      ]
    }
  ]
}

パラメータファイル

構築する際の設定パラメータをこのファイルに集約します。
構築したい環境に合わせて、パラメータを記載してください。

なお、ファイルの配置先は、環境名に合わせて配置してください。

環境別にフォルダを分けて、パラメータファイルを作成することで、
開発/検証/本番 環境など、各環境に応じて動的に構築可能となります。

hosts/[環境名]/group_vars/all.yml
---
# Common
env: [環境名]
profile: [プロファイル名]
region: [リージョン]

# IAM Roles
#
iam_role:
  - name: [IAM Role名]
    policy:
      - [Policy名]
      
      
      
  - name: 
  
  
  

おわりに

今回は、構成管理ツールAnsibleを使いましたが、
AWSのCloud formationでも、同様のことができます。

ただ、Ansibleの場合、システム内構築(SSH、OSユーザーなど)なども定義することができ、
おすすめのツールです。

Ansibleの良いところは、
事前にTaskさえ定義しておけば、後はプロジェクトや環境に合わせて設定パラメータを用意するだけ。
簡単に基盤構築ができてしまうところです。

AWS Consoleから手作業で構築するより、
Ansibleで構築した方が、圧倒的に工数を短縮することができます。

お仕事で、AWSの基盤構築されてる方は、是非、Ansibleを活用してみてください。

yamazakim
某総合外資系コンサルファームにてクラウドコンサルやってます。 前職はクラウドアーキテクト兼SEでした。 お気に入り技術/サービスはTerraform, Docker, AWS Cognito, Azure Security Centerです! 私の記事は大したものないので見ない方が良いですよw
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away