AWSのEBSボリュームにタグをつけるLambdaを作った記録

EBSボリュームは管理しないと無駄にお金がかかります。

何気なくEC2を作るとEBSボリュームが作られます(既存のボリュームを使った場合を除く)。
EC2を削除(終了)してもEBSボリュームはデフォルトで削除されません。
結果、気が付いたら使ってないEBSボリュームが残っていることがあります。
aws.amazon.com

EC2インスタンスを削除するときはEBSボリュームも削除します。

f:id:ponsuke_tarou:20200106105351p:plain
EC2を削除するときのダイアログ

EC2インスタンスを作成するときは「合わせて削除」オプションを設定することもできます。

後で設定するのは大変なようです。
qiita.com

それでもアタッチされていないEBSボリュームが残ることはあります。

複数人で長期間使っていればうっかりアタッチされていないEBSボリュームが残ることはあります。
とはいえ、本当にアタッチされていなければ削除していいのか?誰かが何かの目的で残しているのかも?
となった時に何に使われていたがわかる情報があると助かります。

やりたいこと

前提 : EC2にはNameタグをつけておきます。

EC2インスタンスには、Nameというタグをつけてインスタンスを使っているプロジェクトやサーバの情報をValueに入れておきます。
例えば、ponsukeプロジェクトのMySQLデータベースサーバにしているインスタンスなら「ponsuke-MySQL」をNameタグのValueに入れておく、みたいな。

アタッチされているEC2のNameタグと同じValueをEBSボリュームのNameタグに設定します。

例えば、「ponsuke-MySQL」というNameタグのついているEC2インスタンスにアタッチされているEBSボリュームに「ponsuke-MySQL」というNameタグをつける、みたいな。
そうすれば、EC2インスタンスを削除したあとでも「ponsuke-MySQL」で使っていたんだな、じゃ削除していいね、ってなります。

同じようなことをやっている先人の知恵を流用します。

www.simpline.co.jp
core.cohalz.co

Lambdaを作る記録

Lambdaの実行権限を作成します。

IAMのポリシーを作成します。
  1. AWSマネジメントコンソールにある[IAM] > サイドメニューの[ポリシー] > [ポリシーの作成]ボタンで作成画面を開きます。
    • f:id:ponsuke_tarou:20200109100533p:plain
      [ポリシーの作成]ボタンで作成画面を開きます。
  2. [JSON]タブを開いて下にある内容を入力します。
  3. [ポリシーの確認]ボタンで確認画面へ遷移して[名前(必須)]と[説明(任意)]を入力します。
  4. [ポリシーの作成]ボタンでポリシーを作成して一覧画面に戻ります。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:CreateTags",
        "logs:CreateLogStream",
        "logs:CreateLogGroup",
        "logs:PutLogEvents"
      ],
      "Resource": "*"
    }
  ]
}
IAMのロールを作成します。
  1. AWSマネジメントコンソールにある[IAM] > サイドメニューの[ロール] > [ロールの作成]ボタンで作成画面を開きます。
    • f:id:ponsuke_tarou:20200109101230p:plain
      [ロールの作成]ボタンで作成画面を開きます。
  2. [AWSサービス] > [Lambda]を選択後に[次のステップ: アクセス権限]ボタンで次の画面を開きます。
  3. [Attach アクセス権限ポリシー]の[ポリシーのフィルタ]で作成したポリシーを検索して選択後に[次のステップ: タグ]ボタンで次の画面を開きます。
  4. [タグの追加 (オプション)]は任意なので設定せずに[次のステップ: 確認]ボタンで確認画面を開きます。
  5. [ロール名]を入力して[ロールの作成]ボタンでロールを作成して一覧画面に戻ります。

Lambda関数を作成します。

  1. AWSのコンソールにある[Lambda] > [関数の作成]ボタンで画面を開きます。
    • f:id:ponsuke_tarou:20200109094021p:plain
      [関数の作成]ボタンで画面を開きます。
  2. 必要な項目を入力後に[関数の作成]ボタンで関数を作成します。
    • オプション : [一から作成]
    • 関数名 : attatch_name_tag_for_ebs_volume(任意の関数名でOK)
    • ランタイム : Python3.8
    • 実行ロール : 既存のロールを使用する
    • 既存のロール : 作成したロールを選択します。
Lambda関数を実行するトリガーを作成します。
  1. [Designer]にある[トリガーを追加]ボタンでトリガーの設定画面を開きます。
    • f:id:ponsuke_tarou:20200115095939p:plain
      [Designer]にある[トリガーを追加]ボタン
  2. プルダウンから[CloudWatch Events]を選択します。
  3. 各入力欄を記載します
    • ルール : [新規ルールの作成]
    • ルール名(必須) : attatch_name_tag_for_ebs_volume(任意の関数名でOK)
    • ルールタイプ : [スケジュール式]
    • f:id:ponsuke_tarou:20200115101713p:plain
  4. [追加]ボタンでトリガーを作成します。
    • f:id:ponsuke_tarou:20200115101819p:plain
関数の内容を実装します。
import boto3

ec2 = boto3.client('ec2')

print('Loading function')

def get_name_tag_value(tags):
    """
    タグリストからNameタグの値を取得する.
    Parameters
    ----------
    tags
        辞書形式のタグリスト
    """
    name_tag_value = ''
    for tag in tags:
        if tag['Key'] == 'Name':
            name_tag_value = tag['Value']
            break
    return name_tag_value

def get_volumes_no_name_tag_and_attached():
    """
    [アタッチされていて][Nameタグが設定されていない]EBSボリュームを取得する.
    """
    volumes = ec2.describe_volumes(
        Filters=[
            {
                'Name': 'attachment.status',
                'Values': ['attached']
            }
        ]
    )['Volumes']

    volumes_no_name_tag = []
    for volume in volumes:
        if 'Tags' not in volume:
            # タグが設定されていない場合:Nameタグのないボリュームとする
            volumes_no_name_tag.append(volume)
        else:
            # タグが設定されている場合
            name_tag_value = get_name_tag_value(volume['Tags'])
            if name_tag_value == '':
                # Nameタグの値を取得できない場合:Nameタグのないボリュームとする
                volumes_no_name_tag.append(volume)
    return volumes_no_name_tag

def get_ec2_instance_name_tag_value(volume):
    """
    EBSボリュームにアタッチされているEC2インスタンスに設定されているNameタグの値を取得する.
    Parameters
    ----------
    volume
        対象となるEBSボリューム
    """
    # アタッチされているEC2インスタンスのIDを取得する
    instance_id = volume['Attachments'][0]['InstanceId']
    # EC2インスタンスのIDからインスタンスに設定されているタグ群を取得する
    tags = ec2.describe_instances(
        Filters=[
            {
                'Name': 'instance-id',
                'Values': [instance_id]
            }
        ]
    )['Reservations'][0]['Instances'][0]['Tags']
    # EC2インスタンスについているNameタグの値を取得する
    name_tag_value = get_name_tag_value(tags)
    return name_tag_value

def set_name_tag_for_volume(volume_id, name_tag_value):
    """
    EBSボリュームにNameタグを設定する.
    Parameters
    ----------
    volume_id
        NameタグをつけるEBSボリュームID
    name_tag_value
        EC2インスタンスについているNameタグの値
    """
    response = ec2.create_tags(
        Resources=[volume_id],
        Tags=[{'Key': 'Name', 'Value': name_tag_value}]
    )
    return 0

def lambda_handler(event, context):
    volumes = get_volumes_no_name_tag_and_attached()
    for volume in volumes:
        # EBSボリュームのIDを取得する.
        volume_id = volume['VolumeId']
        print(str(volume_id) + 'にはNameタグが付いていません')
        name_tag_value = get_ec2_instance_name_tag_value(volume)
        # EC2インスタンスにNameタグが設定されている場合に処理を実行する.
        if name_tag_value != '':
            set_name_tag_for_volume(volume_id, name_tag_value)
            print(str(volume_id) + 'のNameタグに「' + name_tag_value + '」とつけました')
    return 0

失敗したこと

describe_volumes()の実行権限がIAMロールになかった

[ERROR] ClientError: An error occurred (UnauthorizedOperation) when calling the DescribeVolumes operation: You are not authorized to perform this operation.
  • 事象 : describe_volumes()を実行したらエラーになった
  • 原因 : describe_volumes()を実行する権限がないから
    • エラーの時のIAMロールの権限設定 > 「ec2:DescribeInstances」しかない
...省略...
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:CreateTags",
        "logs:CreateLogStream",
        "logs:CreateLogGroup",
        "logs:PutLogEvents"
      ],
...省略...
...省略...
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVolumes", <<< 追加
        "ec2:DescribeInstances",
        "ec2:CreateTags",
        "logs:CreateLogStream",
        "logs:CreateLogGroup",
        "logs:PutLogEvents"
      ],
...省略...

describe_volumesの引数の型が不正だった

[ERROR] ParamValidationError: Parameter validation failed:
Invalid type for parameter Filters[0].Values, value: Name, type: <class 'str'>, valid types: <class 'list'>, <class 'tuple'>
  • 事象 : Filtersに指定したValuesに文字(str)を指定して実行したらエラーになった
    # Nameタグが設定されていないEBSボリュームを取得する
    response = ec2.describe_volumes(
        Filters=[
            {
                'Name': 'tag:Name',
                'Values': ''
            }
        ]
    )['Volumes']
  • 原因 : Valuesにlistかtupleのシーケンス型を使っていないから
    • [ドキュメントにもValues (list) と書いてあります。]
  • 対応 : Valuesをlistで指定する
            {
                'Name': 'tag:Name',
                'Values': [''] <<<<<<<<<< 修正
            }

Oracle Databaseにユーザー(スキーマ)を作った記録

  • 環境
    • 接続先 : (RDS)Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
    • 接続元 : (EC2)Ubuntu 18.04 LTS(64ビット x86)
      • SQL*Plus: Release 12.2.0.1.0 Production

RDSでOracleを作成したのでユーザーを作成します。

ponsuke-tarou.hatenablog.com

SQL*PlusでDBにログインします。

管理者ユーザーでログインします。

$ sqlplus admin/hoge@oracle-12.fuga.us-east-2.rds.amazonaws.com:1521/PONDB

SQL*Plus: Release 12.2.0.1.0 Production on 火 310 13:57:46 2020

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

最終正常ログイン時間: 火 310 2020 13:45:58 +00:00


Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
に接続されました。
SQL>

表示幅が狭いと見ずらいので広げます。

SQL> show linesize
linesize 80
SQL> set linesize 120

ユーザーに設定する情報を確認します。

ユーザーを作成する構文

CREATE USER my_name
IDENTIFIED BY "my_password"
[DEFAULT TABLESPACE my_tablespace]
[TEMPORARY TABLESPACE my_temp_tablespace]
[PROFILE my_profile]
CREATE USER、ユーザーの作成 - オラクル・Oracleをマスターするための基本と仕組み

作りたいユーザー名が既にないことを確認します。

SQL> select distinct username from all_users where username like '%ponsuke%';

レコードが選択されませんでした。
注意 : キャメルケースでユーザー名を指定すると大文字小文字が区別されないのでダサいことになります。

キャメルケースで書くと大文字小文字が区別されず、全部大文字か全部小文字(表示するツールによるらしい)になります。
「_」などで区切るスネークケースがよいです。
ダサいのを誤って作ってしまったので削除しました。

/* 所有していたオブジェクトもろともユーザーを削除する */
SQL> drop user PONSUKETAROU cascade;

使用する表領域を選びます。

「DEFAULT TABLESPACE(ユーザー・オブジェクト を作成するときの使用するデフォルト表領域)」「TEMPORARY TABLESPACE(Oracle が使用する作業用の表領域)」で指定する値を選びます。
現在存在する表領域を検索して選びます。

SQL> select tablespace_name,block_size,initial_extent from dba_tablespaces;

TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT
--------------- ---------- --------------
SYSTEM                8192          65536
SYSAUX                8192          65536
UNDO_T1               8192          65536
TEMP                  8192        1048576
USERS                 8192          65536
RDSADMIN              8192          65536

6行が選択されました。

ユーザーを作成します。

SQL> create user ponsuke identified by ponsuke default tablespace USERS temporary tablespace TEMP profile DEFAULT;

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

-- 確認します。
SQL> select username from all_users where regexp_like(username, 'ponsuke', 'i');

USERNAME
------------------------------------------------------------------------------------------------------------------------
PONSUKE

SQL>

権限を付与します。

権限を付与しないとデータベースに接続すらできません。

SQL> grant create session,create table,create view,create sequence,create trigger,create synonym,unlimited tablespace to ponsuke;

権限付与が成功しました。

作成したユーザーでログインしてみます。

$ sqlplus ponsuke/ponsuke@oracle-12.fuga.us-east-2.rds.amazonaws.com:1521/PONDB

SQL*Plus: Release 12.2.0.1.0 Production on310 14:32:13 2020

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
に接続されました。
SQL>

失敗したこと

ORA-01045: user username lacks CREATE SESSION privilege

qiita.com

ORA-00988: パスワードが指定されていないか、または無効です。

qiita.com

f:id:ponsuke_tarou:20161113100841j:plain

AWSのRDSの証明書を更新した記録

5年ごとに証明書を更新する必要があります。

、RDS DB インスタンスと Aurora DB クラスターの SSL/TLS 証明書は有効期限が切れ、5 年ごとに置き換えられます。現在の証明書は、2020 年 3 月 5 日に期限切れになります。 クライアントとデータベースサーバーの両方で SSL/TLS 証明書を更新しない場合、証明書を検証して SSL/TLS により RDS DB インスタンスまたは Aurora クラスターに接続するデータベースクライアントとアプリケーションは、2020 年 3 月 5 日から接続できなくなります。
Amazon RDS のお客様: 2020 年 2 月 5 日までに SSL/TLS 証明書を更新してください | Amazon Web Services ブログ

実際にやった人の手順を参考に実施します。

ajike.github.io

今の証明書を確認します。

  1. コンソール > [RDS] > [データベース] > 対象のRDSのリンクから詳細画面を表示 > [接続とセキュリティ] > [認証機関]
    • 認証機関 : rds-ca-2015
    • 証明機関の日付 : Mar 6th, 2020

認証機関をrds-ca-2019へ更新します。

  1. 対象のRDSが停止している場合は起動します。
    • 停止していると証明書の更新ができません。
  2. 対象のRDSを選択 > [変更]ボタンで[DB インスタンスの変更]画面を表示します。
    • f:id:ponsuke_tarou:20200130095519p:plain
  3. [ネットワーク & セキュリティ]の[認証機関]を「rds-ca-2015」から「rds-ca-2019」へ変更 > [次へ]ボタンで次の画面を表示します。
  4. [変更のスケジュール]で「すぐに適用」を選択 > [DB インスタンスの変更]で変更します。
    • f:id:ponsuke_tarou:20200130100144p:plain

確認します。

  1. コンソール > [RDS] > [データベース] > 対象のRDSのリンクから詳細画面を表示 > [接続とセキュリティ] > [認証機関]
    • 認証機関 : rds-ca-2019
    • 証明機関の日付 : Aug 23rd, 2024
  2. DBクライアントツールから接続できることを確認します。
  3. 開発アプリケーションから接続できることを確認します。
  4. SQL*PLUSでも接続を確認します。
$ sqlplus {ユーザ名}/{パスワード}@hoge.fuge.ap-northeast-1.rds.amazonaws.com:1521/{サービス名}

SQL*Plus: Release 12.2.0.1.0 Production on 木 130 10:25:04 2020

Copyright (c) 1982, 2017, Oracle.  All rights reserved.

最終正常ログイン時間: 火 128 2020 10:19:05 +09:00


Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
に接続されました。
SQL>

医療情報倫理

医療業界に関わるエンジニアへの一歩目

医療業界に関わるお仕事をするエンジニアとして「医療情報技師」という資格の「医療情報システム」という分野を勉強してみます。
まずは、情報を取り扱うものとしての基本となる医療情報倫理です。

個人情報とプライバシー

医療の世界では、氏名や住所だけではなく生体情報という他人が容易には知り得ないような情報を取り扱います。
そんな医療の世界で働く人に向けて、厚生労働省からは医療・介護関係事業者における個人情報の適切な取扱いのためのガイダンスが出ています。
医療の世界に関わる人と言ってもお医者さんから介護士・研究者といろんな立場があるので、ガイダンスには以下のようなことが記載されています。

  • 医療・介護関係事業者が行う措置の透明性の確保と対外的明確化
  • 責任体制の明確化と患者・利用者窓口の設置等
  • 遺族への診療情報の提供の取扱い
  • 個人情報が研究に活用される場合の取扱い
  • 遺伝情報を診療に活用する場合の取扱い

https://d2908q01vomqb2.cloudfront.net/b3f0c7f6bb763af1be91d9e74eabfeb199dc1f1f/2018/08/22/aws-medical-info-apn-parnter-picture-1.jpg
“医療情報システム向け「Amazon Web Services」利用リファレンス”の公開:APN パートナー各社 | Amazon Web Services ブログ

「個人情報」と「プライバシー」のびみょーーーな違い

「個人情報保護」と「プライバシー保護」は同じ意味に思えます。
しかし、医療情報技師の教科書では「個人情報」と「プライバシー」の違いを説明しています。

「プライバシーに関わる情報」とは、
個人の私生活上の事実に関する情報であり、「本人がその情報を開示しないで欲しいであろうと考えられる情報」である。
これに対し
「個人情報」は、
「特定の個人を識別できる情報」であり、私生活に関する情報か否か、開示しないで欲しいと考えられる情報か否かは問わない。
医療情報第5版医療情報システム編

医療情報システムの利用者の責任

医療に関わるシステムは、限られた人がエルタンできるようなものが多いように思います。
電子カルテや薬剤情報・検査機器を扱うシステムから研究や治験の情報を蓄積するシステムまで、誰でも彼でも閲覧できるものはではありません。
それは、先に紹介した「個人情報」「プライバシー」を取り扱うからです。

不適切な閲覧によるプライバシーの侵害をしないようにします。

システムを閲覧できる権限があるひとには「個人情報」「プライバシー」を守る義務が生じます。
そのために、利用者一人ひとりの意識が重要です。

故意及び重過失をもって、これらの要件に反する行為を行えば刑法上の秘密漏示罪で犯罪として処罰される場合があるが、診療情報等については過失による漏えいや目的外利用
も同様に大きな問題となり得る。
医療情報システムの安全管理に関するガイドライン

プライバシー権利を保証するための情報セキュリティ上の義務があります。

  • 自身の認証番号やパスワードを管理し、これを他人に利用させない。
  • 電子保存システムの情報の参照や入力に際して、認証番号やパスワードなどによってシステムに自身を認識させる。
  • 電子保存システムへの入力に際して、確定操作(入力情報が正しいことを確認する操作)を行って、入力情報に対する責任を明示する。
  • 代行入力の場合は、入力権限を持つ者が最終的に確定操作を行い、入力情報に対する責任を明示する。
  • 作業終了あるいは離席する際は、必ずログアウト操作を行う。

医療情報第5版医療情報システム編

ちょっとしたセキュリティ意識の弱さから漏洩事件が発生しています。

www.johosecuritynavi.com

医療情報システムの担当者の責務

医療システムの責任者・担当者に対する指針として厚生労働省から医療情報システムの安全管理に関するガイドラインが出ています。
医療・介護関係事業者における個人情報の適切な取扱いのためのガイダンスでは、「医療情報システムの導入及びそれに伴う情報の外部保存を行う場合の取扱い」についてはこのガイダンスに従うことが記載されています。

電子的な医療情報を扱う際の責任のあり方

医療情報システムの安全管理に関するガイドラインでは、医療情報を取り扱うには管理者が善管注意義務を果たすことが求められています。

善良な管理者の注意義務を善管注意義務といいます。

善管注意義務は、不動産などで使用される用語で民法第400条に由来するそうです。

smtrc.jp

善管注意義務を果たすためには、2つの責任を負います。

  1. 通常運用における責任 : 通常の運用時において医療情報保護の体制を構築し管理する責任
  2. 事後責任 : 医療情報について何らかの問題が生じた場合に対処をすべき責任

医療の情報化と患者の医療参画

ここ数十年で医療へのコンピュータ導入の目的は、「業務の合理化」>「診療支援」>「患者中心の視点」へと視点の主役が変わってきているそうです。
電子カルテでは、

  • 医療者 : 患者へ説明しやすく
  • 患者 : カルテへの敷居が低くなる

と、「患者中心の医療」への取り組みにコンピュータ導入が寄与することとなる。

https://medical.secom.co.jp/it/karte/column/57ac80d2175251d88b3a7908741b08a9089db126.png
電子カルテを導入するメリット・デメリット | 導入するメリット・デメリット | 電子カルテサービス | SECOM セコム医療システム株式会社

https://bijicom.co.jp/wp-content/uploads/969c125748a08215305adcaa3d5a4030.gif
電子カルテ導入のメリット・デメリット | 中央ビジコム(電子カルテ・レセコン・電子薬歴)

システム化は患者の医療参画を促していきます。

医療システムが導入されることで

  • EBM(根拠に基づく医療)*1
  • 医療者の意思決定
  • 継続的ケア
  • EBH(根拠に基づく健康)*2

を支援して、患者の医療参画を促して患者が理解・判断できようにしていきます。

医学・保健医療の研究倫理とポピュレーション・ヘルス

医療システムが導入されていくことで治療へつながる研究や症例の蓄積などへ医療情報の活用が活発になっていきます。


医療情報倫理

医療情報担当職の倫理網領

医療情報化の担い手として

AWSのRDSのバックアップをインスタンスに復元する記録

Amazon RDSはインスタンスの自動バックアップをしてくれます。

Amazon RDS は、DB インスタンスの自動バックアップを作成および保存します。Amazon RDS は、DB インスタンスのストレージボリュームのスナップショットを作成し、個々のデータベースだけではなく、その DB インスタンス全体をバックアップします。
バックアップの使用

自動化バックアップによってDB スナップショットができます。

サイドメニューに[スナップショット]と[Automated backups]の2つがあるので何が違うんだろう?と思いました。
f:id:ponsuke_tarou:20191226170146p:plain
[よくある質問]を読むと「自動化バックアップ機能によってスナップショットができる。」「スナップショットは自動化バックアップ機能を使わなくても作れる。」そうです。
バックアップを復元したければスナップショットを復元すればいいんですね。

Q: 自動化バックアップと DB スナップショットの違いは何ですか?

Amazon RDS は、DB インスタンスのバックアップと復元を行うための 2 つの方法を提供しています。自動バックアップとデータベーススナップショット (DB スナップショット) です。
よくある質問 - Amazon RDS | AWS

スナップショットを復元します。

  1. RDS コンソールを開きます。
  2. サイドメニューの[スナップショット]を選択して一覧を表示します。
  3. 復元するスナップショットを選択 > [スナップショットのアクション] > [スナップショットの復元]
    • 1つずつ選択します。複数選択すると[スナップショットの復元]が選択できません。
    • f:id:ponsuke_tarou:20191226171111p:plain
  4. [DB インスタンスの復元] ページで、[DB インスタンス識別子]に、復元後のインスタンスの名前を入力します。
    • 半角英数字、ハイフンが使えます。
  5. 各設定値を選択します。
  6. [DBインスタンスの復元]ボタンで復元します。

失敗したこと

The option group hoge is associated with a different VPC than the request.

  • 事象 : [DBインスタンスの復元]ボタンを押下したところ以下のメッセージが表示されて復元できない。
The option group hoge is associated with a different VPC than the request. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 74xxxxx)

AWSのRDSを自動停止するLambdaを作る記録

RDSは停止しても7日経つと自動で起動してしまいます。

DB インスタンスは最大 7 日間停止できます。DB インスタンスを手動で起動しないで 7 日間が経過すると、DB インスタンスは自動的に起動します。
一時的に Amazon RDS DB インスタンスを停止する - Amazon Relational Database Service

なので、RDSを監視して自動で停止してほしいです。

案件が動いていない時は停止していてほしいです。ちょいちょい確認して停止するのは面倒くさいです。
そこで、世の中の知識を利用して自動停止できるようにします。

このサイトのやり方でRDSを自動停止するLambdaを作る

qiita.com

実行権限を作成する

Lambdaの実行権限を作成する - ponsuke_tarou’s blog
上記を参考にIAMのポリシーを作成し、ロールを作成します。
ポリシーに設定する内容は以下になります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "rds:StopDBInstance",
                "rds:ListTagsForResource"
            ],
            "Resource": "arn:aws:rds:*:*:db:*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "rds:DescribeDBInstances",
                "logs:CreateLogGroup",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

自動停止の対象と停止時間を設定できるようにするためにRDSにAutoStopタグを追加します。

Amazon RDS リソースのタグ付け

  1. AWSマネジメントコンソールにある[RDS] > サイドメニューの[データベース] > 対象となるRDSを選択して詳細画面を開きます。
  2. [タグ]タブ > [追加]ボタンで[タグの追加] ウィンドウを表示します。
  3. [タグキー]に「AutoStop」と[値]に「自動停止したい時間」を入力します。
    • f:id:ponsuke_tarou:20191126100110p:plain
      タグの追加ウィンドウ
  4. [追加]を選択します。
    • f:id:ponsuke_tarou:20191126100356p:plain
      追加後

Lambda関数を作成します。

  1. AWSのコンソールにある[Lambda] > [関数の作成]ボタンで画面を開きます。
  2. 必要な項目を入力後に[関数の作成]ボタンで関数を作成します。
    • オプション : [一から作成]
    • 関数名 : 任意の関数名
    • ランタイム : Python3.8
    • 実行ロール : 既存のロールを使用する
      • 作成したロールを選択します。

関数を実装します。

[関数コード] > [lambda_function.py]に以下のコードを張り付けて[保存]ボタンで保存します。

# -*- coding: utf-8 -*-

from __future__ import print_function

import sys
import json

import boto3
import datetime

REGION_NAME = "ap-northeast-1"

print("Loading function")
rds = boto3.client('rds')

def get_auto_stop_tag(instance_arn):
    instance_tags = rds.list_tags_for_resource(ResourceName=instance_arn)
    tag_list = instance_tags['TagList']
    tag = next(iter(filter(lambda tag: tag['Key'] == 'AutoStop' and (tag['Value'] is not None and tag['Value'] != ''), tag_list)), None)
    return tag

def get_auto_stop_time(auto_stop_tag):
    today = datetime.datetime.now()
    param_day = today.day
    auto_stop_val = auto_stop_tag["Value"].split(":")
    # 設定時刻が8:59以前である場合、GMT変換時に前日にならないよう日付を1日進めておく
    if int(auto_stop_val[0]) < 9:
        param_day = param_day + 1
    # タグに指定されたGMTでの時間
    tag_time = datetime.datetime(today.year, today.month, param_day, int(auto_stop_val[0]), int(auto_stop_val[1]))
    gmt_time = tag_time + datetime.timedelta(hours=-9)
    return gmt_time

def lambda_handler(event, context):
    print("Received event: " + json.dumps(event, indent=2))
    # インスタンスを取得
    instances = rds.describe_db_instances()
    if len(instances['DBInstances']) > 0:
        # インスタンスを順番に処理していく
        for instance in instances['DBInstances']:
            if instance['DBInstanceStatus'] == 'available':
                instance_arn = instance['DBInstanceArn']
                print(instance_arn + 'は、稼働中です。')

                tag = get_auto_stop_tag(instance_arn)
                print('取得したAutoStopタグ:' + str(tag))

                if tag:
                    # AutoStopタグが指定されているインスタンスを処理する
                    reference_time = get_auto_stop_time(tag)
                    print('AutoStopタグに指定された時間(GMT)は、' + reference_time.strftime('%Y-%m-%dT%H:%M:%SZ') + 'です。')

                    event_time = datetime.datetime.strptime(event["time"], '%Y-%m-%dT%H:%M:%SZ')
                    reference_time_from = reference_time + datetime.timedelta(minutes=-5)
                    reference_time_to = reference_time + datetime.timedelta(minutes=5)
                    print('処理時間(' + event_time.strftime('%Y-%m-%dT%H:%M:%SZ') + ')が、' + \
                          reference_time_from.strftime('%Y-%m-%dT%H:%M:%SZ') + 'から' + reference_time_to.strftime('%Y-%m-%dT%H:%M:%SZ') + 'だったら停止します。')

                    # AutoStopタグに指定された時刻の前後5分以内であればインスタンス停止する
                    if reference_time_from <= event_time and event_time <= reference_time_to:
                        rds.stop_db_instance(DBInstanceIdentifier=instance['DBInstanceIdentifier'])
                        print(instance_arn + 'を停止しました。')
関数を動かしてみます。
  1. [テスト]ボタンで[テストイベントの設定]ダイアログを表示します。
  2. [新しいテストイベントの作成]を選択します。
  3. [イベントテンプレート]で「Hello World」を選択します。
    • f:id:ponsuke_tarou:20191129101513p:plain
      テストイベントの設定
  4. 引数の欄に「{"time": "2019-12-04T10:02:00Z"}」を入力します(時間はAutoStopタグに指定した時間の近い時間)。
  5. [イベント名]に任意の名前を設定して[作成]ボタンで保存します。
    • f:id:ponsuke_tarou:20191129101840p:plain
      保存後の状態
  6. [テスト]ボタンで関数を実行します。
  7. 実行結果とログを確認して、「成功」になるまでソースや設定の見直しをします。
    • f:id:ponsuke_tarou:20191129102116p:plain
      実行結果

Lambda関数を実行するトリガーを作成します。

CloudWatch EventsをトリガーとしてLambda関数を実行できるようにするためにイベントを登録します。

CloudWatch Eventsにイベントを登録します。

  1. AWSのコンソールにある[Lambda] > 作成したLambda関数を選択して詳細画面を開きます。
  2. [Designer]にある[トリガーを追加]ボタンでトリガーの設定画面を開きます。
    • f:id:ponsuke_tarou:20191127101110p:plain
      トリガーを追加ボタン
  3. プルダウンからCloudWatch Eventsを選択します。
  4. [ルール]で「新規ルールの作成」を選択し、[ルール名(必須)][ルールの説明(任意)]を入力します。
    • f:id:ponsuke_tarou:20191127101515p:plain
      トリガーの設定画面
  5. [ルールタイプ]で「スケジュール式」を選択し、[スケジュール式]に以下のサイトを参考にスケジュールを設定します。

失敗したこと

CloudWatch Eventsの[スケジュール式]の書き方を間違えた

Cron式で時間に「10-24」と指定したところエラーになりました。24時はだめなんですね。

Parameter ScheduleExpression is not valid. (Service: AmazonCloudWatchEvents; Status Code: 400; Error Code: ValidationException; Request ID: c.....)

Lambda関数でCloudWatch Logsに書き込むための権限がなかった。

Lambda関数を実行するCloudWatch Eventsを登録してからLambda関数の[モニタリング]タブを見てみるとメッセージが表示されていました。
メッセージにある[AWSLambdaBasicExecutionRole]の権限を追加します。

アクセス権限が見つかりません
お使いの関数には、Amazon CloudWatch Logs に書き込むためのアクセス許可がありません。ログを閲覧するには、その実行ロールに AWSLambdaBasicExecutionRole の管理ポリシーを追加します。IAM コンソールを開きます。
  1. AWSマネジメントコンソールにある[IAM] > サイドメニューの[ポリシー] > [AWSLambdaBasicExecutionRole]を検索して詳細画面を表示します。
  2. [アクセス権] > [JSON]で権限の詳細を表示します。
  3. [Statement]に記載されている内容以下をコピーします。
    • f:id:ponsuke_tarou:20191128100745p:plain
  4. サイドメニューの[ポリシー] > Lambda関数に設定したポリシーを検索して詳細画面を表示します。
  5. [アクセス権] > [JSON] > [ポリシーの編集]ボタンで編集画面を表示します。
  6. コピーした内容を[Action]に追記します。
  7. [ポリシーの確認]ボタン > [変更の保存]ボタンで保存します。

describe_db_instancesを実行する権限がなかった。

Lambda関数を実行したらエラーになりました。ポリシーの[Action]に「rds:DescribeDBInstances」を追加しました。

{
  "errorMessage": "An error occurred (AccessDenied) when calling the DescribeDBInstances operation: User: arn:aws:sts::8xxxxxxxxxxx:assumed-role/{ロール名}/{Lambda関数名} is not authorized to perform: rds:DescribeDBInstances",
  "errorType": "ClientError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 27, in lambda_handler\n    instances = rds.describe_db_instances(Filters=[{\"Name\": \"DBInstanceStatus\", \"Values\": [\"available\"]}])\n",
    "  File \"/var/runtime/botocore/client.py\", line 357, in _api_call\n    return self._make_api_call(operation_name, kwargs)\n",
    "  File \"/var/runtime/botocore/client.py\", line 661, in _make_api_call\n    raise error_class(parsed_response, operation_name)\n"
  ]
}
「rds:DescribeDBInstances」はリソースを限定できなかった。

以下のように単純に「rds:DescribeDBInstances」を追加したところ同じエラーになりました。
一部のRDSの情報の閲覧だけできるポリシーは作れなかった話 - Qiitaを読んでリソースを限定できないことを知りました。

...省略...
            "Action": [
                "rds:StopDBInstance",
                "rds:DescribeDBInstances"
            ],
            "Resource": "arn:aws:rds:*:*:db:*"
...省略...

f:id:ponsuke_tarou:20191129104647p:plain
ポリシーの[ビジュアルエディタ]タブ

DMZは内部ネットワークを守るための領域です。

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

DMZ上に公開しているWebサーバで入力データを受け付け,内部ネットワークのDBサーバにそのデータを蓄積するシステムがある。インターネットからDMZを経由してなされるDBサーバへの不正侵入対策の一つとして,DMZと内部ネットワークとの間にファイアウォールを設置するとき,最も有効な設定はどれか。
https://www.sc-siken.com/kakomon/22_aki/img/06.gif

  1. DBサーバの受信ポート番号を固定し,WebサーバからDBサーバの受信ポート番号への通信だけをファイアウォールで通す。
  2. DMZからDBサーバへの通信だけをファイアウォールで通す。
  3. Webサーバの発信ポート番号は任意のポート番号を使用し,ファイアウォールでは,いったん終了した通信と同じ発信ポート番号を使った通信を拒否する。
  4. Webサーバの発信ポート番号を固定し,その発信ポート番号からの通信だけをファイアウォールで通す。

情報セキュリティスペシャリスト平成22年秋期 午前Ⅱ 問6

f:id:ponsuke_tarou:20191019121844p:plain
昔見た光景

DMZは、外部ネットワークと内部ネットワークの間にあるネットワーク上の領域です。

  • 英語: DeMilitarized(離れる + 軍用化する) Zone
  • 日本語: 非武装地帯

https://software.fujitsu.com/jp/manual/manualfiles/M100008/J2X16780/02Z200/conn0101img/e-conn223.gif
2.2 DMZ(Demilitarized Zone)

Webサーバなど外部に公開するサーバなどが設置されます。

https://milestone-of-se.nesuke.com/wp-content/uploads/2018/03/dmz-2.png
図解】初心者にも分かるDMZの構成・設計 〜DMZとは?ファイアウォールを使ったNWセキュリティの基礎〜

ステートフル・インスペクションは、出入りするパケットの通信状態を把握して外部から送信されたパケットのアクセスを動的に制御するファイアウォールです。

ponsuke-tarou.hatenablog.com

DMZは、ファイアウォールやルータに隔離された領域です。

https://www.fe-siken.com/kakomon/29_haru/img/43.gif
平成29年春期問43 DMZを使用したサーバの設置方法|基本情報技術者試験.com

パケットフィルタリング型ファイアウォールを設置すると、パケットのヘッダ情報でアクセス制御を行うことができます。

ponsuke-tarou.hatenablog.com

内部ネットワークのDBサーバの受信ポート番号を固定し、WebサーバからDBサーバの受信ポート番号への通信だけをファイアウォールで通します。

「勉強のきっかけになった問題」にある設問の構成では、Webサーバから内部ネットワークへの通信はDBサーバに限れば良いので、DBサーバのポートを固定してファイアウォールへ設定します。これにより、不要な通信を通さずに済みます。
(参考)情報セキュリティスペシャリスト平成22年秋期 午前Ⅱ 問6

アプリケーションゲートウェイファイアウォールを設置すると、パケットのデータまでをチェックしてアクセス制御を行うことができます。

ponsuke-tarou.hatenablog.com

DMZを設置することで、内部ネットワークへの攻撃をファイアウォールで守ることができます。

https://tech.nikkeibp.co.jp/it/article/COLUMN/20080507/300882/zu04.jpg
https://tech.nikkeibp.co.jp/it/article/COLUMN/20080507/300882/zu05.jpg
DMZを設置しないといけない | 日経クロステック(xTECH)

DMZを設置していてもファイアウォールDMZに設置した機器の正しい対策が行われていなければ、内部ネットワークは危険にさらされます。

内部ネットワークのPCからインターネット上のWebサイトを参照するときにDMZ上に用意したVDI(Virtual Desktop Infrastructure)サーバ上のWebブラウザを利用すると,未知のマルウェアがPCにダウンロードされて,PCが感染することを防ぐというセキュリティ上の効果が期待できる。この効果を生み出すVDIサーバの動作の特徴はどれか。

答. Webサイトからの受信データを処理してVDIサーバで生成したデスクトップ画面の画像データだけをPCに送信する。
https://www.ap-siken.com/kakomon/30_haru/img/41.gif
平成30年春期問41 VDIシステムの導入|応用情報技術者試験.com

公開サーバと同じマシンに公開する必要のないサーバを一緒に入れると公開する必要のないサーバは危険にさらされます。

企業のDMZ上で1台のDNSサーバを,インターネット公開用と,社内のPC及びサーバからの名前解決の問合せに対応する社内用とで共用している。このDNSサーバが,DNSキャッシュポイズニングの被害を受けた結果,直接引き起こされ得る現象はどれか。
答. 社内の利用者が,インターネット上の特定のWebサーバにアクセスしようとすると,本来とは異なるWebサーバに誘導される。
平成28年春期問36 DNSキャッシュポイズニング|応用情報技術者試験.com

ファイアウォールでは、「不正なアクセスによる攻撃」「Webアプリケーションの脆弱性を利用した攻撃」は防げません。

https://www.intec.co.jp/service/detail/uploadfile_bs/images/WAF.png
WAF構築サービス|商品・サービス|インテック

IDSとIPSを利用することで、ネットワークを監視して危険の連絡・遮断ができます。

ponsuke-tarou.hatenablog.com

WAFは、Webアプリケーションへの攻撃を監視し阻止します。

ponsuke-tarou.hatenablog.com

個人情報など重要な情報を取り扱うサイトでは、Webサーバまでの通信をSSL/TLSで暗号化します。

ponsuke-tarou.hatenablog.com

利用者個人のディジタル証明書を用いたTLS通信を行うと、PCとWebサーバ間の通信データを暗号化するとともに,利用者を認証することができるようになります。

https://www.ap-siken.com/kakomon/30_aki/img/40.gif
平成30年秋期問40 TLS通信で期待できるセキュリティ効果|応用情報技術者試験.com

f:id:ponsuke_tarou:20191019121914p:plain
昔の記憶

次回の勉強内容

ponsuke-tarou.hatenablog.com

WAFは、Webアプリケーションへの攻撃を監視し阻止します。

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

図のような構成と通信サービスのシステムにおいて,Webアプリケーションの脆弱性対策としてネットワークのパケットをキャプチャしてWAFによる検査を行うとき,WAFの設置場所として最も適切な箇所はどこか。ここで,WAFには通信を暗号化したり復号したりする機能はないものとする。
https://www.sc-siken.com/kakomon/25_haru/img/04.gif
情報セキュリティスペシャリスト平成25年春期 午前Ⅱ 問4

パケットフィルタリング型ファイアウォールは、ネットワーク層の情報でアクセス制御を行うファイアウォールです。

ponsuke-tarou.hatenablog.com

アプリケーションゲートウェイファイアウォールは、アプリケーション層のチェックしてアクセス制御を行うファイアウォールです。

ponsuke-tarou.hatenablog.com

IDSとIPSは、ネットワークを監視して危険をお知らせしてくれます。

ponsuke-tarou.hatenablog.com

WAFは、Webアプリケーションへの攻撃を監視し阻止します。

  • 正式名称 : Web Application Firewall
  • 読み方 : わふ

通過するパケットのIPアドレスやポート番号だけでなくペイロード部(データ部分)をチェックすることで、Webアプリケーションに対する攻撃を検知し、遮断することが可能なファイアウォールです。
平成29年秋期問45 WAFの説明はどれか|応用情報技術者試験.com

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2016/04/waf1.png
https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2016/04/waf2.png
新入社員のためのWAF(Web Application Firewall)入門 | DevelopersIO

Webサーバ及びアプリケーションに起因する脆(ぜい)弱性への攻撃を遮断します。

Webアプリケーションの防御に特化したファイアウォールで、パケットのヘッダ部に含まれるIPアドレスやポート番号だけでなくペイロード部(データ部分)をチェックし、攻撃の兆候の有無を検証します。
予想問題vol.5問29 WAFを利用する目的はどれか|情報セキュリティマネジメント試験.com

https://jpn.nec.com/infocage/siteshell/images/waf_fig_5.jpg
WAFとは: Webアプリケーションファイアウォール(WAF) InfoCage SiteShell | NEC

特徴的なパターンが含まれるかなどWebアプリケーションへの通信内容を検査して、不正な操作を遮断します。

検出パターンには、「ウェブアプリケーション脆弱性を悪用する攻撃に含まれる可能性の高い文字列」や「ウェブアプリケーション仕様で定義されているパラメータの型、値」といったものを定義します。
f:id:ponsuke_tarou:20191017224606p:plain
安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構

Webサイトに対するアクセス内容を監視し、攻撃とみなされるパターンを検知したときに当該アクセスを遮断します。

チェックされる内容には「URLパラメタ」や「クッキーの内容」などのHTTPヘッダ情報や、「POSTデータの内容」などのメッセージボディ部などがあります。
基本情報技術者平成28年秋期 午前問42

https://www.intec.co.jp/service/detail/uploadfile_bs/images/WAF.png
WAF(Webアプリケーションファイアウォール)|商品・サービス|インテック

クライアントとWebサーバの間においてクライアントからWebサーバに送信されたデータを検査して、SQLインジェクションなどの攻撃を遮断するためのものです。

パケットのヘッダ部に含まれるIPアドレスやポート番号だけでなくペイロード部(データ部分)をチェックし、攻撃の兆候の有無を検証します。これによりWebアプリケーションに対する攻撃を検知し、遮断することが可能です。
平成28年春期問43 Web Application Firewall|基本情報技術者試験.com

https://www.infraexpert.com/studygif/security32.gif
WAF( Web Application Firewall )とは

WAFを設置する場合、設置場所には「ネットワーク」と「ウェブサーバ」の 2 つがあります。

ネットワークに設置するWAFは、利用者とウェブサイト間の HTTP・HTTPS通信を通信経路上に介在することで検査します。

主な特徴は以下の通りです。

  • ウェブサーバの動作環境に依存しない
  • ウェブサイトを構成するウェブサーバの台数に依存しない
  • 既存のウェブサイトに導入する場合、ネットワーク構成を見直す必要がある
  • WAFHTTPS 通信に対応していれば、HTTPS 通信も検査できる
  • WAFを導入することで、ウェブサイトの可用性が低下する可能性がある

f:id:ponsuke_tarou:20191017225947p:plain
Web Application Firewall 読本:IPA 独立行政法人 情報処理推進機構

SSLアクセラレータは、Webサーバなどの負荷を軽減するために暗号化や復号の処理を高速に行う専用ハードウェアです。

https://t-tel.net/wp-content/uploads/sslacsela.png
SSLアクセラレーターとは?特徴やサーバ証明書との関連性まとめ

https://www.hitachi-solutions.co.jp/array/sp/apv/img/funcrion2_img01.gif
SSL性能・機能について|SSLアクセラレータ|日立ソリューションズのArrayAPVシリーズ

WAFHTTPS 通信に対応していなくてもSSLアクセラレータとWebサーバの間にWAFを設置すればパケットのデータを検査することができます。

https://nekotosec.com/wp-content/uploads/2018/07/24f67a41a10c2afa8e49ad2363919804.png
https://nekotosec.com/wp-content/uploads/2018/07/4e8b51d8b5ed5bb4a8072c8814e7522e-1024x305.png
SQLインジェクションをWAFで対策する際の失敗例② | 猫とセキュリティ

ウェブサーバに設置するWAFは、利用者とウェブサイト間の HTTP 通信をウェブサーバが送受信する際に検査します。

主な特徴は以下の通りです。

  • ウェブサーバの動作環境に依存する
  • ウェブサイトを構成するウェブサーバすべてに導入する必要がある
  • 既存のウェブサイトに導入する場合でも、ネットワーク構成を見直す必要はない
  • ウェブサーバで HTTPS 通信が処理される(復号と暗号化が行われる)ため、WAFHTTPS 通信に対応していなくとも、HTTPS 通信を検査できる
  • WAFを導入することで、ウェブサーバの性能が低下する可能性がある

f:id:ponsuke_tarou:20191017230426p:plain
Web Application Firewall 読本:IPA 独立行政法人 情報処理推進機構

f:id:ponsuke_tarou:20191015230600j:plain
秋萌え

次回の勉強内容

勉強中・・・

ネットワークを監視して危険をお知らせしてくれるIDSとIPS

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

IDS(Intrusion Detection System)の特徴のうち,適切なものはどれか。

  1. ネットワーク型IDSでは,SSLを利用したアプリケーションを介して行われる攻撃を検知できる。
  2. ネットワーク型IDSでは,通信内容の解析によって,ファイルの改ざんを検知できる。
  3. ホスト型IDSでは,シグネチャとのパターンマッチングを失敗させるためのパケットが挿入された攻撃でも検知できる。
  4. ホスト型IDSでは,到着する不正パケットの解析によって,ネットワークセグメント上の不正パケットを検知できる。

平成18年春期問73 IDSの特徴のうち適切なもの|応用情報技術者試験.com

IDSは、サーバやネットワークを監視しセキュリティポリシを侵害するような挙動を検知した場合に管理者へ通知します。

  • 英語: Intrusion(侵入) Detection(検出) System
  • 日本語: 侵入検知システム

https://www.kagoya.jp/howto/wp-content/uploads/kagoya201903-4.jpg
IDS・IPSとは?不正侵入検知・防御サービス解説 | カゴヤのサーバー研究室

設置場所は「ネットワーク型」「ホスト型」の2種類あります。

ネットワーク型は、監視対象のネットワーク上に設置してネットワークの通信を監視します。
  • 略称: NIDS
  • 英語: Network-Based IDS

NIDSに通信内容を復号する機能がなければ、SSLを利用したアプリケーションを介して行われる攻撃を検知できません。

http://gc.sfc.keio.ac.jp/class/2009_25437/slides/11/img/29.png
ネットワーク型 IDS

ホスト型は、監視対象サーバーに設置して通信の結果生成された受信データやログを監視します。
  • 略称: HIDS
  • 英語: Host-Based IDS

ホスト型IDSでは,シグネチャとのパターンマッチングを失敗させるためのパケットが挿入された攻撃でも検知できる。
平成18年春期問73 IDSの特徴のうち適切なもの|応用情報技術者試験.com

https://tech.nikkeibp.co.jp/it/article/COLUMN/20060830/246798/zu2.gif
IDSとIPS | 日経 xTECH(クロステック)

検知方法は「シグネチャ型」「アノマリ型」の2種類があります。

https://tech.nikkeibp.co.jp/it/article/lecture/20070903/280955/zu1s.jpg
Part2 IDSのしくみを知る | 日経 xTECH(クロステック)

シグネチャ型は、異常なアクセスパターンを登録して、一致すれば不正と判断します。

https://ascii.jp/elem/000/000/449/449322/zu_08_588x.jpg
ASCII.jp:巧妙化する不正プログラムを防ぐには? (5/6)|初心者歓迎!ネットワークセキュリティ入門

アノマリ型は、正常なアクセスパターンを登録して、登録パターンと大きく異なるれば不正と判断します。
  • 英語: Anomaly(変則) Detection(検出)
  • 日本語: 異常検出

https://static.it-trend.jp/img/ids-ips/article/explain/ids-ips_explain_img02.jpg
IDS・IPS(不正侵入検知・防御)とは?違いや仕組みを図解!|ITトレンド

IPSは、サーバやネットワークへの侵入を防ぐために不正な通信を検知して遮断する装置です。

  • 英語: Intrusion Prevention System
  • 日本語: 侵入防御システム

http://www.secuavail.com/SANEWS/vol05/img/img_san02.png
http://www.secuavail.com/SANEWS/vol05/img/img_san03.jpg
不正侵入検知防御システム(IPS)|SecuAvail NEWS Vol.5|セキュリティ対策のセキュアヴェイル

https://www.canon-its.co.jp/files/user/img/news/detail/20181017_idsips_01.png
不正侵入を検知・防御する「IDS/IPSサービス」を提供開始|キヤノンITソリューションズ

次回の勉強内容

ponsuke-tarou.hatenablog.com

アプリケーションゲートウェイ型ファイアウォールは、アプリケーション層でパケットのデータまでをチェックしてアクセス制御を行うファイアウォールです。

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

ファイアウォールの方式に関する記述のうち,適切なものはどれか。

  1. アプリケーションゲートウェイ方式では,アプリケーションのプロトコルごとにゲートウェイ機能の設定が必要である。
  2. サーキットゲートウェイ方式では,コマンドの通過可否を制御する。
  3. トランスポートゲートウェイ方式では,アプリケーションのプロトコルに依存するゲートウェイ機能を提供する。
  4. パケットフィルタリング方式では,電子メールの中に含まれている単語によるフィルタリングが可能である。

平成17年春期問74 ファイアウォールの方式|応用情報技術者試験.com

アプリケーションゲートウェイファイアウォールは、アプリケーション層でパケットのデータまでをチェックしてアクセス制御を行うファイアウォールです。

https://ascii.jp/img/2009/08/12/853066/l/d42294373e084d19.jpg
ASCII.jp:不正アクセスを防ぐファイアウォールの仕組み (5/6)

http://ash.jp/linux/unyo/a-gate.gif
Linuxサーバ運用マニュアル

ファイアウォール セキュリティ 通信
パケットフィルタリング型 バッファオーバーフロー攻撃*1コンピュータウィルスが含まれる電子メールなどは防げない 早い
アプリケーションゲートウェイ バッファオーバーフロー攻撃やコンピュータウィルスが含まれる電子メールなどは防げるが、なりすましは防げない データまでチェックするので遅い

アプリケーションゲートウェイファイアウォールは、プロキシでもあります。

  • 英語: proxy(代理、代理権、代理人)

https://www.infraexpert.com/studygif/security36.gif
プロキシサーバとは

プロキシは、社内ネットワークからインターネット接続を行うときに、インターネットへのアクセスを中継し、Webコンテンツをキャッシュすることによってアクセスを高速にする仕組みで、セキュリティ確保にも利用されます。

https://www.ap-siken.com/kakomon/31_haru/img/35.gif
平成31年春期問35 Webサーバに中継する仕組みはどれか|応用情報技術者試験.com

アプリケーションゲートウェイファイアウォールは、インターネットと内部のネットワークを切り離します。

https://tech.nikkeibp.co.jp/it/members/NOS/ITBASIC/20020405/1/zu5s.gif
SEなら押さえておきたいIPネットワークの基礎---最終回 ファイアウオール(4) | 日経クロステック(xTECH)

インターネットからのパケットをアプリケーションゲートウェイが代理で受け取ります。

f:id:ponsuke_tarou:20191015220302p:plain

アプリケーションに対応する中継プログラムにパケットを渡します。

中継プログラムは、代理応答プログラム・プロキシとも言います。

https://image.itmedia.co.jp/enterprise/articles/0411/19/zu02.jpg
実はこんなに奥の深い「ファイアウォール」 (2/4) - ITmedia エンタープライズ

そのため、アプリケーションのプロトコルごとにゲートウェイ機能の設定が必要です。

アプリケーションゲートウェイ方式では、アプリケーション層レベルでコネクションを中継するため、HTTP,FTPSMTPなどアプリケーションプログラムごとに別々の中継プログラムを用意する必要があります。
平成17年春期問74 ファイアウォールの方式|応用情報技術者試験.com

https://kmownet.com/security/400-defense/421-lan-security/421-lan-security-fig10.jpg
LANのセキュリティ|ファイアウォール|IDS|WAF|検疫ネットワーク

f:id:ponsuke_tarou:20191015230416j:plain
秋空

次回の勉強内容

ponsuke-tarou.hatenablog.com

パケットフィルタリング型ファイアウォールは、ネットワーク層でパケットのヘッダ情報でアクセス制御を行うファイアウォールです。

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

ファイアウォールにおけるダイナミックパケットフィルタリングの特徴はどれか。

  1. IPアドレスの変換が行われるので,ファイアウォール内部のネットワーク構成を外部から隠蔽できる。
  2. 暗号化されたパケットのデータ部を復号して,許可された通信かどうかを判断できる。
  3. パケットのデータ部をチェックして,アプリケーション層での不正なアクセスを防止できる。
  4. 戻りのパケットに関しては,過去に通過したリクエストパケットに対応したものだけを通過させることができる。

情報セキュリティスペシャリスト平成26年春期 午前Ⅱ 問6

パケットフィルタリング型ファイアウォールは、ネットワーク層でパケットのヘッダ情報でアクセス制御を行うファイアウォールです。

f:id:ponsuke_tarou:20210329181435p:plain

パケットのヘッダ情報内のIPアドレス及びポート番号を基準にパケット通過の可否を決定します。

フィルタリングルールを用いて、本来必要なサービスに影響を及ぼすことなく外部に公開していないサービスへのアクセスを防げます。

社内ネットワークとインターネットの接続点にパケットフィルタリング型ファイアウォールを設置して,社内ネットワーク上のPCからインターネット上のWebサーバ(ポート番号80) にアクセスできるようにするとき,フィルタリングで許可するルールの適切な組合せはどれか。
https://www.fe-siken.com/kakomon/23_toku/img/44u.gif
平成23年特別問44 パケットフィルタリング|基本情報技術者試験.com

パケットフィルタリング型ファイアウォールには、種類があります。

https://tech.nikkeibp.co.jp/it/article/lecture/20070508/270250/zu1s.jpg
Part2 フィルタリング---ファイアウォールの基本機能,フィルタリングの違いを理解する | 日経クロステック(xTECH)

スタティックパケットフィルタリングは、行きと戻りのヘッダ情報をフィルタリングテーブルに登録してアクセスを制御するファイアウォールです。

http://c-router.com/chap06/network-basic13901.jpg
静的フィルタリングと動的フィルタリングの違い Ciscoルータで学ぶネットワーク

社内ネットワークとインターネットの接続点に,ステートフルインスペクション機能をもたない,静的なパケットフィルタリング型ファイアウォールを設置している。このネットワーク構成において,社内のPCからインターネット上のSMTPサーバに電子メールを送信できるようにするとき,ファイアウォールで通過を許可するTCPパケットのポート番号の組合せはどれか。ここで,SMTP通信には,デフォルトのポート番号を使うものとする。
f:id:ponsuke_tarou:20191014081135p:plain
(引用元)平成30年春期問44 パケットフィルタリングルール|基本情報技術者試験.com

ダイナミックパケットフィルタリングは、通信のやり取りを判断して動的にフィルタリングテーブルが更新するファイアウォールです。

  • 英語: dynamic(動的な) packet filtering

戻りのパケットに関しては,過去に通過したリクエストパケットに対応したものだけを通過させることができます。

https://ascii.jp/img/2009/08/12/853064/l/4ce07a5468d0a4e9.jpg
ASCII.jp:不正アクセスを防ぐファイアウォールの仕組み (4/6)

ステートフルパケットインスペクションは、出入りするパケットの通信状態を把握して外部から送信されたパケットのアクセスを動的に制御するファイアウォールです。

  • 英語: Stateful(処理状態を把握す) Packet Inspection(検査)
  • 略称: SPI
  • 別名: ステートフルインスペクション、ステートファイアウォール

ダイナミックパケットフィルタリングの1つです。

パケットフィルタリングを拡張した方式であり,過去に通過したパケットから通信セッションを認識し,受け付けたパケットを通信セッションの状態に照らし合わせて通過させるか遮断させるかを判断します。

このファイアウォールはコンテキストの中でパケットを判断します。 コンテキストとは、文脈という意味で、この場合はプログラムが処理内容を置かれた状態や状況、 与えられた条件から判断するという意味です。
覚えておくべき4種のファイアウォール

個々のセッションごとに過去の通信を保持しているため「順序の矛盾した攻撃パケットを遮断することができる」ことや、常に最小限の許可ルールが追加されるため「アクセス制御リストの設定不備を突く攻撃を受けにくい」という優れた点があり、多くのファイアウォール製品に採用されています。
情報セキュリティスペシャリスト平成27年秋期 午前Ⅱ 問3

f:id:ponsuke_tarou:20191014085606j:plain
なにかの芽

次回の勉強内容

ponsuke-tarou.hatenablog.com

TPMは、耐タンパ性に優れたセキュリティチップです。

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

PCに内蔵されるセキュリティチップ(TPM:Trusted Platform Module)がもつ機能はどれか。

ア. TPM間での共通鍵の交換
イ. 鍵ペアの生成
ウ. ディジタル証明書の発行
エ. ネットワーク経由の乱数発信
情報セキュリティスペシャリスト平成26年春期 午前Ⅱ 問5

TPMは、鍵ペアの生成を行います。

  • 正式名称: Trusted(信用されている) Platform Module

https://ssl-product-images.www8-hp.com/digmedialib/prodimg/lowres/c04433210.png
HP® Trusted Platform Module Accessory (F5S62A)

TCGで定義されたセキュリティの仕様に準拠したセキュリティチップです。

  • 正式名称: Trusted Computing Group

TCGは、コンピューターの信頼性と安全性を高める国際業界標準規格制定のための米国の業界団体です。

PCなどの機器に搭載され、鍵生成やハッシュ演算及び暗号処理を行うセキュリティチップです。

https://jpn.nec.com/products/bizpc/performance/images/security_pic_tpm.gif
セキュリティチップ(TPM)について : セキュリティ/マネジメント | ビジネスPC | NEC

TPMによって提供される機能には以下のようなものがあります。

  • OSやアプリケーションの改ざん検知
  • 端末認証
  • ストレージ全体の暗号化

平成30年春期問45 TPMに該当するものはどれか|応用情報技術者試験.com

TPMは、耐タンパ性に優れています。

https://www.ubiquitous-ai.com/products/assets/images/products/detail/img_tpm_01.gif
TPMセキュリティソリューション|ユビキタスAIコーポレーション

耐タンパ性は、外部から内部データに対して行われる改ざん・解読・取出しなどの行為に対する耐性度合いです。

  • 英語 : tamper(許可なくいじる) resistance(抵抗する力)

マイクロプロセッサの耐タンパ性を向上させる手法として,適切なものはどれか。

答. チップ内部を物理的に解析しようとすると,内部回路が破壊されるようにする。
平成30年秋期問22 マイクロプロセッサの耐タンパ性|応用情報技術者試験.com

ICカードの耐タンパ性を高める対策はどれか。

答. 信号の読み出し用プローブの取付けを検出するとICチップ内の保存情報を消去する回路を設けて,ICチップ内の情報を容易に解析できないようにする。
平成29年秋期問44 耐タンパ性を高める対策はどれか|応用情報技術者試験.com

HDDやメインのCPUとセキュリティ関連機能をもったTPMが物理的に分かれることで耐タンパ性が高まります。

https://www.bcm.co.jp/site/2004/2004Feb/techo-trend/04trend-02/04trend02-tcg-zu01-02.jpg
TCG(Trusted Computing Group)

LSIは、ICの大きいのです。

  • 正式名称: Large-scale Integrated(統合された) Circuit(回路)
  • 日本語: 大規模集積回路

http://app.na4.teamsupport.com/Wiki/WikiDocs/784358/images/relja/semi14.gif
FAQ 1009021 : ICとLSIの違いは?

ICは、トランジスタや抵抗・コンデンサなどを小さいシリコンに乗っけた電子部品です。

https://www.tel.co.jp/museum/exhibition/principle/common/img/pic_ic_2_3.jpg
IC(集積回路)とは? | 半導体の原理 | nanotec museum

システムLSIは、複数のLSIで実現していた機能を1チップに集約したものです。

https://www.fujitsu.com/jp/Images/p02-06_tcm102-1760552.gif
システムLSI(CMOS)ってなんだろう : 富士通研究所

従来はボード上で実現していたシステムを一つのチップ上で実現したLSIのことをSoCといいます。

  • 正式名称: System on a Chip

SoC(System on a Chip)の説明として,適切なものはどれか。

答. 必要とされるすべての機能(システム)を同一プロセスで集積した半導体チップ
平成28年春期問24 SoC(System on a Chip)の説明|応用情報技術者試験.com

TPMは、セキュリティ関連機能を実装したLSIチップです。

e-words.jp

f:id:ponsuke_tarou:20191013161430j:plain
2016年の秋の風景

次回の勉強内容

ponsuke-tarou.hatenablog.com

イーサネットにおけるコリジョンドメインとブロードキャストドメイン

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

ルータで接続された二つのセグメント間でのコリジョンの伝搬とブロードキャストフレームの中継について,適切な組合せはどれか。

https://www.sc-siken.com/kakomon/29_aki/img/18.gif
情報セキュリティスペシャリスト平成29年秋期 午前Ⅱ 問18

イーサネットは、コンピュータネットワークにおける有線LANの規格です。

ponsuke-tarou.hatenablog.com

CSMA/CDは、イーサネットでの接続方式の一つです。

  • 正式名称 : Carrier Sense Multiple Access with Collision(衝突) Detection(発見)
  • 日本語 : 搬送波感知多重アクセス/衝突検出方式

各ノードは伝送媒体が使用中かどうかを調べ、使用中でなければ送信を行い、衝突を検出したらランダムな時間経過後に再度送信を行います。

https://www.infraexpert.com/studygif/ethernet23.gif
https://www.infraexpert.com/studygif/wireless14.gif
Ethernet LAN - CSMA/CDとは

それぞれのステーション*1がキャリア検知を行うとともに、送信データの衝突が起きた場合は再送します。

  1. 伝送路上に他のノードからフレームが送出されていないかを確認する
  2. 複数のクライアントは同じ回線を共用し、他者が通信をしていなければ自分の通信を開始する
  3. 複数の通信が同時に行われた場合は衝突を検出し、送信を中止してランダム時間待ってから再び送信をする

平成29年春期問31 CSMA/CDに関する記述|応用情報技術者試験.com

衝突発生時の再送動作によって、衝突の頻度が増すとスループット*2が下がります。

CSMA/CDは、伝送路上の通信量が増加するにつれて衝突の発生も増加し、さらに再送が増え通信量が増えてしまうという欠点があります。一般にCSMA/CD方式では、伝送路の使用率が30%を超えると急激に送信遅延時間が長くなってしまい実用的ではなくなると言われています。
平成24年秋期問30 CSMA/CD方式に関する記述|応用情報技術者試験.com

同時にフレームを送信している端末の間でフレームが衝突することをコリジョンとも言います。

https://www.itbook.info/study/img/csma2.gif
イーサネット(Ethernet)のしくみ(2) -CSMA/CD方式- - ネットワークエンジニアを目指して

コリジョンが発生する範囲をコリジョンドメインといいます。

http://www.kmownet.com/computer-network/201-ethernet/201-ethernet-fig180.jpg
ローカルエリア|物理ネットワーク|CSMA/CD|メディアアクセスの制御|コリジョンドメイン

コリジョンドメイン内に機器が沢山接続されているとコリジョンが発生しやすくなります。

f:id:ponsuke_tarou:20191008231130p:plain

コリジョンを発生しにくくするにはコリジョンドメインを分割します。

f:id:ponsuke_tarou:20191008231305p:plain
OSI参照モデルでの物理層の機器ではコリジョンドメインを分割できません。

OSI参照モデル 機器 説明
物理層 リピータ 通信ネットワークの中継機器で、一方のケーブルから流れてきた信号を単純にもう一方のケーブルに送り出す装置
物理層 ハブ ネットワークの中心に位置する集線装置*3であり、複数のネットワーク機器を接続する装置
物理層 リピータハブ 通信ネットワークのハブの一つで、すべての信号をすべての端末に送る機器、複数のポートを持ってるリピータ

https://www.infraexpert.com/studygif/ethernet24.gif
https://www.infraexpert.com/studygif/ethernet25.gif
Ethernet LAN - リピータ・リピータハブ・ブリッジ・スイッチ・ルータ

f:id:ponsuke_tarou:20191008231719p:plain
OSI参照モデルでのデータリンク層ネットワーク層の機器でコリジョンドメインを分割できます。

OSI参照モデル 機器 説明
ネットワーク層 L3スイッチ ネットワークの中継機器の一つで、
ネットワーク層とリンク層の両方の制御情報に基づいてデータの転送先の決定を行う
ネットワーク層 ルータ 異なるネットワーク同士を接続する機器
データリンク層 L2スイッチ MACアドレスを含んだ情報を使って中継動作を行う
データリンク層 ブリッジ 複数のネットワークを結ぶ中継機器のうち、
受信したデータのMACアドレスなどデータリンク層の宛先情報を参照して中継の可否を判断する

https://www.infraexpert.com/studygif/ethernet27.gif
https://www.infraexpert.com/studygif/ethernet28.gif
https://www.infraexpert.com/studygif/ethernet29.gif
Ethernet LAN - リピータ・リピータハブ・ブリッジ・スイッチ・ルータ

データリンク層ネットワーク層の機器をまたぐとコリジョンは伝搬されません。

f:id:ponsuke_tarou:20191008232518p:plain

イーサネットで使用されるアドレスには種類があります。

種類 説明
ユニアドレス 特定の機器にデータを送信するために使用されるアドレス
マルチキャストアドレス 特定の複数機器にデータを送信するために使用されるアドレス
ブロードキャストアドレス ネットワーク内のすべての機器にデータを送信するために使用されるアドレス

ブロードキャストアドレスIPアドレスは、ホスト部の全ビットが1になります。

IPアドレスが 192.168.0.x でサブネットマスクが 255.255.255.0 の TCP/IPネットワークで,ブロードキャストアドレスはどれか。

イ. 192.168.0.255
平成20年秋期問50 ブロードキャストアドレス|基本情報技術者試験.com

IPアドレス 192.168.57.123/22 が属するネットワークのブロードキャストアドレスはどれか。

ウ. 192.168.59.255

まず、IPアドレス 192.168.57.123 は2進数表記では以下のビット列です。
 11000000 10101000 00111001 01111011
ブロードキャストアドレスはホストアドレス部である下位10ビットを全て"1"にした以下のビット列です。
 11000000 10101000 00111011 11111111
平成28年春期問34 ブロードキャストアドレスはどれか|基本情報技術者試験.com

ネットワークアドレス192.168.10.192/28のサブネットにおけるブロードキャストアドレスはどれか。

イ. 192.168.10.207

 11000000 10100000 00001010 11000000
ブロードキャストアドレスは、ホストアドレス部のビットをすべて「1」にした次のアドレスになります。
 11000000 10100000 00001010 11001111
平成19年秋期問52 ブロードキャストアドレス|応用情報技術者試験.com

IPv4アドレス 172.22.29.44/20 のホストが存在するネットワークのブロードキャストアドレスはどれか。

ウ. 172.22.31.255
https://www.ap-siken.com/kakomon/26_haru/img/33.gif
平成26年春期問33 ブロードキャストアドレスはどれか|応用情報技術者試験.com

ブロードキャストアドレスは、用途が決まっているのでネットワークに接続する機器に割り振っていはいけません。

次のネットワークアドレスとサブネットマスクをもつネットワークがある。このネットワークを利用する場合,PCに割り振ってはいけないIPアドレスはどれか。

ネットワークアドレス: 200.170.70.16
サブネットマスク  : 255.255.255.240

エ. 200.170.70.31
平成26年秋期問34 割り振ってはいけないIPアドレス|基本情報技術者試験.com

TCP/IPネットワークにおいてARPというプロトコルを使うことでIPアドレスからMACアドレスを得ることができます。

  • 正式名称 : Address Resolution(èzəlúːʃən、解明) Protocol
  1. 要求パケットに送信元のIPアドレスMACアドレスと通信相手の IPアドレスの情報を格納して、Ethernet ネットワークにブロードキャストする。
  2. 要求パケットを受け取った各ノードは、自分の IPアドレスと同一であれば、自分の MACアドレスを送信元に伝える。

平成19年春期問52 ARPの説明|基本情報技術者試験.com

MACアドレスフィルタリングは、ARPを利用してPCのMACアドレスを確認し、事前に登録されているMACアドレスである場合だけ通信を許可する機能です。

https://network.yamaha.com/var/site/storage/images/8/4/1/9/129148-1-jpn-JP/01_mac-wlx313.jpg
https://network.yamaha.com/setting/wireless_lan/airlink/mac-wlx313

ARPは、要求パケットに通信相手の IPアドレスの情報を格納して、Ethernet ネットワークにブロードキャストします。

https://www.ap-siken.com/kakomon/23_toku/img/37a.gif
平成23年特別問37 ARP要求・応答パケット|応用情報技術者試験.com

ARPはブロードキャストを使用するので、同じネットワーク内の機器のMACアドレスを取得できます。

ARPとは逆にMACアドレスからIPアドレスを求めるプロトコルRARPといいます。

  • 英語: Reverse Address Resolution Protocol

機器固有のMACアドレスから対応するIPアドレスを取得するためのプロトコルです。
平成25年春期問33 RARPの機能として適切なもの|応用情報技術者試験.com

ブロードキャストできるネットワークの範囲をブロードキャストドメインといいます。

ブロードキャストドメイン内に機器が沢山接続されているとARP要求があるとすべての機器で処理が発生します。

f:id:ponsuke_tarou:20191008234006p:plain

負荷を下げるためにはブロードキャストドメインを分割します。

f:id:ponsuke_tarou:20191008234058p:plain

OSI参照モデルでの物理層データリンク層の機器ではブロードキャストドメインを分割できません。

f:id:ponsuke_tarou:20191008234240p:plain

ネットワーク層の機器をまたぐとブロードキャストフレームは伝搬されません。

f:id:ponsuke_tarou:20191008234531p:plain

次回の勉強内容

ponsuke-tarou.hatenablog.com

*1:イーサネットの規格では、ノードのことを「ステーション」と呼んでいる。ステーションはネットワークに接続されるコンピュータの総称で、コンピュータやプリンタなどネットワークを介して通信するすべてのデバイスを表す。出典:第6回 イーサネット(その1) - イーサネットの規格とCSMA/CDアクセス制御方式:詳説 TCP/IPプロトコル(3/5 ページ) - @IT

*2:e-words.jp

*3:複数の伝送路を収容、接続する装置

イーサネットの基本

前回の勉強内容

ponsuke-tarou.hatenablog.com

イーサネットは、コンピュータネットワークにおける有線LANの規格です。

有線LANを使うときの「物理層」と「データリンク層」の仕様を決めている規格です。

イーサネットフレームは、イーサネットでの通信で使用するデータフォーマットのことです。

https://ascii.jp/img/2009/06/18/237020/l/444996beedb73dc4.jpg
ASCII.jp:Ethernetのフレーム構造を理解しよう (1/3)

OSI基本参照モデル各層ごとにヘッダをフレームに入れていくので、宛先情報の送出順序は「宛先MACアドレス > 宛先IPアドレス > 宛先ポート番号」になります。

https://www.fe-siken.com/kakomon/25_aki/img/37.gif
平成25年秋期問37 宛先情報の送出順序はどれか|基本情報技術者試験.com

https://www.infraexpert.com/studygif/ethernet31.gif
Ethernet LAN - ルータの仕組みをはじめから

イーサネット機器にあるLANケーブルの差込口の仕様にはMDIとMDI-Xの2種類あります。

LANケーブルのコネクタには8このピンがあります。

ポート 送信用のピン 受信用のピン
MDI
(Medium Dependent Interface)
1と2番 3と6番
MDI-X 3と6番 1と2番

https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/D-Link_DES-1016D_dual-port.jpg/220px-D-Link_DES-1016D_dual-port.jpg
Medium-dependent interface - Wikipedia

https://lan-kouji.com/contents05/image/rj-45.png
https://lan-kouji.com/contents05/image/straight_a.png
LANケーブルの作り方-「カテゴリー5e」LANケーブル作成を写真(画像)つきで解説

ポートを正しくつなぐには接続機器によってストレートケーブルクロスケーブルを使い分ける必要があります。

https://tech.nikkeibp.co.jp/it/article/COLUMN/20070706/276939/03Ans.jpg
問3 LANケーブルの結線 | 日経クロステック(xTECH)

Automatic MDI/MDI-Xは、コネクタの送信端子と受信端子が正しい組合せとなるように自動で判別して切り替える機能なので、対応しているケーブルを使えばケーブルの使い分けを気にしなくてすみます。

PCやスイッチングハブがもつイーサネットインタフェース(物理ポート)の,Automatic MDI/MDI-Xの機能はどれか。

  1. コネクタの送信端子と受信端子が正しい組合せとなるように,自動で判別して切り替える機能
  2. 接続した機器のアドレスを学習し,イーサネットフレームを該当するインタフェースにだけ転送する機能
  3. 通信経路のループを自動的に検出する機能
  4. 通信速度や,全二重と半二重のデータ通信モードを自動的に設定する機能

https://www.sc-siken.com/kakomon/29_haru/img/19.gif
情報セキュリティスペシャリスト平成29年春期 午前Ⅱ 問19

MACアドレスは、ネットワークに接続する機器を識別する16進数のアドレスです。

https://tech.nikkeibp.co.jp/it/article/COLUMN/20061107/252825/zu03.jpg
悪さをしている機器を探し出す -- No.3 MACアドレスから機器のメーカーを調べる | 日経クロステック(xTECH)

MACアドレスの構成には決まりがあります。

位置 意味
最初の24ビット ベンダーID(OUI)
次の8ビット 機種ID
最後の16ビット 製品のシリアルID

(参照元)平成24年秋期問33 MACアドレスの構成|基本情報技術者試験.com

https://www.infraexpert.com/studygif/multicastz07.gif
マルチキャストMACアドレス

ルーターは、異なるネットワーク同士を接続する機器です。

複数のネットワークをOSI基本参照モデルの第3層(ネットワーク層)で接続し、パケットを中継します。
f:id:ponsuke_tarou:20191006162718p:plain

https://support.nifty.com/support/manual/internet/bflets/setup/images/setup_rooter_step0101.gif
会員サポート > ブロードバンドルーターの設定 : @nifty

ルーターは「パケットのあて先端末のIPアドレス」と「MACアドレス」に基づいて、宛先のルータだけに中継します。

https://www.fe-siken.com/kakomon/17_aki/img/57.gif
平成17年秋期問57 ルータの動作|基本情報技術者試験.com

伝送媒体やアクセス制御方式の異なるネットワークの接続が可能であり、送信データのIPアドレスを識別し、データの転送経路を決定します。

f:id:ponsuke_tarou:20191007000231j:plain
秋の光景

次回の勉強内容

ponsuke-tarou.hatenablog.com

SSL/TLSの基礎知識

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

SSL/TLSのダウングレード攻撃に該当するものはどれか。

  1. 暗号化通信中にクライアントPCからサーバに送信するデータを操作して,強制的にサーバのディジタル証明書を失効させる。
  2. 暗号化通信中にサーバからクライアントPCに送信するデータを操作して,クライアントPCのWebブラウザを古いバージョンのものにする。
  3. 暗号化通信を確立するとき,弱い暗号スイートの使用を強制することによって,解読しやすい暗号化通信を行わせる。
  4. 暗号化通信を盗聴する攻撃者が,暗号鍵候補を総当たりで試すことによって解読する。

情報セキュリティスペシャリスト平成29年春期 午前Ⅱ 問2

インターネット上でのデータの通信を暗号化したプロトコルSSLといいます。

  • 正式名称 : Secure(安全な) Sockets(受け口) Layer

通常インターネット上での通信は「http(HyperText Transfer Protocol)」で行われますが、送受信されるデータは暗号化することができず、盗聴や改ざんを防げません。
しかし、SSLプロトコルを使用することで通信データは暗号化され、第三者が盗み見しようとしても解読することができません。
https://jp.globalsign.com/service/ssl/knowledge/

SSLで暗号化されたサイトのURLは「https」になります。

  • 正式名称 : HyperText Transfer Protocol Secure
  • 別名: HTTP over TLS

上記のサイトも暗号化されていてURLの先頭は「https」になります。
f:id:ponsuke_tarou:20180408225847p:plain

攻撃者が社内ネットワークに仕掛けたマルウェアによってHTTPSが使われると、通信内容がチェックできないので、秘密情報が社外に送信されてしまいます。

HTTPSではクライアント-サーバ間の通信が暗号化されます。このため、もし通信経路上にプロキシサーバ等が介在したとしても内容のチェックはできません。
応用情報技術者平成29年春期 午前問44

SSLを利用するWebサーバでは、そのFQDNをディジタル証明書に組み込みます。

ディジタル証明書のコモンネームにFQDNを設定します。
ディジタル証明書のコモンネームとサーバに設定されているFQDNを比較して、一致していたらSSL通信を開始することができます。

Google ChromeではFQDNのコモンネームへの設定は非推奨なのでSubject Alternative Nameに設定します。

FQDNは、ホスト名やドメイン名を省略しないで記述した文字列です。
  • 正式名称 : Fully Qualified(限定された) Domain Name
  • 日本語 : 絶対ドメイン名、完全修飾ドメイン

https://itmanabi.com/wp-content/uploads/2018/12/url-relation.png
FQDN?URL?ドメイン名?違いは? | ITの学び

SSLは、インターネット上で仮想専用ネットワークを使用するVPNでも使用されます。

ponsuke-tarou.hatenablog.com

SSL/TLSを利用することによって、クライアントサーバ間の通信を暗号化できます。

https://www.infraexpert.com/studygif/security23.gif
https://www.infraexpert.com/studygif/security24.gif
https://www.infraexpert.com/studygif/security25.gif
SSL-VPNとは

暗号化にSSLを使用したSSL-VPNではサーバ認証のために、VPN装置にFQDN又はIPアドレスを含むディジタル証明書を組み込む必要があります。

SSL通信ではサーバ認証が必須になっているため、例え同一ドメイン内に設置する場合であっても、装置ごとに固有のディジタル証明書を組み込む必要があります。
情報セキュリティスペシャリスト平成23年秋期 午前Ⅱ 問4

SSLが進化してTLSができました。

  • 正式名称 : Transport(運ぶ) Layer Security
  • 別名 : SSL/TLS

インターネットなどのTCP/IPネットワークでデータを暗号化して送受信するプロトコル(通信手順)の一つです。
データを送受信する一対の機器間で通信を暗号化し、中継装置などネットワーク上の他の機器による成りすましやデータの盗み見、改竄などを防ぐことができます。

インターネットに接続された利用者のPCから,DMZ上の公開Webサイトにアクセスし,利用者の個人情報を入力すると,その個人情報が内部ネットワークのデータベース(DB)サーバに蓄積されるシステムがある。このシステムにおいて,利用者個人のディジタル証明書を用いたTLS通信を行うことによって期待できるセキュリティ上の効果はどれか。

  1. PCとDBサーバ間の通信データを暗号化するとともに,正当なDBサーバであるかを検証することができるようになる。
  2. PCとDBサーバ間の通信データを暗号化するとともに,利用者を認証することができるようになる。
  3. PCとWebサーバ間の通信データを暗号化するとともに,正当なDBサーバであるかを検証することができるようになる。
  4. (答え)PCとWebサーバ間の通信データを暗号化するとともに,利用者を認証することができるようになる。

出典 : 平成30年 秋期 応用情報技術者試験 午前問40

TSLの特徴

  1. TLSは公開鍵証明書による通信相手の認証(一般的にはサーバの認証)
  2. 共通鍵暗号(秘密鍵暗号)による通信の暗号化
  3. ハッシュ関数による改竄検知
TSLの生い立ち
  • 1990年代 : SSLNetscape Communications社が開発
  • 1999年
    • IETFTLSワーキンググループが SSL 3.0 を基に TLS 1.0 が標準化される(RFC2246)
    • SSLという名称が既に広く定着していたため、実際にはTLSを指していてもSSLと表記したり、「SSL/TLS」「TLS/SSL」などと両者を併記したりすることが多い。
  • 2006年 : TLS 1.0で発見された新たな攻撃手法への対処など改良を加えたバージョンとして、TLS 1.1がRFC 4346として公開される
  • 2008年 : より安全性の高いハッシュを利用できるようにするなど改良を加えたTLS 1.2がにRFC 5246として公開される
  • 2014年 : SSL 3.0に一定の条件の下で通信の一部が第三者に漏えいする可能性があるPOODLEが報告される
  • 2018年 : TLS 1.3がRFC 8446として公開される
  • 通称名:POODLE(Padding Oracle On Downgraded Legacy Encryption)
  • 脆弱性内容:攻撃者は、SSL 3.0 を使う暗号化通信において、リクエスト送信を繰り返し試み、暗号化通信の一部を解読する恐れが発生。また攻撃者は、TLSSSL のバージョンをダウングレードさせる可能性がある。
  • 想定される被害:Webサイト利用時の認証情報(クッキー、トークンなど)を窃取される

https://blog.trendmicro.co.jp/archives/10112

f:id:ponsuke_tarou:20190930231956j:plain
あの日

SSL/TLSでのクライアントとサーバでのやり取りではディジタル証明書が使われます。

  1. クライアントからのSSL/TLSによる接続要求に対し,Webサーバは証明書をクライアントに送付する。
  2. クライアントは,保持している認証局の公開鍵によってこのサーバ証明書の正当性を確認する。
  3. クライアントは,共通鍵生成用のデータを作成し,サーバ証明書に添付されたWebサーバの公開鍵によってこの共通鍵生成用データを暗号化し,Webサーバに送付する。
  4. 受け取ったWebサーバは,自らの秘密鍵によって暗号化された共通鍵生成用データを復号する。
  5. クライアントとWebサーバの両者は,同一の共通鍵生成用データによって共通鍵を作成し,これ以降の両者間の通信は,この共通鍵による暗号化通信を行う。

f:id:ponsuke_tarou:20211008171215j:plain
TSLのハンドシェイク

利用者個人のディジタル証明書を用いたTLS通信を行うことによって、PCとWebサーバ間の通信データを暗号化するとともに利用者を認証することができるようになります。

TLS通信では、必須のサーバ認証とは別にオプションでクライアント認証を行うこともできます。利用者PCと通信を行うWebサーバは、利用者個人のディジタル証明書に付された認証局の署名を検証することで、ディジタル証明書の正当性を確認します。ディジタル証明書が正当なものならば、利用者(クライアント)の真正性が証明されます。
平成30年秋期問40 TLS通信で期待できるセキュリティ効果|応用情報技術者試験.com

SSL/TLSで使用する個人認証用のディジタル証明書は、ICカードなどに格納できるので格納場所を特定のPCに限定する必要はありません。

個人認証用のディジタル証明書は電子証明書と呼ばれ、公的認証サービスなどを利用すると電子証明書が記録されたICカードの発行をうけることができます。
情報セキュリティスペシャリスト平成24年秋期 午前Ⅱ 問14

SSL/TLSは新しいバージョンを使用しないと攻撃を受ける可能性が高まります。

https://www.ipa.go.jp/files/000042251.png
更新:SSL 3.0 の脆弱性対策について(CVE-2014-3566):IPA 独立行政法人 情報処理推進機構

ダウングレード攻撃は、暗号化通信を確立するとき弱い暗号スイートの使用を強制することによって解読しやすい暗号化通信を行わせる攻撃です。

FREAKは、使用するRSA鍵を512ビット以下の輸出グレードに格下げさせます。

https://cdn-ak.f.st-hatena.com/images/fotolife/K/Kango/20150311/20150311085830.png
FREAK についてまとめてみた - piyolog

Logjamは、DH鍵交換で使用するアルゴリズムの強さを輸出グレードの暗号で使用する 512ビット以下に格下げします。

TLS プロトコルは、DHE_EXPORT 暗号スイートがサーバで有効になっており、クライアントではなっていない場合に、DHE_EXPORT が選択されたことをクライアントに適切に通知しないため、暗号アルゴリズムのダウングレード攻撃を実行される脆弱性が存在します。
脆弱性は、"Logjam" と呼ばれています。
JVNDB-2015-002764 - JVN iPedia - 脆弱性対策情報データベース

バージョンロールバック攻撃は、脆弱性のあるSSL3.0での通信を仕向けます。

https://jvndb.jvn.jp/ja/contents/2005/img/JVNDB-2005-000601.png
JVNDB-2005-000601 - JVN iPedia - 脆弱性対策情報データベース

f:id:ponsuke_tarou:20190930231918j:plain
秋の思い出

次回の勉強内容

ponsuke-tarou.hatenablog.com