はじめに
本記事では、セキュリティ関連サービスとサーバーレスアーキテクチャについて解説します。
セキュリティ系サービス
IAM(Identity and Access Management)
IAMロールとクロスアカウントアクセス
外部WEBアプリケーションなど、第三者がAWSリソースにアクセスする必要がある場合の安全な方法は下記である。
- 必要最小限のアクセス権限を付与したIAMポリシーを設定
- クロスアカウントアクセスが可能なIAMロールを作成
- 第三者のWEBアプリケーションにそのロールを設定
クロスアカウントアクセスが可能となるIAMロールの作成手順は下記である。
- AWSマネジメントコンソールで「IAMロールの作成」を選択
- 最初のステップで「信頼ポリシー」を設定
- 「このロールを誰が使えるか」を定義(外部アプリケーションのAWSアカウントIDを入力)
- 「アクセス許可ポリシー」を作成・アタッチ
ウェブIDフェデレーション
ユーザーがGoogleなどの外部のIDプロバイダーを使用してアプリケーションにサインインできるようにする機能。
認証トークンを受け取ったら、そのトークンをAWSリソースを使用するためのアクセス許可を持つIAMロールにマッピングして、AWSの一時的セキュリティ認証情報に変換する。
アプリケーション内部に長期的なセキュリティ認証情報を保持する必要がなくなり、セキュリティが向上する。
2. AWS Secrets Manager / Systems Manager パラメータストア
AWS Secrets Manager
データベースの認証情報やAPIキーなどのシークレット情報を安全に管理するためのサービス。
ユーザー認証情報を自動的にローテーションする機能がある。
AWS Systems Manager パラメータストア
設定データやシークレット情報を階層的に保存・管理するためのサービス。
AWS WAF
CloudFrontに転送されるHTTPおよびHTTPSリクエストをモニタリングして、WEBアクセスの拒否ルールなどを設定できるウェブアプリケーションファイアウォール。
Referer制限
HTTPリクエストに含まれているページURLに基づいて、そのURLリンクへのリクエストを制限する機能。外部リンクから自分のサイトに置いてあるファイルをダウンロードされたくない場合などに利用する。
AWSプライベートリンク
VPCとAWSのサービスエンドポイント間のプライベート接続を提供し、パブリックインターネットを通過せずにAWSサービスにアクセスできるようにする。
VPCエンドポイント
インターネットを経由することなくAmazon EC2インスタンスからAmazon S3 APIなどを呼び出すためには、VPCエンドポイントを介して接続するように構成する。
-
ゲートウェイエンドポイント
S3やDynamoDBなどのサービスに接続する場合に使用 -
インターフェースエンドポイント
その他のAWSサービスに接続する場合に使用
コンテンツ配信系サービス
CloudFront
署名付きURLと署名付きCookie
CloudFrontにおいて署名付きURLおよび署名付きCookiesを利用することで、Amazon S3の事前署名付きURLと同じような効果を達成できる。ただし、これらはアクセス期間を制限することはできるが、その期間中はリンク自体を外部で利用することは可能。
OAIとOAC
S3バケットのコンテンツをCloudFrontディストリビューションを介してグローバルに配信する際に、S3オブジェクトURLに直接アクセスできないようにする方法は下記である。
-
オリジンアクセスアイデンティティ(OAI)
CloudFront側でOAIを割り当て、そのOAIにのみS3バケット内への読み取り権限があるようにS3バケットポリシーを設定 -
オリジンアクセスコントロール(OAC)
OAIと同様の機能を提供する新しい方式
サーバーレス系サービス
AWS Lambda
Lambda関数の権限設定
他のAWSリソースと連携するLambda関数を作成する際は、IAMによる実行ロールをLambda関数に設定してアクセス権限を付与することが必要。このIAMロールに付与されたアクセス権限によって、Lambda関数が操作できるAWSリソースの範囲が決まる。
サーバレスアプリケーションの例
API Gateway + Lambda + DynamoDB
クライアント → API Gateway → Lambda → DynamoDB
このアーキテクチャでは、API Gatewayがリクエストを受け取り、Lambda関数を呼び出す。Lambda関数はDynamoDBと連携してデータの取得や保存を行う。
Amazon Aurora MySQLとの連携
サーバレスアプリケーションでAurora MySQLを使用する場合、DBアップグレード中の接続中断に対応するには下記を行う。
- Lambda関数が取得した顧客データをAmazon SQSキューに保存
- 別のLambda関数がこのキューにポーリングして、顧客データをAuroraデータベースに保存
ワークフロー系サービス
AWS Step Functions
複数のAWSサービスを組み合わせてワークフローを構築するサービス。
主な特徴
- サーバーレスアプリケーションやマイクロサービスをワークフロー化
視覚的なワークフロー設計が可能 - 状態遷移を管理し、エラーハンドリングも可能
- 長時間実行されるプロセスやタスクの調整が可能
分散アーキテクチャでの活用
AWSとオンプレミスの両方の環境にあるリソースによって構成される分散アーキテクチャでは、Step Functionsが有用。コンポーネントが相互に接続しながら独立して実行できるようにするコンピューティングアーキテクチャを実現できる。
インフラストラクチャ管理系サービス
AWS CloudFormation
AWSリソースを利用したアーキテクチャ構成をコード化してテンプレートとして利用できるサービス。
主な特徴
-
Infrastructure as Code(IaC)
インフラ環境のデプロイを自動化 -
テンプレート
JSONまたはYAML形式でリソースを定義 -
スタック
テンプレートから作成されるリソースの集合 -
変更セット
リソースへの変更を事前に確認可能
AWS CodePipeline との違い
AWS CodePipelineはCodeDeployやAmazon ECSなどのサービスをパイプラインとして設定することで、コードの開発からデプロイまでのステップを自動的に実行できるようにする継続的デリバリーサービス。
インフラ環境のデプロイにはCloudFormationを利用する。