みなさん、こんにちは。スカイゲートテクノロジズのサイバー事業部です。弊社のプロダクト開発では、AWSをはじめGCPやAzureをマルチクラウドで利用しています。AWSは国内では最も利用例が多いのでないでしょうか?(推測)今日は、AWSを初めて触る方やスモールチームで運用されている方を対象に、AWSのセキュリティの「最低限これだけやっておこう!」の紹介です。<GCP編はこちら>%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fwww.skygate-tech.com%2Fblog%2Fbasic-GCP-security-setting-jp%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FPD4IuUr%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3Eルートアカウントを保護するAWSのルートアカウントとは、AWSアカウントを最初に作成した時にサインアップしたEメールとパスワードによるアカウントです。Root Userなどとも呼ばれます。ルートアカウントは、作成したAWSアカウントの全リソースに対してアクセス権を持つため、とにかくこのアカウントを保護するのは絶対必須であることがよく知られています。多要素認証を有効にする「認証情報」→「Multi-Factor Authentication」から必ず有効にしてください。Multi-Factor Authentication(MFA)の有効化では、「仮想MFAデバイス」、つまりQRコードを読み込んでコードを表示するTOTPアプリを用います。Microsoft Authenticator, IIJ SmartKey, Google Authenticator などがあります。既に社内でAzureなどを使われている場合にはMicrosoft Authenticatorが、そうでなければ機種変の際に簡単にデータ移行できるIIJ Smart Keyがおすすめです。App Store%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fapps.apple.com%2Fjp%2Fapp%2Fmicrosoft-authenticator%2Fid983156458%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2Fe418dZ6%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fapps.apple.com%2Fjp%2Fapp%2Fiij-smartkey%2Fid974476420%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2F4iMu97F%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3EGoogle Play%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.azure.authenticator%26amp%3Bhl%3Den_US%26amp%3Bgl%3DUS%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FNDK7bBc%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Djp.ad.iij.smartkey2%26amp%3Bhl%3Den_US%26amp%3Bgl%3DUS%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FluJkmwy%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E「当たり前」をしっかりやるパスワードは長く推測が困難で、かつ絶対に他で使いまわしていないものを利用しましょう。新しいNIST(米国国立標準技術研究所)の基準ではパスワードの定期変更は非推奨になったものの、こういった最上位権限を持つアカウントの場合には、定期的なパスワード変更も有効な手段です。また、特段の理由がない限り、アクセスキー(Access Key ID とSecret Access Key)の発行は行わないでください。万が一漏洩したリスクが大きく、開発用途としては不向きです。AWS CloudTrailを有効にするAWSアカウントのイベントは、AWS CloudTrailによって90日間分の履歴が保存されています。インシデントの発見や対処のために、Cloud Trailのレコードはしっかりと保存しておくことをお勧めします。監査証跡(Trail)はAmazon S3に簡単に記録することができます。CloudTrailの画面から「Trails」→「Create Trail」でS3への保存設定やCloudWatch Logsへの送信を設定することができます。なお記録するログの対象ですがManagement events(管理イベント)Data events(データイベント)Insights events(インサイトイベント)の3つを設定することができます。管理イベントでは、AWS KMSのイベントとAmazon RDS のData APIイベントを除外することができます。KMSは暗号化や複合化処理が書き込みイベント(Write)として記録されるため、非常に大容量となる場合があります。また、RDSについても大量のイベントが生じる可能性がるため、除外することができます。ただし、SQLステートメントの監査などのためにも記録しておくことが望ましいでしょう。データイベントでは、S3バケットのログ、Lambdaなどのリソースのデータイベントを記録できます。S3バケットログは記録しておくほうが良いでしょう。インサイトイベントは、CloudTrail Insightsのイベントログの記録のことを指します。APIコールレートやエラーレートなどを記録することで、異常なアクティビティイベントが生じたケースとして証跡に保存しておくことができます。コンソールでこれらの作業を行うと、自動的に有効にした全てのAWSリージョンのイベントをログに記録する証跡となります。リージョン関係なく保存されるので安心ですね。開発用アカウントを安全に運用する従来であれば、開発用アカウントは、IAMユーザーとして作成し、コンソールにサインインしたり、アクセスキー/アクセスシークレットを用いてAPIアクセスを行なっていました。しかし、この方法では、IAMユーザーのこまめな管理や棚卸しが必要であり、アクセスキーの有効期限やローテーションも気にする必要がありました。特に、シークレットは一度漏洩すればすぐに攻撃や不正利用が発生する恐れがあるため、こまめな更新を行いたいところですが、煩雑です。開発用アカウントは、IAMユーザではなくSAMLとSTSを用いるそこで登場するのが、SAMLフェデレーションによるシングルサインインとAssume Role、そしてSTS(Security Token Service)の利用です。Assume RoleやSTSの細かい説明は省きますが、簡単に言えば、SAMLによってGoogle WorkspaceやAzure ADからAWSにサインインするAssumeRoleによってコンソールアクセスする開発ではSTSによって一時的なアクセスキーを利用するという3つで開発などを進める方法です。AWSの認証やフェデレーションには様々なユースケースと技術的な手段がありますが、とりあえず、AWSの運用初期段階であったり、スモールチームであれば、これで十分、かつ鉄板です。IAMユーザーの作成は不要ですし、STSによってトークンは有効期限があるため、IdPによるSAMLの利用:Google Workspaceの場合Google WorkspaceをIdP(IDプロバイダー)にすることで、Google Workspaceの1アプリケーションとして、GoogleからAWSにサインインできるようにする場合です。詳しくは、こちらの記事を読んでください。%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fwww.skygate-tech.com%2Fblog%2Fsaml-single-sign-on-to-aws-with-google-workspace-jp%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2F3lD4moQ%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3ESTSでトークンを取得するには?AWS CLIでも同様にSAMLフェデレーションで認証情報を取得するのは結構面倒なのですが、saml2awsを使うことで、ほとんどのIdPで簡単に認証情報を取得することができます。インストール方法は、GitHubのREADMEを読んでいただくとして、セットアップは$ saml2aws configureをタイプして、プロンプトの通り入力するだけです。設定以降は$ saml2aws loginと叩くだけで、自動的に認証とSTSの認証情報取得が走ります。成功したかどうかは$ aws --profile saml ec2 describe-instances --region ap-northeast-1で確認してください。以後、AWS CLIやローカルのSDKの利用の場合には、このプロファイルを指定することで、そちらを見るようになります。認証情報の有効期間は 43200秒=12時間などに設定しておけば、毎朝、仕事を始める前にログインするだけで1日認証情報が有効になります。いかがだったでしょうか?AWSを初めて触る場合やスモールチームで運用されている場合、セキュリティまで目が行き届かないことがほとんどだと思います。一方で、アクセスキーなどが漏えいすると、不正に利用されて多額の請求が生じることもあります。また、開発を外部に委託している場合でも、インフラのセキュリティは漏れがちです。ぜひこの記事を参考に、AWSのセキュリティを強化してください。わからないことがあったり、不安が残る場合は、弊社ではお客様のAWS環境のセキュリティハーデニングや運用支援などを実施しています。以下からお気軽にご相談ください!%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fwww.skygate-tech.com%2Fprofessional-service%2Fsre-cloud-security-dev-sec-ops%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FRAJV0IR%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E