🌩️

AWS Certified Security - Specialty 認定に合格

2024/09/29に公開

はじめに

AWS Certified Security - Specialty 認定を受験し合格できたので、これから試験を受ける人や、今後自分が更新する時のために勉強した内容(試験で問われるサービスについて)を残しておきます!

私について

  • アプリケーション開発の人。
  • AWSはよく触る。主にサーバーレスサービス。
  • 最近CDKが好き。

認定を取得した経緯と動機

  • スキルアップのため。

結果

  • 815/1000(750が合格ライン)

各サービスについて

CloudFormation

サービスロール

CloudFormationのService Roleは、CloudFormationがスタックリソースの作成、更新、削除をユーザーに代わって実行できるようにするためのIAMロールです。

  • 主な特徴:
    • ユーザーに十分なリソース操作権限を与えなくても、CloudFormationがスタックリソースを作成、更新、削除できるようにします。
  • 使用ケース:
    • 最小権限の原則を適用したい場合に役立ちます。すべての必要な権限をユーザーに直接与えることなく、CloudFormationを介してリソース操作を可能にします。
    • ユーザーには、CloudFormationがサービスロールを使用できるようにするための iam:PassRole の権限が必要です。

スタックポリシー

CloudFormation Stack Policies(スタックポリシー)は、CloudFormationスタックの更新中に特定のリソースに対して許可される更新アクションを定義するJSONドキュメントです。

  • デフォルトでは、CloudFormationスタックの更新中にすべてのリソースに対してすべての更新アクションが許可されます。
  • スタックポリシーを使用することで、意図しない更新からリソースを保護できます。
  • スタックポリシーを設定すると、スタック内のすべてのリソースがデフォルトで保護されます。
  • 明示的に許可したいリソースには、明確にALLOWを指定する必要があります。

例)ProductionDatabase以外のすべてのリソースに対して更新を許可。

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "Update:*",
      "Principal": "*",
      "Resource": "*"
    },
    {
      "Effect": "Deny",
      "Action": "Update:*",
      "Principal": "*",
      "Resource": "LogicalResourceId/ProductionDatabase"
    }
  ]
}

動的参照

CloudFormationの動的参照は、テンプレート内で外部に保存された値(SSM Parameter StoreやSecrets Managerに保存された値)を参照する機能です。

  • 動的参照を使用することで、CloudFormationはスタックの作成や更新時にこれらの外部値を取得します。
  • これにより、データベースの資格情報やパスワード、サードパーティAPIキーなどを安全に管理できます。
  • 例えば、Secrets ManagerからRDSデータベースのマスターパスワードを取得することが可能です。

サポートされるサービス:

  • ssm: SSM Parameter Storeに保存されたプレーンテキストの値を参照します。
  • ssm-secure: SSM Parameter Storeに保存されたセキュアストリングを参照します。
  • secretsmanager: Secrets Managerに保存されたシークレット値を参照します。

例)

MyS3Bucket:
  Type: 'AWS::S3::Bucket'
  Properties:
    BucketName: '{{resolve:ssm:/dev/s3/bucket-name}}'

削除保護(Termination Protection)

Termination Protectionは、CloudFormationスタックを誤って削除してしまうことを防ぐ機能です。

  • スタックに対して有効化すると、そのスタックを削除しようとしても失敗し、スタックの状態は変更されません。
  • デフォルトでは無効になっています。
  • スタックの作成時または既存のスタックに対して有効化できます。
  • DELETE_IN_PROGRESSまたはDELETE_COMPLETE状態以外のスタックに設定可能です。

Drift機能(差分検知)

CloudFormation Driftは、リソースが手動で変更された場合(ドリフト)、その差異を検出するための機能です。

  • CloudFormationはインフラを作成する際に使用されますが、手動で行われた設定変更(例えば、EC2コンソールからの変更)はCloudFormationによって保護されません。
  • このため、リソースが手動変更された場合に、どのようにドリフトを検出するかという問題が発生します。

CloudFormation Drift機能を使用すると、スタック全体またはスタック内の特定のリソースに対してドリフトを検出できます。テンプレートと現在のリソースの状態を比較することで、ドリフトが発生したかどうかを把握することができます。

この機能を活用することで、予期しない手動変更に対して迅速に対応でき、インフラの一貫性を保つことができます。

CloudFormation Guard (cfn-guard)について

cfn-guard validate -d template.yaml -r rules.guard --show-summary-pass
AWS::S3::Bucket {
  Properties {
    BucketEncryption.ServerSideEncryptionConfiguration[*] {
      ServerSideEncryptionByDefault.SSEAlgorithm == 'AES256'
      <<BucketEncryption not configured with the AES256 algorithm>>
    }
  }
}

CloudFormation Guard (cfn-guard) は、AWS CloudFormationテンプレートが組織のポリシーガイドラインに準拠しているかどうかを検証するためのオープンソースのCLIツールです。

  • cfn-guardを使うと、テンプレートに対して独自のポリシーをコードとして定義し、検証できます。ポリシーは宣言的なドメイン固有言語(DSL)で記述されます。
  • 組み込みのテストフレームワークが提供されており、定義したルールが意図通りに動作するかを確認できます。
  • テンプレートの構文自体の検証は行いませんが、CI/CDパイプラインの一部として利用可能です。

例えば、S3バケットが暗号化されていることを保証するポリシー(AES256 での暗号化を必須とする)を定義することができます。このようにして、クラウドインフラのコンプライアンスを自動的に維持できます。

CloudFront

特定の国からのトラフィックをブロックする

CloudFrontで特定の国からのインバウンドトラフィックをブロックするには、CloudFrontの地理的制限機能を使用します。より細かい制御にはAWS WAFなどの追加サービスが必要となります。

CloudHSM

CloudHSMは、AWSが提供するハードウェアセキュリティモジュール(HSM)サービスです。

KMSとの主な違い

  1. 専有vs共有: CloudHSMは顧客専用のハードウェアを提供するのに対し、KMSはマルチテナント環境で動作します。

  2. コントロールレベル: CloudHSMでは、ユーザーが完全にキーを制御できます。一方、KMSではAWSも一部管理に関与します。

  3. 用途: CloudHSMは主にコンプライアンス要件の厳しい環境や、SSL/TLS処理のオフロードなど、より高度なユースケースに適しています。

  4. 価格: CloudHSMはKMSと比較して高価です。

  5. AWSサービスとの統合: KMSは多くのAWSサービスと直接統合されていますが、CloudHSMは一部のサービスでのみ使用可能です。

CloudHSMは、より厳格なセキュリティ要件や完全なキー制御が必要な場合に適しており、KMSよりも高度な暗号化機能を提供します。ただし、その分コストが高く、管理も複雑になる傾向があります。

CloudTrail

CloudTrailのログ無効化を検出するための方法

  1. AWS Config Rulesを使用する:
    • AWS Configを利用して、CloudTrailが有効であることを継続的に監視することが可能です。AWS Configルール「cloud-trail-enabled」を設定することで、CloudTrailが無効化された場合に検知し、アラートを発することができます。
  2. Amazon CloudWatch Alarmsを設定する:
    • CloudTrailのログが無効化された際のイベント(CloudTrail停止や設定の変更)をAmazon CloudWatch Logsに送信し、それに基づいてアラームを設定します。このアラームにより、無効化の兆候をリアルタイムで把握することができます。
  3. Amazon SNSで通知を送信:
    • CloudWatchアラームをAmazon SNSに接続することで、管理者にメールやSMSで通知を送信することが可能です。これにより、ログ無効化が発生した際に迅速に対応することができます。
  4. AWS CloudTrail Insights:
    • CloudTrail Insightsを有効にすることで、異常なアクティビティ(例えば、突然のCloudTrail停止など)を検出し、異常を通知することができます。

組織のCloudTrail

  • AWS Organization内のすべてのAWSアカウントのイベントを記録するトレイル。
  • 管理アカウントとメンバーアカウントのイベントをログに記録。
  • 同じ名前のトレイルが各AWSアカウントに作成される(IAM権限)。
  • メンバーアカウントは組織トレイルを削除または変更できない(閲覧のみ)。

Config

Configルール

Configルールは、AWSリソースの設定を継続的に評価し、セキュリティやコンプライアンスの要件に準拠しているかどうかを確認するためのものです。

具体的なルール

  1. s3-bucket-public-read-prohibited: S3バケットがパブリックな読み取りアクセスを許可していないことを確認します。
  2. ec2-instance-no-public-ip: EC2インスタンスにパブリックIPアドレスが割り当てられていないことを確認します。
  3. cloudtrail-enabled: CloudTrailが有効化されていることを確認します。
  4. encrypted-volumes: EBSボリュームが暗号化されていることを確認します。
  5. vpc-flow-logs-enabled: VPCフローログが有効になっていることを確認します。
  6. iam-user-mfa-enabled: IAMユーザーに多要素認証(MFA)が有効化されていることを確認します。
  7. rds-instance-public-access-check: RDSインスタンスがパブリックにアクセス可能でないことを確認します。
  8. required-tags: 指定したタグがリソースに設定されていることを確認します。

自動修正機能

自動修正機能は、AWS Config ルールと連携して、設定がルールに違反したリソースを自動的に修正してくれる機能です。これにより、手動で修正する必要がなく、問題が発生しても迅速に対応できるようになります。

アグリゲーター

  • アグリゲーターは、1つの中央アカウントに作成され、他のアカウントからデータを収集します。
  • これにより、複数のアカウントやリージョンにまたがってルールやリソースを集約して管理できます。
  • AWS Organizationsを使用している場合、各アカウントごとに個別の許可を設定する必要はありません。
  • ルールは各ソースアカウントで作成され、CloudFormation StackSetsを使用して複数のターゲットアカウントにルールを展開できます。

Detective

概要

Amazon Detectiveは、AWSサービスのログデータを自動的に収集し、機械学習や統計的分析を用いて、セキュリティイベントの調査を支援するサービスです。主に以下の機能を持ちます。

  1. データ収集と統合:

    • DetectiveはAmazon GuardDuty、AWS CloudTrail、VPCフローログなどからデータを収集し、これらのデータを分析してセキュリティインシデントの原因を特定します。
    • これにより、複数のログソースからの情報を統合して、セキュリティインシデントに対する包括的な視点を提供します。
  2. 異常検出:

    • Detectiveは、収集したデータをもとに異常なアクティビティを検出し、それに関連する詳細な情報を提供します。例えば、通常のアクセスパターンと異なるアクセスが検出された場合、そのIPアドレスや関連するリソースに関する情報をすぐに確認できます。

EC2

EC2インスタンスがすぐに終了してしまう問題

  • EBSボリュームの上限を超えた場合。詳細はAmazon EC2インスタンスのAmazon EBSボリュームの上限を参照。
  • EBSスナップショットが破損している場合。
  • ルートEBSボリュームが暗号化されており、その復号のためのKMSキーへのアクセス権がない場合。
  • AMIのブロックデバイスマッピングで指定されたスナップショットが暗号化されており、その復号のためのKMSキーへのアクセス権がない、または復元されたボリュームを暗号化するためのKMSキーへのアクセス権がない場合。
  • 使用しようとしたインスタンスストア支持のAMIが必要なパーツ(image.part.xxファイル)を欠いている場合。

フォレンジック

フォレンジックとは、セキュリティインシデントが発生した際に、デジタル機器に残された証拠を収集・分析し、事象の解明を行う調査手法です。
EC2インスタンスに対してフォレンジックを行う場合、以下のような手順で実施します:

  1. 証拠の保全

    • EC2インスタンスのスナップショットを取得
    • インスタンスのメモリダンプを取得
  2. 証拠の分析

    • 取得したスナップショットやメモリダンプを専用ツールで解析
    • ログファイルの調査
    • マルウェアの痕跡を探索
  3. 報告書の作成

    • 分析結果をまとめ、インシデントの全容を報告

EC2インスタンスとロードバランサー間の SSL 接続を有効にしたい

Amazon EC2インスタンスとロードバランサー間のSSL接続を有効にする方法は以下の通りです:

  1. ロードバランサーの作成時にHTTPSリスナーを追加します:
  • ポート443でHTTPSリスナーを設定します。
  • AWS Certificate Manager (ACM)で発行したSSL証明書を選択します。
  1. ターゲットグループのプロトコルをHTTPSに設定します:
  • ターゲットグループを作成する際、プロトコルをHTTPSに設定します。
  • ポート443を指定します。
  1. EC2インスタンス側でSSL証明書を設定します:
  • 自己署名証明書を生成するか、CAから取得した証明書をインストールします。
  • Webサーバー(Apache/Nginxなど)でSSLを有効化します。
  1. セキュリティグループを設定します:
  • ロードバランサーからEC2インスタンスへのポート443のトラフィックを許可します。
  1. ヘルスチェックを設定します:
  • HTTPSプロトコルでヘルスチェックを行うよう設定します。

なお、ロードバランサーとEC2インスタンスは同じVPC内にあるため、パケットレベルでの認証が行われます。そのため、自己署名証明書でも問題ありません。

(更新途中)

Discussion