1. はじめに
AWS CloudFormationを使ってはじめてのIaC実践という事で前回の続きとなります。
目標としてはAWSアカウントを取得したゼロの状態から、IaCでVPCやRole、SecurotyGroupなどの最低限のリソースを作成して、EC2インスタンスを作成する、というところまで行う事です。
第1回はこちら
https://syachiku.net/awscloudformationiac1-vpc/
AWSのCloudFormationでIaCを実践してみる(すべての記事一覧)
第1回 – VPC https://syachiku.net/awscloudformationiac1-vpc/
第2回 – Role https://syachiku.net/awscloudformationiac2-iam-role/
第3回 – SecurityGroup https://syachiku.net/awscloudformationiac3-sg/
第4回 – EC2 https://syachiku.net/awscloudformationiac4-ec2/
第5回 – VPC FlowLogs https://syachiku.net/awscloudformationiac5-flowlogs/
第6回 – CloudTrail https://syachiku.net/awscloudformationiac6-trail/
第7回 – R53 HostedZone https://syachiku.net/awscloudformationiac7-r53-hosted/
前回は何もない状態からVPC関連のネットワークリソースを構築しました。
引き続きEC2インスタンス作成に必要となるリソースの作成を続けていきます。
※今回実施することは基本的には無料ですが、利用料金が発生する可能性が少なからずありますので、あくまで自己責任でお願いします。
2. 前提条件
- AWSアカウントが取得できていること
- 適切な権限(=Admin相当)をもったIAMユーザーを作成していること
- ルーティングなどの最低限のネットワークの知識があること
- YAMLの書きかたを知っていること(CloudFormationはjsonもしくはyamlで書けますが、今回はyamlで書いていきます。)
- AWSのIAMやRoleについて最低限の知識があること(←追加)
3. 今回作成するAWS環境
今回はEC2インスタンスに紐づけを行うIAM RoleとProfileを作成します。
デフォルトで用意されているRoleを使っても良いのですが、セキュリティ的にはEC2から利用するサービス単位で制限を行う方が好ましいです。
そこで、とりあえずとして最低限必要なベースとなるPolicyを作成して、IAM Roleを作成して紐づけます。権限が必要になった際にあとでPolicyを追加します。
また EC2にアタッチするために必要なのでProfileについても作成します。
- 要件
- 将来的にUserDataでサーバ内のアプリのインストールなどを自動構築できるための権限を付与
- ec2インスタンスをsshではなく、SystemManagerのセッションマネージャ経由で操作できるようにあらかじめ権限を付与
4. CloudFormation Template
以下のgithub上に保管していますので参照ください。
https://github.com/gogoloon/aws-cfn-setup/tree/aws-infra-02
今回は少し短いので以下にも載せておきます。
AWSTemplateFormatVersion: "2010-09-09"
Description:
ec2 base iam role
Resources:
Ec2InstanceBaseRole:
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- !Sub "ec2.${AWS::URLSuffix}"
Action:
- "sts:AssumeRole"
Path: "/"
Policies:
- PolicyName: aws-infra-policy-ec2-base
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- "ec2:Describe*"
- "ec2:CreateTags"
- "s3:PutObject"
- "s3:ListBucket"
- "s3:GetObject"
- "s3:GetEncryptionConfiguration"
- "ssm:UpdateInstanceInformation"
- "ssmmessages:CreateControlChannel"
- "ssmmessages:CreateDataChannel"
- "ssmmessages:OpenControlChannel"
- "ssmmessages:OpenDataChannel"
Resource: "*"
Ec2InstanceBaseProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- !Ref Ec2InstanceBaseRole
## ------------------------------------------------------------#
## Output Parameters
## ------------------------------------------------------------#
Outputs:
Ec2InstanceBaseRole:
Value: !Ref Ec2InstanceBaseRole
Export:
Name: ec2-base-role
Ec2InstanceBaseProfile:
Value: !Ref Ec2InstanceBaseProfile
Export:
Name: ec2-base-profile
5. スタックの作成
それでは作成したコードを使って、リソースを作成していきます。
マネージメントコンソールにログオンして、リージョンを大阪に切り替えたのち、CloudFormationを開きます。
「スタックの作成」→「新しいリソースを使用」を選択します。
「テンプレートファイルをアップロード」からコードのファイルを選択します(今回はec2-base-role.template.yamlというファイル名で保存しています)
スタックの名称やネットワーク設定値を入力(デフォルトから変更したい場合には変更してください)してスタックの作成まで進めます。
6. 作成されたリソースの確認
しばらくするとステータスが「CREATE_COMPLETE」となりスタック作成が完了します。
それでは作成されたリソースを確認してみます。
6.1. IAM Role
7. まとめ
想定した通りのIAM Role関連のリソースが作成できました。
次回はEC2のDeploy時に必要となるSecurityGroupを作成します。
今回は以上となります。
コメント