yuj1osm's tech blog

クラウドやセキュリティなど

AWS Summit Japan 2024 参加まとめ

先日、幕張メッセで行われた「AWS Summit Japan 2024」に参加したので、その様子をご紹介します。

イベント概要

開催日時:2024 年 6 月 20 日(木)- 21 日(金)
会場:幕張メッセ
参加費用:無料

AWS Summit は、クラウドコンピューティングコミュニティが一堂に会して、アマゾン ウェブ サービス (AWS) に関して学習し、ベストプラクティスの共有や情報交換ができる、全てのクラウドイノベーションを起こすことに興味がある皆様のためのイベントです。

150以上のセッションや250以上の展示ブース、そのほかにも様々なコンテンツが用意されています。

aws.amazon.com

会場入り

幕張メッセに入ると大きなボードが登場します。

受付で基調講演の指定席券と昼食の引換券がもらえます。
いつもは自由席ですが、今年は指定席になったようです。

席には座布団が置かれており持って帰ることができます。
今年はバンドが付いていて折りたためる仕様でした。
会期中は様々なグッズがもらえるので、コンパクトに収納できるのは嬉しいポイントです。

基調講演会場ではオープニングDJが流れており、テンションが上がります。

基調講演

まずは、APJ バイスプレジデント & マネージングディレクター 兼 日本マネージングディレクター である ハイミ バレス氏のご挨拶です。
これからも日本市場へ力を入れていくとのことです。

続いて、最高技術責任者(CTO)兼バイスプレジデント の ヴァーナー ボーガス氏のセッションです。
私は昨年のre:Inventでヴァーナー氏のセッションを現地で聴きましたが、歴史的な背景などを織り交ぜた引き込まれるようなお話を聞くことができます。
日本でヴァーナー氏のお話しが聴けるのは非常に珍しく、とても良い機会でした。

  • プラトンアリストテレスの時代から自動化の考えはあった
  • 初期のエキスパートシステムから、深層学習や強化学習などの考え方が登場し、昨今ではLLMが頭角を現している
  • LLMはまだ始まりに過ぎず、AIでどのようなことを実現していくのかを考えることが大事
  • 良いAIには良いデータが必要であり、良い仕事には良い人材が必要
  • 農業、ドローン、医療などへのAI技術の活用事例を紹介

昨年は「セキュリティの民主化」が話題でしたが、加えて「データの民主化」も重要なキーワードになりそうです。
高い視点で課題を見つめ、AI技術を活用する方法を検討する力が必要になることを感じました。

続いて、Anthropicの共同創設者 兼 チーフサイエンティスト である ジャレッド カプラン氏の登壇です。
Anthropicの研究やセキュリティへの取り組み、Claude3の紹介がありました。

そして、AWSジャパン執行役員 の 恒松 幹彦氏より、様々な発表がありました。

  • Anthropic の Claude3 が東京リージョンで利用可能
  • Amazon Q Business 日本語版リリース
  • 新しい資格、AIFとMLAの発表
  • AWS生成AI実用化推進プログラムを発表

やはり、基調講演から生成AIが満載でした。

会場の様子

とても広い会場に、たくさんのセッション会場や企業ブースが盛り上がりを見せていました。

認定者ラウンジは昨年より広くなっていました。

AWS DeepRacerの会場では、今年もアツいレースが繰り広げられていました。

映えスポットもあります。

Chaos Kittyの体験もしてきました。
ブロックと IoT 電球でできた物理的なアーキテクチャは、AWS環境におけるシンプルな三層構造のWeb アプリを表しています。
設定が変更されたときは IoT 電球の色が緑 (安全) から赤 (設定違反) に変わるため、全て緑になるようにAWSコンソールから設定を変更していきます。

AWS Snowballの実物を持つことができました。

おわりに

今年のAWS Summitも非常に楽しめました。
やはり生成AIに関する話題が多かったように思います。
多くの企業が生成AIを使ったサービスを出しており、生成AIがどんどん普及して当たり前のようにサービスに組み込まれていることを実感しました。
以上、簡単ですがAWS Summit Japan 2024の様子をご紹介させていただきました。

Amazon GuardDuty Malware Protection for Amazon S3 がリリースされました

AWS re:Inforce 2024にて、Amazon GuardDuty Malware Protection for Amazon S3 がリリースされましたので、早速検証してみました。

aws.amazon.com

aws.amazon.com

アップデート概要

  • GuardDuty Malware Protection の拡張機能で、選択した S3 バケットへの悪意のあるファイルのアップロードを検出

  • GuardDutyが有効になっていない場合、GuardDuty Malware Protection for Amazon S3機能のみの有効化もできる

  • スキャンしたオブジェクトにはGuardDutyMalwareScanStatusというタグが付与され、タグの値によって脅威と判定されたか分かる
    タグの値は以下の通り

    • NO_THREATS_FOUND : 潜在的な脅威を検出しなかった
    • THREATS_FOUND : 潜在的な脅威を検出した
    • UNSUPPORTED : 当該オブジェクトのスキャンをサポートしていない
    • ACCESS_DENIED : オブジェクトにアクセスできない
    • FAILED : マルウェアスキャンを実行できない

タグの詳細は以下のドキュメントにも記載があります docs.aws.amazon.com

  • 料金はオブジェクトのサイズと数による従量課金 料金は以下の通り
    • 1カ月のファイルサイズにおいて $0.79 / GB
    • 1カ月のファイル数において $0.282 / 1k

aws.amazon.com

Malware Protection for Amazon S3を有効化

GuardDutyの「S3のMalware Protection」から「S3のMalware Protectionを有効化」を押下します。

スキャン対象のS3バケットは「S3バケット内のすべてのオブジェクト」、タグ付けは「オブジェクトにタグを付ける」を選択します。
Malware Protection for Amazon S3機能のためのIAMロールを作成します。
「アクセス許可を表示」を押下します。

IAMロールに必要なポリシーが表示されるので、これらをコピーしておきます。

参考までにポリシーと信頼関係は以下のようになっています。

ポリシー

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowManagedRuleToSendS3EventsToGuardDuty",
      "Effect": "Allow",
      "Action": [
        "events:PutRule",
        "events:DeleteRule",
        "events:PutTargets",
        "events:RemoveTargets"
      ],
      "Resource": [
        "arn:aws:events:ap-northeast-1:3<accountID>:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
      ],
      "Condition": {
        "StringLike": {
          "events:ManagedBy": "malware-protection-plan.guardduty.amazonaws.com"
        }
      }
    },
    {
      "Sid": "AllowGuardDutyToMonitorEventBridgeManagedRule",
      "Effect": "Allow",
      "Action": [
        "events:DescribeRule",
        "events:ListTargetsByRule"
      ],
      "Resource": [
        "arn:aws:events:ap-northeast-1:<accountID>:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
      ]
    },
    {
      "Sid": "AllowPostScanTag",
      "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging",
        "s3:GetObjectTagging",
        "s3:PutObjectVersionTagging",
        "s3:GetObjectVersionTagging"
      ],
      "Resource": [
        "arn:aws:s3:::test-s3mal-bucket/*"
      ]
    },
    {
      "Sid": "AllowEnableS3EventBridgeEvents",
      "Effect": "Allow",
      "Action": [
        "s3:PutBucketNotification",
        "s3:GetBucketNotification"
      ],
      "Resource": [
        "arn:aws:s3:::test-s3mal-bucket"
      ]
    },
    {
      "Sid": "AllowPutValidationObject",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::test-s3mal-bucket/malware-protection-resource-validation-object"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::test-s3mal-bucket"
      ]
    },
    {
      "Sid": "AllowMalwareScan",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::test-s3mal-bucket/*"
      ]
    },
    {
      "Sid": "AllowDecryptForMalwareScan",
      "Effect": "Allow",
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:ap-northeast-1:<accountID>:key/<key_id>",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "s3.*.amazonaws.com"
        }
      }
    }
  ]
}

信頼関係

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "malware-protection-plan.guardduty.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

続いて、IAMロールを作成します。
エンティティタイプはカスタム信頼ポリシーとし、コピーした信頼関係をペーストします。

ポリシーはいったんロールを作成し後にインラインポリシーとして追加します。
ロール名を入力しロールを作成します。

インラインポリシーのアクセス許可で、コピーしたポリシーをペーストします。

ポリシー名を入力しポリシーを作成します。

S3のMalware Protectionを有効化の画面に戻り、作成したIAMロールを選択し、「有効にする」を押下します。

S3のMalware Protectionが有効化されました。

スキャン状況の監視ができるようです。

IAMポリシーではS3とEventBridgeへの権限がありました。
そこで、EventBridgeを確認してみると、「DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3-<文字列>」というルールが作成されています。
イベントパターンとターゲットを見ると、S3バケットにオブジェクトが作成されたらguardduty-malware-protection-planが起動して、スキャンが行われる仕組みのようです。

マルウェアを検知させる

S3バケットにeicarファイルをアップロードします。
ちなみに、S3のMalware Protectionが有効化したときに「malware-protection-resource-validation-object」というテストファイルも自動作成されているようです。

モニタリングを見ていると、スキャンされており感染判定されていることを観測できます。

eicarファイルには「GuardDutyMalwareScanStatus : THREATS_FOUND」というタグが付いており、潜在的な脅威を検出したと判定されていることが分かります。

ちなみに、有効化時に作られた「malware-protection-resource-validation-object」というテストファイルのタグを見てみると、「GuardDutyMalwareScanStatus : NO_THREATS_FOUND」というタグが付いており、潜在的な脅威と判定されなかったことが分かります。

検出結果の確認

それでは検出結果を見ていきます。
GuardDutyの「検出結果」を見ると、重要度「高」で検出結果タイプが「Object:S3/MaliciousFile」が検出されています。

詳細を見ると、検出理由やオブジェクトの情報が表示されています。

マルウェアから保護する

スキャン後にオブジェクトにタグ付けが行われるので、タグベースのアクセス制御 (TBAC) をバケットポリシーに仕込むことで、アクセス元からマルウェアを隔離できます。

docs.aws.amazon.com

ポリシー例があるので、S3バケットポリシーに設定します。

タグが「GuardDutyMalwareScanStatus": "NO_THREATS_FOUND"」以外のオブジェクトへのアクセスを拒否するという内容です。

タグベースのアクセス制御 (TBAC) をバケットポリシー例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "NoReadExceptForClean",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": [
                    "arn:aws:iam::555555555555:root",
                    "arn:aws:iam::555555555555:role/IAM-role-ARN",
                    "arn:aws:iam::555555555555:assumed-role/role-ARN/GuardDutyMalwareProtection"
                ]
            },
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "s3:ExistingObjectTag/GuardDutyMalwareScanStatus": "NO_THREATS_FOUND"
                }
            }
        },
        {
            "Sid": "OnlyGuardDutyCanTag",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": [
                    "arn:aws:iam::555555555555:root",
                    "arn:aws:iam::555555555555:role/IAM-role-ARN",
                    "arn:aws:iam::555555555555:assumed-role/role-ARN/GuardDutyMalwareProtection"
                ]
            },
            "Action": "s3:PutObjectTagging",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
}

試しに無害のファイルをS3バケットにアップロードします。

こちらは「GuardDutyMalwareScanStatus : NO_THREATS_FOUND」でした。

AWS CloudShellでローカルコピーしてみると、eicarファイルだけブロックされました。

$ aws s3 cp s3://test-s3mal-bucket/test.txt ./
download: s3://test-s3mal-bucket/test.txt to ./test.txt           
$ aws s3 cp s3://test-s3mal-bucket/eicar.com ./
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

まとめ

Amazon GuardDuty Malware Protection for Amazon S3 を試してみました。
検出だけでなく、隔離の仕組みを簡単に実装できるのは嬉しい点です。

ユースケースとしては、不特定多数のユーザがS3バケットへファイルをアップロードできるようなアプリケーションで効果を発揮すると思います。
一方で、ログ保存など内部で使われていて、不特定多数のユーザからアップロードする余地のないS3バケットには、無理に設定する必要はなさそうです。
用途に応じて活用しましょう。

タグの付与やEventBridgeを自由にカスタマイズできるので、運用者に通知メールを送ったり、他のバケットへ隔離するといったこともできそうです。
要件に応じて柔軟に設計すると良いでしょう。

GuardDutyの活用範囲もどんどん増えているので、ぜひ活用してみてください。

AWS IAM Access Analyzer が未使用のアクセスを改善するための推奨事項を提供

AWS re:Inforce 2024にて、AWS IAM Access Analyzer が未使用のアクセスを改善するための推奨事項を提供するようになりました。

aws.amazon.com

aws.amazon.com

アップデート概要

  • 昨年、未使用のアクセスの検査機能が登場

  • 今回のアップデートにより、未使用のアクセスを修正するための実用的な推奨事項を提供するようになった

未使用のアクセスアナライザーを作成

IAMのアクセスアナライザーから「未使用のアクセス」を選択し、アナライザーを作成します。

分析タイプを「未使用のアクセス分析」にし、その他はデフォルトのままアナライザーを作成します。

検出結果を確認

しばらく待つと、未使用のアクセス一覧が検出されます。

「未使用のIAMロール」を確認すると、詳細な推奨事項を確認できます。
今回の例では、当該ロールの確認や削除が推奨されています。

「未使用の許可」を確認すると、ポリシーの修正案を提示してくれます。

Previewボタンを押下すると、修正案のビフォー/アフターも確認できます。

まとめ

具体的な修正案を提示してくれるため、開発者が未使用のアクセス許可を調整することがより簡単になりました。
特に、AWSを使い続けていると気付かぬうちにIAMロールが増えていることが多いので、これを機に棚卸してみると良いかもしれません。

AWS IAM の MFA でパスキーが使えるようになりました

AWS re:Inforce 2024が始まり、セキュリティ関連のアップデートが増えてきました。
IAMのMFAでパスキーが使えるようになりましたので、検証してみました。

aws.amazon.com

aws.amazon.com

アップデート概要

  • ルートユーザとIAMユーザのMFA(多要素認証)でパスキーが使えるようになった

  • Apple MacBook の Touch ID や Windows Hello 顔認識などの組み込み認証システムなどをサポートしている

パスキーを登録

IAMで任意のユーザを作成します。
「セキュリティ認証情報」タブから「MFAデバイスの割り当て」を押下します。

「パスキーまたはセキュリティキー」を選択します。

今回はスマホQRコードを撮影し、パスキーを登録してみました。
画面の指示通りに操作するとパスキーを登録できます。

パスキーによるログイン

一度IAMユーザをログアウトし、再度ログインしてみます。

パスキーが求められるようになりました。

バイスに表示される手順通りに認証手続きをすると、AWSマネジメントコンソールにログインできました。

まとめ

パスキーによってより強固な認証ができそうです。
前述のニュースブログに記載の通り、最初のリリースではパスワードとパスキーの併用が必要になる点は注意です。

Amazon CloudWatch が生成AI を活用した自然言語クエリ生成をサポート

Amazon CloudWatch が生成AI を活用した自然言語クエリ生成をサポートしたので、検証してみました。

aws.amazon.com

なお、こちらは昨年にプレビューが出ており、今回一般提供になりました。

aws.amazon.com

アップデート概要

  • Logs Insights と Metrics Insights 向けに、生成 AI を活用した自然言語クエリ生成ができるようになった

自然言語でクエリを生成してみる

CloudWatchのログのインサイトを見ると、クエリを記載するところに「Query generator」のボタンがるので押下します。

自然言語で調査したい内容を記載し、「新しいクエリを生成」を押下するとクエリが生成されます。

まとめ

簡単にクエリを生成できるため、クエリ作成経験が浅くても簡単にログを調査できるようになると思います。
生成AI技術の発達により、今後もクエリ生成関連のアップデートが増えてくると考えられるので、今後の生成AI系アップデートに期待です。

AWS Organizations でメンバーアカウントのルートメールアドレスを一元管理できるようになりました

AWS Organizations でメンバーアカウントのルートメールアドレスを一元管理できるようになったので、検証してみました。

aws.amazon.com

アップデート概要

  • 従来は、各メンバーアカウントにルートユーザでログインしないと、ルートメールアドレスを変更できなかった

  • 今回のアップデートにより、AWS Organizations の管理アカウントからメンバーアカウントのルートメールアドレスを一元管理できるようになった

管理アカウントからメールアドレスを変更してみる

AWS OrganizationsのAWSアカウントから変更対象のアカウントを押下します。

「アクション」より「Eメールアドレスを変更」を押下します。

新しいEメールアドレスを入力すると、メールアドレス宛に認証コードが届きます。

届いた認証コードを入力します。

変更が完了すると、管理アカウントと変更対象のメンバーアカウントそれぞれのEメールアドレス宛に変更通知メールが届きます。

メンバーアカウント側で、古いEメールアドレスを使ったルートログインをすると想定通りログインできません。

新しいEメールアドレスを使ったルートログインをするとログインできます。
パスワードは古いEメールアドレスで使っていたものを引き継いでいます。
また、メンバーアカウントのアカウント情報からも、Eメールアドレスが変更されていることを確認できます。

まとめ

管理アカウントから簡単にメンバーアカウントのルートメールアドレスを変更できました。
従来では、複数のメンバーアカウントでメールアドレスを変更する場合、各メンバーアカウントにログインして変更する必要がありました。
今回のアップデートにより、メンバーアカウントの管理がより一層楽になりました。

re:Invent 2023のハンズオンセッション参加レポート

ラスベガスで開催されたAWS re:Invent 2023のハンズオンセッションについてご紹介します。

ハンズオンセッションとは

re:Inventでは多くのハンズオンセッションが用意されており、AWSサービスを応用した開発や最新機能をいち早く試せるので、手を動かして学びたい人にとって非常におすすめです。
ハンズオンは「AWS Workshop Studio」を利用し、一時的なAWSアカウントと手順書で行うので、料金の心配はなく気軽に参加できます。

ハンズオンセッションにはいくつか種類があり、以下のようなものがあります。

Builders' Session

少人数の参加者にAWSの技術者がつき、直接解説を受けることができます。

Workshop

大人数の参加者がおり、前半に説明があり、後半に各自でハンズオン形式で進めていきます。

Game Day

その場に居合わせた参加者3~4名でチームを組み、与えられた課題を解いていく競技形式です。

ハンズオンセッションのご紹介

今回体験したハンズオンをいくつかご紹介します。

SEC303: Container thread detection with AWS security services

Builders' Session形式のハンズオンセッションです。
AWSセキュリティサービスを使って、コンテナの脅威を検出したり、修正をデプロイする方法を学びます。

最初に、Security HubやConfigの見方を学びます。

その後、ConfigでEKSの脆弱性を検知するルールを作成します。

ルールをいくつか作った後、今度はKubescapeをSecurity Hubと統合してEKS監視する手法を学びます。
これにより、EKSの脆弱性を検知できたので、次にこれらをCI/CDで修正していく作業になります。

Code PipelineにInspectorを統合し、パイプラインを実行します。

脆弱なDockerfileベースイメージなので、パイプラインは失敗するようになっています。

Dockerfileベースイメージを編集し、別のパブリックイメージからNodejsを構築したり、更新したりして脆弱性を消し込んでいきます。

最終的にパイプラインが成功したら達成です。

ENT307: The Microsoft on AWS adventure game

Workshop形式のハンズオンセッションです。
AWS環境を国と見立てて、魔物から守るための国の構築をゲーム形式で実施します。
Microsoft製品をふんだんに使ったワークショップのため、AWSMicrosoft製品の両方を学ぶことができます。

Windows Server、Windows File Sever、SQL Server などを構築しAD連携します。
タスクをこなしていき、最終的に以下の構成図のものができます。

Managed Microsoft ADによる冗長化やOSメンテナスからの解放など、様々な気づきが得られます。

GHJ302: Network Topology Titans

Game Day形式のハンズオンセッションです。
その場で一緒になった人たちとチームを組み、企業のエンジニアとして雇われ、様々な課題を解決する内容です。
ネットワークサービスに特化した内容であり、本格的な構築やトラシューなどを体験できます。

まとめ

ハンズオンを通して、AWSサービスを応用したソリューション開発や新サービスの理解が一層深まりました。
手を動かしながら、質問やディスカッションができるため、現地参加の場合はぜひハンズオンセッションに参加してみてください。