Amazon GuardDuty について調べたメモ

Amazon GuardDuty について調べたことを軽く纏めておく。

Amazon GuadDuty とは

マネージド型の脅威検出サービスで、以下3つのデータソースを監視する。

  • VPC Flow Logs
    • 有効にしていなくても検出はされるらしい。が、そもそも有効化しておく方が好ましい
  • DNS Logs
    • EC2 からのクエリログが対象
  • CloudTrail Events
    • 予め有効化しておく

設定方法

マネコンからポチッと有効にするだけ。脅威検出時に通知させるには CloudWatch Events から SNS にでも飛ばせば良さそう。イベントパターンは以下のようになる。

{
  "source": [
    "aws.guardduty"
  ],
  "detail-type": [
    "GuardDuty Finding"
  ]
}

信頼リスト・脅威リスト

基本的には自動で悪意のある通信を検知してくれるが、予め信頼IPアドレスリスト、脅威IPアドレスリストを設定しておくことで検出動作をカスタマイズできる。

docs.aws.amazon.com

動作テスト

AWS から以下の動作確認用リポジトリが公開されている。

github.com

CFn が用意されているので、スタックを作成すると動作テスト用のリソース(VPC、サブネット、EC2インスタンスなど)が作成される。

但し、AWS に対するペネトレーションテスト(侵入テスト)は事前の申請が必要。詳しくは以下を参照。

aws.amazon.com

他アカウントの検知結果を1アカウントへ統合

Black Belt のP39 以降を参照。

参考

aws.amazon.com

www.slideshare.net

AWS CLI と jq で Route Table の ルート一覧を CSV形式で取得する

VPCのRoute Tableのルート一覧をスプレッドシートに貼り付けて確認したかったのでメモ。

実行環境

結論

こんな感じ。<route-table-id>に取得したいルートテーブルのIDを指定する。

aws ec2 describe-route-tables --route-table-ids <route-table-id> | jq -r '.RouteTables[0].Routes[] | [.DestinationCidrBlock, .DestinationIpv6CidrBlock, .DestinationPrefixListId, .EgressOnlyInternetGatewayId, .GatewayId, .InstanceId, .InstanceOwnerId, .NatGatewayId, .TransitGatewayId, .LocalGatewayId, .NetworkInterfaceId, .Origin, .State, .VpcPeeringConnectionId] | @csv'

結果

"10.100.0.0/16",,,,"local",,,,,,,"CreateRouteTable","active",
"0.0.0.0/0",,,,"igw-0365cb32e1725b8d",,,,,,,"CreateRoute","active",
  • 出力されるカラムは、DestinationCidrBlock, DestinationIpv6CidrBlock, DestinationPrefixListId, EgressOnlyInternetGatewayId, GatewayId, InstanceId, InstanceOwnerId, NatGatewayId, TransitGatewayId, LocalGatewayId, NetworkInterfaceId, Origin, State, VpcPeeringConnectionId
  • 最後の @csv@tsv に変えれば tsv で出力できる

参考リンク

IKEAのテーブルトップがBRIWAXで復活した

最近、自宅の作業環境を整えている。 テーブルは何年使ったかも分からないIKEAのテーブルトップと架台を使っているんだけど、天板の汚れが気になるようになってきた。

こんな感じのやつ。無垢材で汚れやすい。 www.ikea.com www.ikea.com

f:id:t3yamoto:20200109215014j:plain
復活前。飲みこぼしらしき汚れが目立つ。

買い換えるか悩んでいたところ、オイルステインで復活出来そうなので試しにやってみることにした。 使ったのはこれ。DIYerには定番らしい。

サンダーで下処理

毛羽立ちや汚れを取り除くため、ヤスリがけをする。ヤスリ紙は目の粗さがあるが、勘で#240をチョイスした。

f:id:t3yamoto:20200109212517j:plain
ホームセンターでサンダーを借りてきた。

f:id:t3yamoto:20200109212532j:plain
サンダーで下処理後。ムラがあるけど気にしない。

BRIWAXを塗布する

f:id:t3yamoto:20200109212448j:plain
BRIWAXを開封。想像と違う色なので不安になる。

BRIWAXを適当な布に付けて、木目に沿って塗布する。

f:id:t3yamoto:20200109212433j:plain

f:id:t3yamoto:20200109212414j:plain
全体に塗布後。ムラがあるけど気にしない。

最後に乾いた布で磨いて作業終了。

完成

f:id:t3yamoto:20200109212354j:plain
架台の色ともあっていい感じ。

f:id:t3yamoto:20200109212334j:plain

素人が雑に塗っても結構うまくいったのでBRIWAXはおすすめ。 Amazonだと370mlくらいのしか売っていないんだけど、テーブルトップ一枚なら多分100mlくらいで十分。メルカリで小分け販売している人がいるのでそちらを利用するのもありかもしれない。

AWS Lambda で /tmp を使う場合は tempfile モジュールで 立つ鳥跡を濁さず

Lambda を使っていると、時々ローカルにファイルを作成したい時がある。そんな時は /tmp 配下が使えるが、注意すべき点として以下がある。

  • 起動されたコンテナは再利用される場合がある(前回実行時のファイルは削除されない)
  • 容量は512MBまで

対策として作成するファイル名に uuid を付けたり、処理開始・終了時に /tmp 配下を削除していたが、tempfile モジュールの TemporaryDirectory を使えばよりスマートに後始末が出来る。

import tempfile
import os
import glob

def handler(event, context):

    # /tmp配下に一時ディレクトリを作成
    with tempfile.TemporaryDirectory(dir="/tmp") as d:
        print(os.listdir("/tmp"))

        # 一時ディレクトリ配下にファイルを作成
        with open(f"{d}/hello.txt", "w", encoding="utf-8") as f:
            f.write("world")
        
        print(glob.glob(f"{d}/*"))

    # withを抜けると自動で一時ディレクトリは削除される
    print(os.listdir("/tmp"))

with tempfile.TemporaryDirectory(dir="/tmp") as d:/tmp 配下に一時ディレクトリが作成され、withを抜けると自動で削除される。

START RequestId: 26488f5f-4c6f-4451-a1f5-9164b1a0ad7d Version: $LATEST
['tmpl4mx8879']
['/tmp/tmpl4mx8879/hello.txt']
[]
END RequestId: 26488f5f-4c6f-4451-a1f5-9164b1a0ad7d

tmpl4mx8879 という一時ディレクトリが作成され、自動で削除されていることが確認できる。

参考

AWS Lambda 実行コンテキスト - AWS Lambda

AWS Lambda の制限 - AWS Lambda