カテゴリー
2020年 AWS PaaS クラウド コンピューター サーバレス 技術一般 自動化

AWS を学ぶ(22)CloudFormation とは何か?


にほんブログ村

AWS の自動化サービスは、以下の 3つがあります。

  • AWS Elastic Beanstalk
  • AWS OpsWorks
  • CloudFormation

どのサービスにも向き不向きがあり、得意とする部分がありますので、要件に合わせて使用することが大切です。

Elastic Beanstalk

インフラ構成の自動構築とアプリ導入の自動化サービスです。こちらの記事で、以前調べています。

  • Web サーバー構成(ELB + AutoScaling + EC2)
  • バッチワーカー構成(SQS + AutoScaling + EC2)
  • OS より上も下も、標準構成の範囲内で対応(自由度は高くはない)

OpsWorks

Chef を利用した構成管理サービスです。

  • EC2 上のエージェントが OpsWorks 上の Chef レシピ(構成設計図)を参照し自動構築
  • 自前で Chef Client / Server を構築・保守する必要がない
  • Chef を既に利用している環境に最適
  • OS よりも下のレイヤーに関しては、できることが限られている

CloudFormation

AWS のリソース管理・構築を自動化するサービスです。

  • テンプレート(構築設計書)を JSON や YAML 形式で記述
  • テンプレートを元に、AWS のリソースを自動構築
  • OS より上は、Ansible や Chef を併用する必要がある
  • OS より下は、テンプレートに従って何でも可能(自由度が高い)

CloudFormation とは

CloudFormation は、以下の2つから構成されます。

  • テンプレート
  • スタック

テンプレート: AWS のリソースを JSON や YAML 形式で記載した構成設計図

スタック: テンプレートから構成された AWS のリソース群

複数のリソースを集合として管理しているため、削除する時も、個別でなく、全体で削除が可能となります。

テンプレートの構成

今回は、YAML 形式を使ってみます。サンプルのテンプレートは、こんな感じです。

テンプレートの内容ですが、

「VPC を作成し、そこにサブネットを 1つ作成し、IGW を作成して、デフォルトルートを向ける」

になっています。

AWSTemplateFormatVersion: '2010-09-09'
Description: Test CloudFormation Template

Resources:
  cfnVpc:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '192.168.0.0/16'
      Tags:
        - Key: 'Name'
          Value: 'cfn-vpc'
  cfnSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      CidrBlock: '192.168.1.0/24'
      MapPublicIpOnLaunch: true
      Tags:
        - Key: 'Name'
          Value: 'cfn-subnet'
      VpcId: !Ref cfnVpc
  cfnInternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
      - Key: 'Name'
        Value: 'cfn-igw'
  cfnAttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref cfnVpc
      InternetGatewayId: !Ref cfnInternetGateway
  cfnRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      Tags:
        - Key: 'Name'
          Value: 'cfn-rt'
      VpcId: !Ref cfnVpc
  cfnRoute:
    Type: AWS::EC2::Route
    DependsOn: cfnInternetGateway
    Properties:
      RouteTableId: !Ref cfnRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref cfnInternetGateway
  cfnSubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref cfnSubnet
      RouteTableId: !Ref cfnRouteTable

各項目を、1つずつ見ていきましょう。

「AWSTemplateFormatVersion: ‘2010-09-09’」ですが、バージョンの日付は、このまま使う必要があります。変更すると、エラーになります。

現在はこれを使うようにと、AWSのページにも記載がありました。

「Resources:」で、VPC、サブネット、IGW、ルートテーブルなどを指定して、設定をしていきます。

ここで指定できる項目や指定の仕方は、AWS のこちらのページに詳しく記載があります。

まず、VPC を作成します。

VPC で使用するアドレスブロックは、ここでは、「192.168.0.0 /16」 とします。

Tags の「Value:」 で、VPC の名前をタグ付けします。

  cfnVpc:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '192.168.0.0/16'
      Tags:
        - Key: 'Name'
          Value: 'cfn-vpc'

次に、VPC 内に、サブネットを作成します。

サブネットで使用するアドレス範囲は、ここでは、「192.168.1.0 /24」 とします。

Tags の「Value:」で、サブネットの名前をタグ付けします。

「VpcId:」 で、どこの VPC 上にサブネットを作成するのかを指定するのですが、「!Ref」関数で、上で作成した VPC の名前を参照させます。

 cfnSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      CidrBlock: '192.168.1.0/24'
      MapPublicIpOnLaunch: true
      Tags:
        - Key: 'Name'
          Value: 'cfn-subnet'
      VpcId: !Ref cfnVpc

次に、Internet Gateway を作成します。

Tags の「Value:」で、Internet Gateway の名前をタグ付けします。

  cfnInternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
      - Key: 'Name'
        Value: 'cfn-igw'

次に、作成したInternet Gateway を VPC にアタッチします。

「VpcId:」で、どこの VPC にアタッチするするのかを指定するのですが、「!Ref」関数で、上で作成した VPC の名前を参照させます。

cfnAttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref cfnVpc
      InternetGatewayId: !Ref cfnInternetGateway

次に、ルートテーブルを作成します。

Tags の「Value:」で、Internet Gateway の名前をタグ付けします。

「VpcId:」で、どこの VPC にアタッチするするのかを指定するのですが、「!Ref」関数で、上で作成した VPC の名前を参照させます。

cfnRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      Tags:
        - Key: 'Name'
          Value: 'cfn-rt'
      VpcId: !Ref cfnVpc

次に、デフォルトルートを作成します。

「RouteTableId:」で、どのルートテーブルに作成するのかを指定するのですが、「 !Ref cfnRouteTable」関数で、上で作成したルートテーブルの名前を参照させます。

cfnRoute:
    Type: AWS::EC2::Route
    DependsOn: cfnInternetGateway
    Properties:
      RouteTableId: !Ref cfnRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref cfnInternetGateway

最後に、ルートテーブルをサブネットに関連づけます。

「SubnetId:」 で、どのサブネットに関連づけるのかを指定するのですが、「!Ref cfnSubnet」関数で、上で作成したサブネットの名前を参照させます。

「RouteTableId:」で、どのルートテーブルに作成するのかを指定するのですが、「 !Ref cfnRouteTable」関数で、上で作成したルートテーブルの名前を参照させます。

cfnSubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref cfnSubnet
      RouteTableId: !Ref cfnRouteTable

「VPC を作成し、そこにサブネットを1つ作成し、IGW を作成して、デフォルトルートを向ける」

これくらいの作業であれば、GUI から行っても良いのですが、サブネットの数が多かったりすると大変です。自動化サービスを使うと便利ですね。

長くなってしまったので、実際にCloudFormation を使ってみるのは、次の記事にしたいと思います。

この教材を使って勉強してます。

AWS認定資格試験テキスト AWS認定ソリューションアーキテクト-アソシエイト

AWSに関連する記事:

関連する記事:

最近の記事:

カテゴリー
2020年 AWS AWS Solutions Architect - Associate クラウド コンピューター 技術一般 認定資格

AWSを学ぶ(16)IAMについて

AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのサービスです。

IAM は基本的な機能なのですが、非常に重要な機能です。AWS のアカウントを作成したばかりの状態ですと、Root ユーザーのみが作成され、そのユーザーでログインしています。

このRoot ユーザーですが、非常に権限のあるユーザーで、名前の通り、AWS 上のオペレーションを何でも行うことができます。

このアカウント情報が、仮に外部に漏れてしまうと、AWS アカウントが乗っ取られ、何でもできてしまうという危険があります。

これを避けるために、IAM ユーザーを作成し、そのユーザーを使って運用するというのが、ベストプラクティスとなります。

IAM の基本機能

IAM の設定項目として、以下の4つがあります。

IAM ポリシー: 何を許可し、何ができるのかを定義します。例えば、EC2の操作は閲覧と開始、起動のみ許可し、削除は許可しないなどです。

IAM ユーザー: ユーザー名のことです。

IAM グループ: 複数のユーザーをグループ化します。

IAM ロール: 何ができるかを定義するポリシーを指定し、サーバー(仮想インスタンス)に適用します。

これらの設定項目が、それぞれどの様なものなのか見ていきましょう。

IAM ユーザーとIAM ポリシーを作成します。

作成したポリシーを、権限内容に応じて、必要なIAM ユーザーに割り当てます。これで、IAM ユーザーに何ができるかの権限が割り当てられます。これをインラインポリシーと呼びます。

インラインポリシーでも良いのですが、IAM ユーザーの数が増えた場合はどうでしょうか。運用が煩雑になりますよね。権限の許可忘れや、意図しない権限を割り当ててしまったりして、事故に繋がるケースもあり得ます。

これを避けるために、IAM グループを利用します。IAM ポリシーは、IAMグループに割り当てます。そして、IAM ユーザーを、必要なIAM グループに所属させるのです。これにより、運用が楽になります。IAM ユーザーは、所属するグループを変更するだけで、権限内容も変更可能となります。

次に、IAM ロールです。

IAM ロールは、IAM ユーザーに割り当てるのではなく、サーバー(仮想インスタンス)に割り当てます。

IAM ポリシーで、何を許可するのかを定義し、そのIAM ポリシーをIAM ロールに割り当てます。そして、そのIAM ロールをサーバーに割り当てることで、サーバに権限を適用することができます。

IAM を使ってみよう

IAM ポリシーの作成

AWS の管理コンソールにログインし、検索テキストボックスにIAMと入力します。

IAM の管理コンソールに接続します。

左側のメニューから、「ポリシー」をクリックします。

ポリシーの一覧が表示されます。これらは、AWS が用意しているポリシーとなります。

自分で新規にポリシーを作成してみましょう。

「ポリシーのフィルター」をクリックし、表示されるメニューの中から「ユーザーによる管理」をクリックします。

「ポリシーの作成」をクリックします。

「ビジュアルエディタ」のタブの中に、メニューが表示されます。「サービス」をクリックします。

サービスの一覧が表示されます。非常にたくさんのサービスがありますので、検索を使って、使用したいサービスを選択していきます。

まず、EC2を設定してみましょう。検索エキストボックスに、「EC2」と入力します。

EC2関連のサービスのみが表示されますので、「EC2」をクリックします。

実行可能なアクションが表示されます。

リスト:参照系アクション

  • リスト: 表示系のアクション
  • 読み込み: 参照系のアクション
  • タグ付け: タグの追加、削除、編集アクション
  • 書き込み: 書き込み系のアクション
  • アクセス権限の管理: アクセス制御系のアクション

「リスト」をクリックして、表示系アクションの詳細を表示します。

アクションの詳細が表示されます。ここから、具体的に適用したいアクションを細かく選択できます。

今回は、リストは、全てのアクションを選択します。また、読み込みも全てのアクションを選択します。

次に、「書き込み」をクリックします。

書き込み系アクションの一覧が表示されます。今回は、書き込みに関しては、一部のアクションのみを許可してみたいと思います。

アクションはたくさんあるので、CTL+Fで検索すると早いです。

今回許可したいアクションは、EC2インスタンスの起動(StartInstance)と停止(StopInstance)です。それ以外の書き込み系アクションは許可しません。この2つのアクションだけを選択します。

書き込み系アクションで、2つのみが許可されてますね。

次に、アクションの対象の指定です。「リソース」の項目になります。

今回は、「全てのリソース」を選択し、EC2インスタンス全てに対して、上記アクションを適用します。

「リクエスト条件」では、MFA(多要素認証が必要)や、送信元IPアドレスを限定するなどが設定可能となります。

今回はこれらの機能は使用しません。指定せずに進めます。

EC2に対しての権限設定は完了しました。画面の上部に戻り、EC2の横の三角ボタンを押して、詳細画面を閉じます。

再び、サービスの検索に戻ります。

次に、RDSに対するアクションを指定していきます。

検索テキストに「RDS」と入力し、RDS関連のサービス一覧を表示させます。

「アクセスレベル」が表示されます。先ほどのEC2の時と同じ感じで、設定していきます。

表示系と読み込み系の権限は、全て与えます。

書き込み系の権限はですが、今回は何も与えません

次に、「リソース」の右側の三角ボタンをクリックします。

RDSサービスの全てに対して、指定したアクションを適用します。

これで、2つのサービスに対する権限が完成しました。

画面下部の「ポリシーの確認」をクリックします。

ポリシーの確認画面が表示されます。

今、作成したポリシーの名前を入力し、説明のテキストボックスに、そのポリシーの説明を入力します。

最後に、画面下部の「ポリシーの作成」をクリックします。

ポリシーが作成されました。

「ポリシーフィルター」から、実際に見てみましょう。

先ほど作成した、EC2とRDS向けのポリシーが見えますね。

IAM ユーザーの作成

次に、IAM ユーザーを作ってみましょう。

IAM 管理コンソールの左側メニューから、「ユーザー」をクリックします。

「ユーザーを追加」をクリックします。

まず、ユーザー名を入力します。

次に、「アクセスの種類」から、「AWSマネジメントコンソールへのアクセス」を選択します。

次に、「コンソールのパスワード」です。ここには、ログインの際に使用するパスワードを入力します。

最後に、「パスワードのリセットが必要」です。今回はこの機能は使用しませんので、チェックは入れません。

「次のステップ」をクリックします。

アクセス許可の設定画面が表示されます。

今回は、まずはインラインポリシー(IAM ユーザーに直接、IAM ポリシーを割り当てる)を試してみたいと思いますので、「既存のポリシーを直接アタッチ」を選択します。

ポリシーの一覧が表示されます。

「ポリシーのフィルタ」をクリックし、メニューから、「ユーザーによる管理」にチェックを入れます。

先ほど作成したポリシーが表示されますので、ポリシーの名前を選択します。

「次のステップ」をクリックします。

タグの追加画面が表示されます。

タグを入力しておきます。

「次のステップ」をクリックします。

最後に、画面下部の「ユーザーの作成」をクリックします。

ユーザーが作成されました。

これで、作成したユーザー「User-01」に対して、作成したIAM ポリシーが適用されました。

権限の確認

今回の手順では、ユーザーを作成し、そのユーザーに対して、自分で定義したポリシーを直接適用(インラインポリシー)しました。

次に、そのユーザーでログインして、想定通りの権限であるかを確認してみましょう。

IAM 管理コンソールの画面左側メニューから、「ダッシュボード」をクリックします。

「IAM ユーザーのサインインリンク」が表示され、その下にログインに使用するURLが表示されます。これをコピーします。

コピーしたURLをブラウザーに入力してアクセスします。

ログイン画面が表示されます。

作成したユーザー名、そのパスワード入力してログインします。

ログインすると、画面右上に、ログイン中のユーザー名が表示されます。「User-01」になってますね。

EC2の管理コンソールにアクセスします。

画面左側メニューの「インスタンス」をクリックして、インスタンスの管理画面にアクセスします。

テスト様のAmazon Linuxのインスタンスがあるので、これを使ってみます。

「開始」をクリックして、インスタンスを起動します。

インスタンスの起動が始まりました。成功ですね。今回適用しているポリシーでは、EC2の全てのインスタンスに対して、起動と停止は許可しています。

次に、インスタンスを終了してみましょう。このアクションは、ポリシーで許可されていないはずです。

終了保護されているので、終了ができないようです。

ならば、終了保護を解除してみましょう。

「アクション」から、「終了保護の変更」をクリックします。

「はい」をクリックして、終了保護を無効化します。

エラーとなり、終了保護の解除ができません。

EC2インスタンスに対して、終了の権限がないためですね。

ここで思いました。

Rootユーザーならば、終了保護を外すことができるので、これを外した後では、どの様になるのだろう?

早速、試してみましょう。Rootユーザーでログインして、先ほどのインスタンスの終了保護を外してみます。

Rootユーザーでログインしています。

「はい」をクリックし、終了保護を無効化します。

インスタンスの終了保護が無効化されましたので、先ほどのUser-01で、再度ログインします。

User-01でログインしました。再度、インスタンスの終了を行ってみます。

終了エラーとなり、終了させられません。

権限がないことが検証できましたね。

IAM グループの作成

次は、IAM グループを作成してみましょう。

前回までの手順では、IAM ユーザーに、IAM ポリシーを直接割り当てる、インラインポリシーで行いましたが、今回は、IAM グループを作成し、IAM ポリシーはグループに割り当て、IAM ユーザーを、そのグループに所属させるという方法を行います。

IAM の管理コンソールの画面左側メニューから、「グループ」をクリックします。

「新しいグループの作成」をクリックします。

グループ名の設定画面が表示されます。

グループ名を入力します。

「次のステップ」をクリックします。

ポリシーのアタッチ画面が表示されます。

「ポリシーフィルタ」から、「カスタマー管理ポリシー」を選択します。

ポシリーのアタッチ画面が表示されます。

ポリシー名のところに、先ほど作成したポリシーが表示されますので、適用したいポリシーを選択します。

確認画面が表示されますので、設定内容を確認します。

画面下部の「グループの作成」をクリックします。

グループが作成されました。

次に、作成したグループに、ユーザーを所属させてみます。

追加したいグループ名を選択し、「グループのアクション」から「グループにユーザーを追加」を選択します。

ユーザー名の一覧が表示されます。

追加したいユーザーを選択します。

画面下部の「ユーザーの追加」をクリックします。

グループ名の隣が、そのグループに所属しているユーザーの数になります。User-01を所属させましたので1になりましたね。

これで、IAM ポリシーをIAM グループに適用し、IAM ユーザーはグループに所属するという形ができました。

この教材を使って勉強してます。

AWS認定資格試験テキスト AWS認定ソリューションアーキテクト-アソシエイト

AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト【電子書籍】[ 佐々木 拓郎 ]価格:2,618円
(2020/8/30 16:09時点)
感想(0件)