Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

【ログ分析勉強会】セッションアクティビティログは使えるのか

1.870 visualizaciones

Publicado el

#logben vol.2

Publicado en: Datos y análisis
  • Sé el primero en comentar

【ログ分析勉強会】セッションアクティビティログは使えるのか

  1. 1. セッションアクティビティログは使えるのか? @ログ分析勉強会オンライン vol.2 2020年6月26日(金) 日比野 恒
  2. 2. 自己紹介 後日スライド公開予定 名前: 日比野 恒 (ひびの ひさし) 業務: ログ分析プラットフォームの設計と構築 好きなツール: Logstash モチベ: ログの活用、分析の敷居を下げること セキュリティログ分析基盤活用入門(@IT) https://www.atmarkit.co.jp/ait/series/16525/ クラウド環境のログをどう活かす?先駆者の知見から学ぶ https://ascii.jp/elem/000/001/697/1697672/
  3. 3. 本日、お話すること ✓ セッションアクティビティログの話 ✓ CloudWatch Logsの嬉しい話 ✓ Chatbotを試してみた話
  4. 4. 実現したかったセキュリティ要件 1. 送信元IPアドレスによるアクセス権制御 2. 仮想MFAによる多要素認証ログインの強制 3. 不要なSSH鍵の配布防止 4. スイッチロールを用いたAWS環境の操作制御 5. EC2の操作ログ取得とログの改ざん防止 6. ConsoleLoginとStartSessionのイベント通知 • こんなようなことをしようと思ってるところでSession Managerをまじめに触ることになった。
  5. 5. ログ監視 ログ蓄積 ログ分析 構成図 Internet AWS Cloud VPC オフィス環境 CloudWatch Logs CloudTrail IAM S3 正規ユーザ 不正なユーザ SSH HTTPS Systems Manager MFA token Management Console HTTPS ログ出力 ログ出力 セッションマネージャー ログイン認証 認可 IP制御 MFA認証 コンソール操作 Security group SSH接続無効化 IAMポリシー制御 EC2 EC2 ログインの監査ログ セッション開始/終了ログ コンソール 操作ログLambda Event Slack イベント通知 セキュリティ 監視者 Elasticsearch Service Slack通知 ログ転送 (サブスクリプションフィルタ) Cognito ログイン認証
  6. 6. IAM設計 Systems ManagerManagement Console MFA token IAMユーザ (ログイン用) dev-user01 IAMロール① (作業用) switch-dev-role IAMポリシー① (送信元IP制御/MFA強制用) must-mfalogin IAMポリシー② (EC2操作用) allow-dev-ec2 EC2 ①ログイン ②IAM認証 ③スイッチロール ⑤セッション開始/終了 ④コンソール操作 IAMロール② (EC2用) ec2-ssm-access-role IAMポリシー③ (SSM操作/ログ出力用) AmazonEC2RoleforSSM IAMポリシー④ (アプリに必要な権限付与用) IAMグループ (開発用) dev-group IAM ⑤’EC2起動/停止 社内ネットワーク VDI端末 開発者 S3 CloudWatch Logs ⑥ログ出力
  7. 7. セッションアクティビティログとは • Session ManagerでEC2接続して実行したシェル操作のログですね!! (WindowsのPowershellも取れるよ) セッションアクティビティのログ記録と監査 https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-logging-auditing.html ✓ Linuxのscriptコマンドでログを取得している ✓ ログの保存先にS3バケットやCloudWatch Logsが指定できる ✓ ログをKMSで暗号化して機密性を確保できる こうならないための保険ね...
  8. 8. S3バケットへの出力 ファイル (=セッションID) 行間に変な空白行が入り込んでしまう... (マジで余計なディスタンス)
  9. 9. CloudWatch Logsへの出力 ログストリーム名 (=セッションID) 1件のイベントとしてゴリっとログ出力される
  10. 10. 【ログストリーム】 【S3バケット】 CloudWatch Logsの嬉しいとこ • マルチラインのログを1つのイベントとして扱ってくれるため、イベント単位で検索クエリを実行できる。 【ログファイル】 【CloudWatch Logs】 xxxxxxxxxxxxxxxxxxx xxx: xxxxxx xxx: xxxxxx xxxxxxxxxxxxxxx xxx: xxxxxx xxx: xxxxxx 1つのイベント (マルチライン) xxxxxxxxxxxxxxxxxxx xxx: xxxxxx xxx: xxxxxx xxxxxxxxxxxxxxx xxx: xxxxxx xxx: xxxxxx 【ファイル(オブジェント)】 xxxxxxxxxxxxxxxxxxx xxx: xxxxxx xxx: xxxxxx xxxxxxxxxxxxxxx xxx: xxxxxx xxx: xxxxxx S3へ CWLへ 【ロググループ】 xxxxxxxxxxxxxxxxxxx xxx: xxxxxx xxx: xxxxxx xxxxxxxxxxxxxxx xxx: xxxxxx xxx: xxxxxx AthenaやS3 Selectなどで クエリを実行してもマルチラインの ログを1つのイベントとして認識しない。 1つのログストリームにマルチラインの ログが1つのイベントとして格納される ため、Insightsなどでクエリするとイベ ント単位で探索が可能になる。
  11. 11. Elasticsearch Serviceへの転送でハマる • 複数のロググループから1つのAmazon ESにストリームしようとすると2つ目以降のログの格納に失敗する。 (Lambda関数の改修方法は、Appendixに記載) サブスクリプションを使用したログデータのリアルタイム処理 https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/Subscriptions.html CloudWatch Logs CloudTrail (監査証跡ログ) Systems Manager (セッションアクティビティログ) Lambda (加工処理) Elasticsearch Service セキュリティ 監視者 Cognito ssm-logging cloudtrail cwl- YYYY.MM.DD ロググループ インデックス 【凡例】 Amazon ESへのストリーム (サブスクリプションフィルタ) 認証検索②格納 ①ログ出力 ①’ログ出力 デフォルトでは、「cwl-」という インデックス名に格納するように Lamdba関数でセットされている。 そのため、異なるスキーマのデータ格納でコケる そこは足を引っ張らないでほすい
  12. 12. Amazon ESに格納した理由 • セッションIDをキーにして、インスタンスIDと操作した内容、誰が、いつ実施したのかを把握したかった。 (これをやるのには、CloudWatch Logsからログ連携する必要がある) 【CloudTrailのログ】 【セッションアクティビティログ】 操作した内容 インスタンスID 必殺相関分析の絵図
  13. 13. ログが正しく取得できないケース • セッション接続中にEC2の停止・再起動するとセッションが正常終了しないため、ログが出力されず。 (SSH over Session Managerも公式サイトの記載の通り、ログ出力はされない) ① SSH over Session Manager ②上段: rebootコマンド 下段: shutdownコマンド
  14. 14. 【参考】SSH over Session Managerの接続構成 macOS 10.14.2 python 3.8.2 aws cli 2.0.12 (1.16.12以上) session manager plugin 1.1.61 (1.1.22.0以上) Macbook Pro Internet AWS Cloud (@Tokyo) Systems Manager EC2 ssm agent 2.3.714.0 (2.3.672.0以上) IAM SSH/SCP aws ssm start 認証認可 SSHキー AWS クレデンシャル Security Group ※インバウンドルール不要 Session Manager で SSH/SCPをトンネリングしてEC2に接続する https://qiita.com/hayao_k/items/78b5bfe030ad8a053e93 Amazon Linux 2 • Security Groupの開放は不要だが、SSHキーとAWSクレデンシャル情報の配布が必要になる。
  15. 15. やりたかったことは概ねできたかな... No 確認項目 結果 詳細内容 1 送信元IPアドレス制御 ◯ IAMポリシーで許可したIPアドレス以外の送信元IPアドレスからAWSマネージメントコンソールにログインしても 全ての操作に権限がないため、アクセス権限エラーとなり、あらゆる操作ができない。(MFA設定すらできない) 2 MFA制御 ◯ 許可された送信元IPアドレスからAWSマネージメントコンソールにログインしても、MFAを有効化してログインしてい ないとMFA設定以外の操作に権限がないため、アクセス権限エラーとなり、EC2操作ができない。 (スイッチロールもエラーとなる) 3 SSH接続制御 ◯ EC2の操作はSession Manager経由で実施するため、Security GroupでSSH通信を許可しない。 そのため、EC2に対してSSH接続しても拒否される。 また、「SSH over Session Manager」によるSSH接続は、EC2に接続するためのSSH鍵、またAWS CLIコマンド での操作権限のあるIAMユーザのアクセスキー情報を渡さなければ、ログインできない。 4 スイッチロールによる権限制御 ◯ MFAを利用して、許可された送信元IPアドレスからAWSマネージメントコンソールにログインし、スイッチロールしない とEC2の操作権限がないため、アクセス権限エラーとなり、EC2操作ができない。 (EC2セッション開始やマシンの起動/停止がエラーとなる) 5 タグによるEC2操作制御(おまけ) ◯ スイッチロール後、EC2のリソースタグに「env: dev」と設定されていないマシンには、セッション開始や起動停止でき ない。リソースタグが付与されているEC2の操作は可能です。 6 操作ログ取得とログ改ざん防止 △ Session Manager経由のセッション開始/セッション終了でS3バケットとCloudWatch Logsにログが取得された。 しかし、セッション接続中に停止/再起動を行うとログが記録されない。最終的には、EC2の起動と停止権限を付与し、 セッション中に停止/再起動をしない運用とした。(苦肉の策) スイッチ用IAMロールにセッションアクティビティに関する権限を付与していないため、ログ設定を変更できない。 また、S3およびCloudWatch Logsの権限を付与していないため、ログの参照および改ざんができない。 7 監視イベントのSlack通知 〇 CloudWatch EventsでCloudTrailのログを用いて、AWSコンソールログインとセッション開始のイベントをSlack 通知した。
  16. 16. Slack通知にChatbotを試してみた • 気持ち落ち込んでたので、4/22にGAしたChatbotでConsoleLoginとStartSessionを通知してみようか。 ついに来た! AWS Chatbot が一般公開(GA)になりました! Slack連携が捗ります! https://dev.classmethod.jp/articles/aws-chatbot-generally-available/
  17. 17. Chatbotで連携できるサービスはまだ限定的 • StartSessionは、Systems Managerに該当したが、ConsoleLoginは対応していなかった。 AWS Chatbotで簡単にSlack通知!!&通知例いろいろ https://qiita.com/hayao_k/items/529539bbb07736ea0f41 Amazon SNS SlackChatbot CloudFormation CodeBuild CodeCommit CodeDeployCodePipeline AWS Config Systems Manager Security HubGuardDuty Alarm Event AWS Health Billing and Cost Management セキュリティ 監視者
  18. 18. メッセージ部のカスタマイズはできない • ChatbotでSlack通知で設定できる項目は以下の通りで、メッセージ部をカスタマイズできない。 ■設定の詳細 ・ログ記録 – オプション (Amazon CloudWatch Logsにログを発行する) ■Slackチャネル ・チャネルタイプ (パブリック、プライベート) ・プライベートチャネルID ■アクセス許可 ・IAMロール ■通知 – オプション ・SNSトピック - リージョン - トピック トライアンドエラーの残骸ね...
  19. 19. しっかりとLambdaのお世話になりました • CloudWatch Events経由でのSlack連携では、表示したい項目をカスタマイズするにはLambdaが必要でした。 (Chatbotを使うことでLambda関数の管理しなくて良いはならないですよね、そりゃそーだw) AWSのメンテナンス情報をSlackに通知する https://qiita.com/hayao_k/items/a4a0e415e86de6cd6af7 CloudTrail LambdaEvent Slack イベント通知 セキュリティ 監視者 Slack通知
  20. 20. ログイン先リージョン問題 • awsRegionがばらつくため、全リージョンでEventsとLambdaをセットしないと要件が満たせない。 過去7日分のConsoleLoginをAmazon ESで検索した結果 (CloudTrailログはサブスクリプションフィルタで投入)
  21. 21. まとめ ✓ Amazon ESで相関分析すると多くの気づきが得られる。 (コスト次第) ✓ トラブルシュートでトライアンドエラーに泣かされた。でも楽しいw (SNS経由でメールは届くのにSlack通知が来ないとか...) ✓ ログ連携にLamdbaは欠かせないと改めて実感した。
  22. 22. Appendix
  23. 23. ※ ウェビナー本編では紹介できなかった設定について Appendixとして、以降のスライドで紹介しています。 私 皆さまの業務において、何かのお役に立てると幸いです。
  24. 24. コンテンツ ✓ 設定したIAMポリシー ✓ SSH over Session Managerの設定方法 ✓ サブスクリプションの改修方法 ✓ Slack通知に利用したLambdaの設定 ✓ CloudWatch Eventsのイベントパターン ✓ 参考にしたURL集
  25. 25. IAMグループに割り当てるIAMポリシー(1/5) • AWSコンソールログインを制御する「must-mfalogin」のIAMポリシーの設定内容になります。 { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:ListUsers", "iam:ListVirtualMFADevices", "iam:ListMFADevices“ ], "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "<許可したい送信元IPアドレス1>/32", "<許可したい送信元IPアドレス2>/32", "<許可したい送信元IPアドレス3>/32" ] } } },
  26. 26. IAMグループに割り当てるIAMポリシー(2/5) { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:DeleteVirtualMFADevice", "iam:CreateVirtualMFADevice", "iam:DeactivateMFADevice", "iam:ChangePassword", "iam:CreateLoginProfile", "iam:DeleteLoginProfile", "iam:GetLoginProfile", "iam:UpdateLoginProfile“ ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "<許可したい送信元IPアドレス1>/32", "<許可したい送信元IPアドレス2>/32", "<許可したい送信元IPアドレス3>/32" ] } } }, • AWSコンソールログインを制御する「must-mfalogin」のIAMポリシーの設定内容になります。
  27. 27. IAMグループに割り当てるIAMポリシー(3/5) { "Sid": "VisualEditor2", "Effect": "Deny", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/switch-dev-role", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "<許可したい送信元IPアドレス1>/32", "<許可したい送信元IPアドレス2>/32", "<許可したい送信元IPアドレス3>/32" ] } } }, • AWSコンソールログインを制御する「must-mfalogin」のIAMポリシーの設定内容になります。
  28. 28. IAMグループに割り当てるIAMポリシー(4/5) { "Sid": "VisualEditor3", "Effect": "Deny", "NotAction": [ "iam:ListUsers", "iam:ListVirtualMFADevices", "iam:ListMFADevices", "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:DeleteVirtualMFADevice", "iam:CreateVirtualMFADevice", "iam:DeactivateMFADevice", "iam:ChangePassword", "iam:CreateLoginProfile", "iam:DeleteLoginProfile", "iam:GetLoginProfile", "iam:UpdateLoginProfile" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } • AWSコンソールログインを制御する「must-mfalogin」のIAMポリシーの設定内容になります。
  29. 29. IAMグループに割り当てるIAMポリシー(5/5) { "Sid": "VisualEditor4", "Effect": "Deny", "Action": [ "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:DeleteVirtualMFADevice", "iam:CreateVirtualMFADevice", "iam:DeactivateMFADevice", "iam:ChangePassword", "iam:CreateLoginProfile", "iam:DeleteLoginProfile", "iam:GetLoginProfile", "iam:UpdateLoginProfile" ], "NotResource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ], "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } • AWSコンソールログインを制御する「must-mfalogin」のIAMポリシーの設定内容になります。
  30. 30. IAMロールに割り当てるIAMポリシー(1/4) • スイッチ後の作業用ロールに付与した「allow-dev-ec2」のIAMポリシーの設定内容になります。 { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/env": ”dev" } } }, 起動と停止操作が可能なEC2を リソースタグで制御するための Conditionを設定しています。 「env」というキーが「dev」と なっているマシンのみ操作可能。
  31. 31. IAMロールに割り当てるIAMポリシー(2/4) • スイッチ後の作業用ロールに付与した「allow-dev-ec2」のIAMポリシーの設定内容になります。 { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ssm:GetConnectionStatus", "ssm:DescribeSessions", "ssm:DescribeInstanceProperties" ], "Resource": "*“ },
  32. 32. IAMロールに割り当てるIAMポリシー(3/4) • スイッチ後の作業用ロールに付与した「allow-dev-ec2」のIAMポリシーの設定内容になります。 { "Sid": "VisualEditor2", "Effect": "Allow", "Action": "ssm:StartSession", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/env": “dev" } } }, 起動と停止操作が可能なEC2を リソースタグで制御するための Conditionを設定しています。 「env」というキーが「dev」と なっているマシンのみ操作可能。
  33. 33. IAMロールに割り当てるIAMポリシー(4/4) • スイッチ後の作業用ロールに付与した「allow-dev-ec2」のIAMポリシーの設定内容になります。 { "Sid": "VisualEditor3", "Effect": "Allow", "Action": "ssm:TerminateSession", "Resource": "arn:aws:ssm:*:*:session/${aws:username}-*" }
  34. 34. EC2に割り当てるIAMポリシー Session Manager用のカスタムIAMインスタンスプロファイルを作成する https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-create-iam-instance-profile.html "ssm:DescribeAssociation" "ssm:GetDeployablePatchSnapshotForInstance" "ssm:GetDocument" "ssm:DescribeDocument" "ssm:GetManifest" "ssm:GetParameters" "ssm:ListAssociations” "ssm:ListInstanceAssociations" "ssm:PutInventory" "ssm:PutComplianceItems" "ssm:PutConfigurePackageResult" "ssm:UpdateAssociationStatus" "ssm:UpdateInstanceAssociationStatus" "ssm:UpdateInstanceInformation“ "ec2messages:AcknowledgeMessage" "ec2messages:DeleteMessage" "ec2messages:FailMessage" "ec2messages:GetEndpoint" "ec2messages:GetMessages" "ec2messages:SendReply” "cloudwatch:PutMetricData“ "ec2:DescribeInstanceStatus“ "ds:CreateComputer" "ds:DescribeDirectories“ "ssmmessages:CreateControlChannel" "ssmmessages:CreateDataChannel" "ssmmessages:OpenControlChannel" "ssmmessages:OpenDataChannel“ "logs:CreateLogGroup" "logs:CreateLogStream" "logs:DescribeLogGroups" "logs:DescribeLogStreams" "logs:PutLogEvents“ "s3:GetBucketLocation" "s3:PutObject" "s3:GetObject" "s3:GetEncryptionConfiguration" "s3:AbortMultipartUpload" "s3:ListMultipartUploadParts" "s3:ListBucket" "s3:ListBucketMultipartUploads" • EC2に付与した「AmazonEC2RoleforSSM(廃止予定)」のIAMポリシーで許可されているActionになります。 「AmazonSSMManagedInstanceCore (今後の推奨)」では、S3とCloudWatch Logsへのログ出力に必要なIAMアクセス 権限が足りない。※黄色の部分
  35. 35. SSH over Session Managerの設定 $ brew install awscli $ aws --version aws-cli/2.0.12 Python/3.8.2 Darwin/18.2.0 botocore/2.0.0dev19 $ aws configure --profile test_ssm_user AWS Access Key ID [********************]: <アクセスキーを入力> AWS Secret Access Key [********************]: <シークレットアクセスキーを入力> Default region name [ap-northeast-1]: ap-northeast-1 Default output format [None]: $ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip" $ unzip sessionmanager-bundle.zip $ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin $ session-manager-plugin --version 1.1.61.0 $ vi /Users/XXXXXXX/.ssh/config # SSH over Session Manager host i-* mi-* ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p’” $ cd /Users/XXXXXXX/Downloads $ chmod 600 ssm_test.pem $ ssh -i ~/Downloads/ssm_test.pem ec2-user@i-0d624444444444 -v ① ② ③ ④ • ①AWS CLI導入、②クレデンシャル設定、③プラグイン導入、④SSH設定、⑤SSHキー配置の順に設定します。 ⑤
  36. 36. サブスクリプションフィルタ改修方法(1/7) • 最初に作成したサブスクリプションフィルタで生成されたLambda関数からコードをコピーしておきます。
  37. 37. サブスクリプションフィルタ改修方法(2/7) • ElasticsearchのIndex名を定義している②のcwlを任意のインデックス名に変更します。 ① ②
  38. 38. サブスクリプションフィルタ改修方法(3/7) • 新規でLambda関数を作成します。
  39. 39. サブスクリプションフィルタ改修方法(4/7) • 関数名(任意でOK)、ランタイム(Node.js 10.x)で一から関数を作成します。 ① ② ③
  40. 40. サブスクリプションフィルタ改修方法(5/7) • インデックス名変更したコードを貼り付けます。
  41. 41. サブスクリプションフィルタ改修方法(6/7) • CloudWatch Logsの2つ目のロググループをトリガーとして追加します。 ① ② ③ ④
  42. 42. サブスクリプションフィルタ改修方法(7/7) • 設定保存すれば完了です。CloudWatch Logs側もサブスクリプションフィルタがされているはずです。
  43. 43. Slack通知に利用したLambdaの設定(1/8) • 新規でLambda関数を作成します。
  44. 44. Slack通知に利用したLambdaの設定(2/8) • 「cloudwatch-alarm-to-slack-python」の設計図を設定します。 ① ②
  45. 45. Slack通知に利用したLambdaの設定(3/8) • WebhookURLを暗号化しない場合は、基本的なLambdaアクセス権限のIAMロールを作成します。
  46. 46. Slack通知に利用したLambdaの設定(4/8) • Slackのincoming Webhookの設定から取得したURLを環境変数(WEBHOOK_URL)に設定します。 SlackのWebhook URL取得手順 https://qiita.com/vmmhypervisor/items/18c99624a84df8b31008 ① ②
  47. 47. Slack通知に利用したLambdaの設定(5/8) • 以下、AWSコンソールログインの場合のPythonコードになります。 import json import os import logging from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): webhook_url = os.environ['WEBHOOK_URL'] message = 'AWSコンソールログインを検知しました。' slack_message = { 'username': 'AWS Console Login Event Notification', 'icon_emoji': ':logo_amazon_aws:', 'text': message, 'attachments': [ { 'fallback': 'AWS Console Login Event Description.', 'color': 'good', 'title': event['detail']['eventType'], ‘title_link’: https://xxxxxxxxxx',
  48. 48. Slack通知に利用したLambdaの設定(6/8) • 以下、AWSコンソールログインの場合のPythonコードになります。 'fields': [ { 'title': 'Account ID', 'value': event['account'], 'short': True }, { 'title': 'Region', 'value': event['detail']['awsRegion'], 'short': True }, { 'title': 'Event Time', 'value': event['detail']['eventTime'], 'short': True }, { 'title': 'User Name', 'value': event['detail']['userIdentity']['userName'], 'short': True }, { 'title': 'Source IP Address', 'value': event['detail']['sourceIPAddress'], 'short': True }, { 'title': 'MFA Used', 'value': event['detail']['additionalEventData']['MFAUsed'], 'short': True },
  49. 49. Slack通知に利用したLambdaの設定(7/8) • 以下、AWSコンソールログインの場合のPythonコードになります。 { 'title': 'Auth Results', 'value': event['detail']['responseElements']['ConsoleLogin'], 'short': True } ] } ] } req = Request(webhook_url, json.dumps(slack_message).encode('utf-8')) try: response = urlopen(req) response.read() logger.info("Message posted.") except HTTPError as e: logger.error("Request failed: %d %s", e.code, e.reason) except URLError as e: logger.error("Server connection failed: %s", e.reason)
  50. 50. Slack通知に利用したLambdaの設定(8/8) • 関数コードに貼り付けて保存します。
  51. 51. CloudWatch Eventsのイベントパターン(1/2) • CloudWatch Eventsのルールを作成する際にターゲットに作成したLambda関数を指定します。 ① ②
  52. 52. CloudWatch Eventsのイベントパターン(2/2) • ルールの名前(任意でOK)を入力すれば完了になります。
  53. 53. 【参考】 ConsoleLoginのサンプルログ(CloudTrail) { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDATCE2DIFWFQUSJBAGB", "arn": "arn:aws:iam::123456789012:user/h_hibino", "accountId": “123456789012", "userName": “h_hibino" }, "eventTime": "2020-06-23T23:55:18Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": “ap-northeast-1", "sourceIPAddress": “xxx.xxx.xxx.xxx", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36", "requestParameters": null, "responseElements": { "ConsoleLogin": "Success" }, "additionalEventData": { "LoginTo": "https://us-east-2.console.aws.amazon.com/console/home?region=us-east-2&state=hashArgs%23&isauthcode=true", "MobileVersion": "No", "MFAUsed": "Yes" }, "eventID": "907fcb50-2dbf-4a55-b562-e9315a86511c", "eventType": "AwsConsoleSignIn", "recipientAccountId": "210776572268" }
  54. 54. 【参考】StartSessionのサンプルログ(CloudTrail) { "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROATCE2DIFWL3AYFWGB5:h_hibino", "arn": "arn:aws:sts::210776572268:assumed-role/Dev_Switch_Role/h_hibino", "accountId": “123456789012", "accessKeyId": “xxxxxxxxxxxxxxxxxxxxxxxx", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROATCE2DIFWL3AYFWGB5", "arn": "arn:aws:iam::123456789012:role/Test_Switch_Role", "accountId": "123456789012", "userName": “Dev_Switch_Role" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "true", "creationDate": "2020-05-22T05:15:32Z" } } }, "eventTime": "2020-05-22T05:18:33Z", "eventSource": "ssm.amazonaws.com", "eventName": "StartSession", "awsRegion": “ap-nourtheast-1", "sourceIPAddress": “xxx.xxx.xxx.xxx", "userAgent": "aws-internal/3 aws-sdk-java/1.11.776 Linux/4.9.184-0.1.ac.235.83.329.metal1.x86_64 OpenJDK_64-Bit_Server_VM/25.252-b09 java/1.8.0_252 vendor/Oracle_Corporation", "requestParameters": { "target": "i-0d622f76f722de6b1" }, "responseElements": { "sessionId": “h_hibino-05593fa2edf884c0f", "tokenValue": "Value hidden due to security reasons.", "streamUrl": "wss://ssmmessages.us-east-2.amazonaws.com/v1/data-channel/test_hibino-05593fa2edf884c0f?role=publish_subscribe" }, "requestID": "1ff9865a-3342-4ed2-a524-36cbf932dd81", "eventID": "805d1591-56ff-473f-bbe0-d8a27fe9fb6b", "readOnly": false, "eventType": "AwsApiCall", "recipientAccountId": “123456789012" }
  55. 55. 参考にしたURL集 IAMユーザにMFA設定を強制するにあたりiam:ListUsersが必須では無くなった話 http://blog.serverworks.co.jp/tech/2019/04/02/mysecuritycredentials/ IAMアカウントをIPアクセス制限するときの注意点 https://dev.classmethod.jp/articles/iam-account-ipaddress-restriction/ Switch Roleを利用して、同一アカウントでRoleを切り替える https://techblog.lclco.com/entry/2018/10/31/091837 AWS リソースへのアクセスの制御 https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_tags.html インスタンスへのユーザーセッションアクセスを制御する https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-restrict-access.html SSM セッションマネージャーでサーバー上の操作ログを取得 https://dev.classmethod.jp/articles/recording_session_logs_via_ssm/ AWS Systems Manager Session Managerのシェル操作をログ出力する https://dev.classmethod.jp/articles/log-ssm-session-manager-for-shell-access-activity/#toc- Session Manager を通して SSH 接続を有効にする https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html AWS Systems Manager セッションマネージャーのログ出力設定変更を制限する https://ceblog.mediba.jp/post/178915482142/ インスタンスタグに基づいてアクセスを制限する https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-restrict-access-examples.html

×