type
status
date
slug
summary
tags
category
icon
password
书籍
021-AWS IAM Identity Center
理論
AWSにおけるユーザー認証とアクセス管理の基本
クラウド環境でユーザー認証とアクセス管理は非常に重要です。AWSでは、ユーザーがどのようにAWSリソースにアクセスできるかを管理するために、いくつかのツールとサービスを提供しています。
1. AWS IAM(Identity and Access Management)とは?
AWS IAMは、AWSクラウドリソースへのアクセスを管理するためのサービスです。IAMを使うことで、どのユーザーやサービスがどのリソースにアクセスできるかを制御できます。IAMを活用することで、セキュリティを保ちながら、ユーザーやアプリケーションのアクセスをきめ細かく管理することができます。
主な機能:
- ユーザーの管理: 会社の従業員やサービスに対して、AWSリソースへのアクセスを許可したり、制限したりします。
- ポリシーの設定: どのリソースにアクセスできるかを定義するポリシー(JSON形式)を使ってアクセス権限を管理します。
- ロールの設定: 特定の権限を一時的に付与するためのロールを設定し、サービスやユーザーに割り当てることができます。
2. IAMのアクセス管理方法
AWSでは、アクセス管理を行うために主に以下の3つの方法を利用します。
① ユーザー
ユーザーは、AWSリソースにアクセスする個々のエンティティです。IAMユーザーは、AWSアカウント内で認証されるために使用され、各ユーザーには固有のアクセス権限が設定されます。
② グループ
複数のIAMユーザーに同じ権限を一度に付与したい場合に使うのがIAMグループです。例えば、「開発チーム」や「マーケティングチーム」など、共通の役割を持つユーザーをグループにまとめ、そのグループにアクセス権を設定します。
③ ロール
ロールは、特定の権限を持った一時的な「役割」を定義するものです。IAMロールはユーザーやサービスが一時的にその権限を取得するために使用され、通常はAWSサービス間のアクセスに利用されます。
3. IAM機能-SAML 2.0とOpenID Connect (OIDC)
多くの企業では、AWSのようなクラウドサービスにアクセスする際に、シングルサインオン(SSO)を活用しています。SSOを使うと、ユーザーは一度のログインで複数のサービスにアクセスできるため、便利で安全です。
- SAML 2.0: SAML(Security Assertion Markup Language)は、ユーザー認証情報を安全にやり取りするための標準的なプロトコルです。企業のオンプレミスシステム(例えばActive Directory)とAWSを統合して、AWSにアクセスするための認証を一元管理できます。
- OpenID Connect (OIDC): OIDCは、主にウェブアプリケーションで使用される認証プロトコルで、GoogleやFacebookなどのサービスとも連携できます。AWSはOIDCをサポートしており、外部のIDプロバイダーを使ってAWSリソースへのアクセスを管理することができます。
4. AWS IAM Identity Center(AWS SSO)
- AWS IAM Identity Center(AWS Single Sign-On)は、複数のAWSアカウントに対してシングルサインオン(SSO)を設定するためのサービスです。これを使うことで、ユーザーはAWSアカウントに個別にサインインする必要なく、1つのログインで複数のAWSサービスにアクセスできるようになります。
- SCIM(System for Cross-domain Identity Management): AWS SSOはSCIMをサポートしており、これを使うとユーザー情報の自動プロビジョニング(新しいユーザーの追加や削除)が可能になります。例えば、Active Directoryに新しいユーザーを追加した際、AWS SSOにも自動的にその情報が反映されます。
- 属性ベースアクセス制御(ABAC): ABACは、ユーザーの属性(役職や部門など)に基づいてアクセス権限を決定する方法です。これにより、ユーザーがどのリソースにアクセスできるかを柔軟に設定できます。
5. クロスアカウントアクセス
AWSでは、複数のアカウントにまたがってアクセス権を設定することもあります。例えば、異なる部署やプロジェクトで異なるAWSアカウントを使用している場合に、クロスアカウントアクセスを設定することで、他のアカウントに対してアクセスを許可できます。
クロスアカウントアクセスは、特に大規模な企業や組織にとって便利で、安全に複数のアカウントをまたいでリソースを管理できます。
6. AWSリソースへのアクセス管理のベストプラクティス
- 最小権限の原則: ユーザーやサービスに必要最低限の権限だけを付与することで、セキュリティを強化します。
- 定期的なアクセスレビュー: 定期的にアクセス権限を見直し、不要な権限を削除することで、セキュリティを維持します。
- ロールを活用: 必要に応じてIAMロールを使い、最小限の権限で一時的にアクセスを許可します。
結論
AWSにおけるユーザー認証とアクセス管理は、企業のセキュリティにとって非常に重要です。IAMを活用してアクセスを管理し、シングルサインオン(SSO)やクロスアカウントアクセスなどの機能を使うことで、安全かつ効率的にAWSリソースを管理することができます。適切な認証プロトコルやポリシー設定を活用し、最小権限の原則に基づいてアクセスを管理することが、セキュアなクラウド環境の維持に繋がります。
実践
参照元:
IAM Identity Centerを使って複数アカウント管理する。(その1:IAM Identity Centerでのログイン)
IAM Identity Centerは、AWS Single Sign-Onの後継サービスで、AWS Organizationsを利用して複数アカウントを一元管理し、簡単にログイン操作を行えるようにするツールです。
特徴
- AWS Organizations必須: IAM Identity CenterはAWS Organizationsが前提。
- 簡単な設定: 複雑な認証連携なしで、シンプルな構成の環境なら容易に導入可能。
- 利便性向上: ポータル画面から各アカウントに直接ログイン可能。スイッチロールやログインページの切り替えが不要。
メリット
IAM Identity Centerを使えば、複数アカウントを効率的に管理し、ログイン操作を簡略化できます。AWS Organizationsを使用している環境であれば、導入を検討する価値があります。
IAM Identity Centerの構成
AWS Organizationsで複数のアカウントを管理している場合、IAM Identity Centerを導入すると次のようなメリットがあります:
- 統一ポータルからのログイン: 各アカウントのログインページやスイッチロールを利用せず、IAM Identity Centerの専用ポータル画面から、直接複数のアカウントに簡単にアクセス可能。
- 効率化: アカウントごとの手動操作を省略し、スムーズな運用管理が実現。

IAM Identity Centerの設定
以下より実際に
IAM Identity Center
の設定を行っていきます。IAM Identity Centerの有効化
ルートアカウントにて
IAM Identity Center
の画面から「有効にする」を選択するだけで有効化できます。
多要素認証の設定
IAM Identity Center
の「設定」 →「認証」→「多要素認証」の「設定」より多要素認証(MFA)の設定が行えます。IAM Identity Center
全体の設定となるため、ユーザごとに設定を変更することはできませんが、以下のようにサインイン時にMFA登録を要求することができるので、AWS Organizations
のSCP
やIAMロールで権限設定せずとも、簡単にログインユーザ全員にMFAを強制できるため、全体の統制を取るためにも有用です。今回は以下のように「サインイン時にMFAデバイスを登録するよう要求する」を選択し、MFAを強制しようと思います。

ユーザとグループの作成
IAM Identity Center
のユーザ・グループを作成していきます。IAM Identity Center
のユーザ・グループは、各アカウントで作成するIAMユーザ・グループとは異なるため、IAM Identity Center
でユーザ・グループを作成しても、各アカウント側にはIAMユーザ・グループは作成されません。接続構成としては
IAM Identity Center
から各アカウントに内部的にスイッチロールで接続することで、各アカウント側にはユーザ・グループの作成は行われず、IAM Identity Center
で集中管理できるようになっているようです。「IAM Identity Center」→「ユーザー」の「ユーザーを追加」からユーザを登録します。

ユーザの作成は、以下の項目が必須項目となるため、各ユーザごとにそれぞれ登録を行います。
また、必須項目以外にも、「お問い合わせ方法」、「ジョブ関連情報」、「アドレス」、「環境設定」、「追加の属性」をオプションとして登録できるため、必要に応じて登録を行い、「次へ」を選択します。

まだグループを作成していない場合、以下の画面からグループを作成できるので、「グループを作成」を選択して、グループを作成します。

別タブでグループ作成の画面が開くため、グループ名を指定し、「グループを作成」を選択します。

グループを作成したら、ユーザ作成画面に戻り、リロードボタンを選択すると作成したグループが表示されるので、グループ名を選択し、「次へ」進みます。

確認画面で問題なければ「ユーザーを追加」でユーザ作成します。
作成後、登録ユーザに以下のようなメールが届くため、「Accept invitation」を選択します。

「Accept invitation」を選択することで、初期パスワード設定画面が開くため、各ユーザ側でパスワード設定してもらいます。

ちなみに、ユーザ作成時、「このユーザーと共有できるワンタイムパスワードを生成します。」を選択した場合は以下のような画面が表示されます。

ただし、
IAM Identity Center
からのメール検証が必要となるため、その場合はユーザの詳細画面から「Eメール検証リンクを送信」で検証を行います。
許可セットとは
許可セットは、IAMユーザやグループに割り当てるIAMポリシーと同等の機能を持ちつつ、以下の特徴があります:
- 複数アカウントに対応: 1つの許可セットで複数アカウントにポリシーを適用可能。各アカウントで個別にポリシーを作成する必要がありません。
- 複数の許可セット割り当て: ユーザやグループに複数の許可セットを付与可能。
- 例: 通常はリードオンリー権限、作業時のみフルアクセス権限を使用。
IAMロールと許可セットは似ていますが、用途と管理方法に違いがあります。
主な違い
特徴 | IAMロール | 許可セット |
適用対象 | ユーザに割り当て | グループやアカウントに割り当て |
ユースケース | 特定のサービスやアカウント内リソースへのアクセス許可 | AWS Organizations環境で複数アカウントにまたがる簡単な権限付与 |
操作性 | 手動でIAMロールをスイッチする必要がある | IAM Identity Centerのポータルから簡単にアカウント切り替えが可能 |
簡単に言うと:
これにより、権限設定の集約管理が可能となり、設定忘れやミスを防ぎつつ、運用の効率化を図れます。

許可セットの作成
「マルチアカウント許可」→「許可セット」より「許可セットを作成」を選択し、許可セットを設定していきます。

許可セットのポリシー
許可セットには以下の2種類があります:
- AWSマネージドポリシー: 用途ごとに事前定義されたポリシーを選択可能(例: AdministratorAccess)。
- カスタム許可セット: 独自のポリシーを細かく作成可能。
今回は、「AdministratorAccess」という事前定義された許可セットを選択して進めます。

許可セットの設定
- 設定内容: 許可セット名やセッション期間を設定します。
- リレー状態の設定:
- リレー状態の設定とは、ユーザがIAM Identity Centerポータルから各AWSアカウントにログインした際、最初に表示される画面を指定する機能です。
- 通常: AWSマネジメントコンソールのトップ画面に遷移。
- カスタマイズ: 特定の画面(例: 請求画面)を直接表示したい場合はURLを指定可能。

後の手順で使おうと思うので、同じように「ReadOnlyAccess」の許可セットも作っておきます。
AWSアカウントとの結びつけ手順
- ユーザ・グループ、許可セットの作成
先に作成済みのユーザ・グループ、許可セットを使用。
- 結びつけ手順
- 「マルチアカウント許可」→「AWSアカウント」を選択。
- 結びつけたいAWSアカウントを選び、「ユーザーまたはグループを割り当て」をクリック。
これにより、対象ユーザやグループに指定した許可セットを適用できます。

結びつけるユーザ、またはグループを選択できるので、任意のユーザもしくはグループを選択し、「次へ」を選択します。

結びつける許可セットを選択します。

下の画面のあと、確認画面が表示されるため、「送信」を選択することで、ユーザ・グループ、許可セットとAWSアカウントの結びつけができます。
「AWSアカウント」の画面に戻ると、どのアカウントにどの許可セットが割り当てられているかが確認できるので、想定の許可セットが割り当てられているかはこちらから確認します。

また、割り当てられたユーザ・グループは、少し分かりづらいですが、「マルチアカウント許可」→「AWSアカウント」→任意のアカウントの詳細画面→「ユーザーとグループ」タブから確認できます。

MFAデバイスの登録
初期パスワード設定時に送付されたメールアドレスに記載されているURLにアクセスすることで
IAM Identity Center
のログイン画面が開きます。また先程の設定よりMFA登録を要求するようにしていると、以下のようにMFAデバイス登録が促され、登録しないと先に進めないため、全ユーザにMFAを強制することができます。

IAM Identity Centerへのログイン手順
- MFAデバイス登録後: IAM Identity Centerにログインします。
- ポータル画面表示: 各アカウントと許可セットが表示されます。
- 操作手順:
- アクセスしたいアカウントを選択。
- 許可ポリシーの「Management Console」をクリック。
- 対象のAWSマネジメントコンソールに遷移。
表示内容
- 許可セットに基づき、ユーザ・グループごとに表示が異なります。
- 例: AdministratorAccessやReadOnlyAccessが割り当てられたアカウントのみ表示される。
- 現在ログインしているユーザーは二つのアカウントに対して指定した許可セットでアクセスできます。

おわりに
今回は、IAM Identity Centerの基本設定からユーザログインまでを解説しました。
これにより、複数アカウントのユーザ・グループ設定やIAMポリシーの管理を効率化でき、スイッチロールによるアカウント間移動が簡素化されることをお伝えしました。
次回は、コマンドライン操作について詳しく解説します。
IAM Identity Centerを使って複数アカウント管理する。(その2:CLIでのアクセスと管理の委任)
はじめに
前回は
IAM Identity Center
の基本設定とAWSマネジメントコンソールへのログインまで行ったので、今回はCLIでのアクセス方法とIAM Identity Center
管理の委任についてまとめてみようと思います。CLIアクセスについて
IAM Identity Centerで作成したユーザのCLIアクセスは、期限付きセッショントークンによる認証方式を使用します。
CLIアクセスに必要な情報は、IAM Identity Centerにログイン後、
「Command line or programmatic access」を選択することで表示されます。
これにより、以下の利点があります:
- ユーザごとのクレデンシャル情報を個別に作成・配布する必要がなくなる。
- クレデンシャル情報の定期的な変更作業が不要になる。

CLIアクセスの設定方法
各アカウントおよび許可セットで「Command line or programmatic access」を選択すると、以下の情報が表示されます。この情報をコピーして使用できます。
- 表示される情報:
- アクセスキーID
- シークレットアクセスキー
- セッショントークン(期限付き)
これらの情報を使って、次の方法でコマンドを実行できます:
- コンソールに貼り付け:直接コマンドラインで使用。
- ~/.aws/credentialsに記載:プロファイルを設定し、
profile
を指定してコマンドを実行。
これにより、選択したアカウントと権限でコマンドが実行できます。

セッショントークンの保持期間とアクセス方法
- セッショントークンの保持期間は、許可セットの「セッション期間」から設定できます。デフォルトは1時間で、最長12時間まで延長可能です。
- 保持期間が満了するとコマンドが失敗し、再度ポータル画面にアクセスして新しいトークン情報をコピーする必要があります。
ただし、ポータルから毎回トークンをコピーするのは手間がかかるため、アクセスキーとシークレットアクセスキーを使った管理に戻る可能性もあります。
そのため、CLIアクセスを効率的に利用する方法も用意されています。
前提条件
- AWS CLIでIAM Identity Centerを使うためには、AWS CLI v2が必要です。
- AWS CLI v2を使用していない場合は、以下のリンクから最新バージョンに更新してください:
aws configure ssoによるトークンの更新
- ポータル画面からトークン情報を手動でコピーする方法の他に、AWS CLIを使ってトークンを更新する方法もあります。
- AWSユーザガイドにて紹介されている2種類の方法は、以下の通りです:
- 手動更新: トークンが満了した際に手動で更新する方法。
- 自動更新(推奨構成): トークンが満了した際に自動で更新される方法。
今回は自動更新(推奨構成)を紹介します。
SSOトークンプロバイダ構成の設定
AWS CLI v2を使用して、
aws configure sso
コマンドでSSOトークンプロバイダ構成を設定します。プロファイルの構成
aws configure sso
を実行すると、以下の入力項目が表示されます。適切な情報を入力してください。
- 注意: AWS CLI v2が古いバージョンの場合、
SSO session name
が表示されないことがあります。最新バージョンに更新してください。
入力項目:
- SSO session name (Recommended): 任意のセッション名
- SSO start URL: SSOポータルの開始URL(例:
https://xxxxxxxxxx.awsapps.com/start#
)
- SSO region: リージョン(例:
ap-northeast-1
)
- SSO registration scopes: 固定値
sso:account:access
設定例:
項目 | 設定 | 備考 |
SSO session name | AdministratorAccessCLI | 任意のセッション名 |
SSO start URL | https://x-xxxxxxxxxx.awsapps.com/start# | ポータル画面からコピーしたURL |
SSO region | ap-northeast-1 | 使用するリージョン |
SSO registration scopes | sso:account:access | ユーザガイド通りの固定値 |
入力が完了した後、AWS CLIがインターネットブラウザを開いてSSO認証画面を表示します。そこで「Allow」を選択して認証を完了させます。

インターネットブラウザが開けない場合は、AWS CLIのコマンド結果で表示されている以下のURLにアクセスし、記載されているコードを入力することで関連付けます。

AWS CLIに戻ると関連付けられているアカウントが対話式で選択できるようになるため、上下ボタンでアクセスしたいアカウントを選択してEnterを押します。
続いて関連付けられている許可セットの選択を行います。
デフォルトリージョン、アウトプットフォーマット、任意のプロファイル名の指定を行い実行。
aws configure sso
コマンドの設定完了後、~/.aws/config
に以下のような設定情報が作成されます。上記設定後に表示される実行例のように、
--profile [CLIプロファイル名]
を指定することで、指定したプロファイルの権限でコマンドを実行できます。コマンド実行例
他のアカウント用プロファイルへの切り替え方法は、以下のように
--profile
オプションを使用します。- プロファイル切り替えコマンド:
- 複数プロファイル作成:
これにより、IAM Identity Centerで設定したプロファイルを切り替えて使用できます。
実運用時のプロファイル構成例
実際に、2つの方法を使った例を挙げてみましょう。


1. -profile
オプションを毎回指定する方法
この方法では、AWS CLIで実行するたびに
--profile
オプションを使って接続先アカウントを指定します。例:
- プロファイルAでS3バケットを一覧表示
- プロファイルBでEC2インスタンスを確認
ここでは、毎回
--profile
を指定しなければならず、複数のアカウントを切り替えるたびに手動でオプションを変更する必要があります。2. 作業用CLIプロファイルを設定し、aws configure sso
で切り替える方法
この方法では、一度作業用CLIプロファイルを設定しておけば、その後は簡単にアカウントを切り替えることができます。
ステップ:
- 作業用プロファイルの設定:
これにより、作業用プロファイルが設定され、アカウントを選択するためのプロンプトが表示されます。
- プロンプトでアカウントを選択:
プロンプトが開き、矢印キーを使って接続したいアカウントを選択し、
Enter
を押します。
- アカウント切り替え後、再度
aws configure sso
で切り替え:
このコマンドを実行するだけで、再度簡単にアカウントを切り替えることができます。
--profile
オプションを毎回指定する手間が省けます。結果:
- 最初に作業用プロファイルを設定しておくと、後は簡単にアカウント間の切り替えが可能で、複数のアカウントで操作する際の効率が良くなります。
セッショントークンの期限が切れた場合、以下のコマンドでアクセスを再開できます。
- トークンの更新
- インターネットブラウザで認証を行い、新しいトークンが取得されます。
- 明示的にログアウト
- ログアウトし、クライアント側のキャッシュされているトークン情報も削除されます。
IAM Identity Centerの管理の委任
- IAM Identity Centerはデフォルトでルートアカウントで管理されますが、ベストプラクティスではルートアカウントでの管理は最小限にすることが推奨されます。
- 他のメンバーアカウントに管理権限を委任することができ、ルートアカウントの使用を制限することができます。
- 委任設定により、セキュリティを向上させ、運用効率を高めることができます。
委任の設定
委任の設定自体は非常に簡単で、「IAM Identity Center」の「設定」→「管理」タブの「アカウントを登録」から行います。

委任するメンバーアカウント選択画面が表示されるため、委任するメンバーアカウントを選択して、「アカウントを登録」を実行することで
IAM Identity Center
の管理を委任することができます。
上記画面の注意書きにも記載されている通り、ルートアカウントに対する許可セットの管理や
IAM Identity Center
自体の削除などは、今まで通りルートアカウントで行う必要がありますが、委任することでルートアカウントからIAM Identity Center
の管理を分離することができます。おわりに
- 今回はCLIでのアクセス方法とIAM Identity Centerの管理委任方法について説明しました。
- セッショントークンの再認証手間はありますが、永続的なアクセスキーを配布せずにアクセスできる点は管理者にとって大きなメリットです。
- IAM Identity Centerの委任により、役割が明確になり、アカウント数が多いシステムではユーザ管理用アカウントを用意するのも効果的です。
- 次回は外部AWSアカウントに対してIAM Identity CenterからSAMLアクセスを行う方法を試す予定です。
IAM Identity Centerを使って複数アカウント管理する。(その3:外部AWSアカウントへのSAML)
IAM Identity CenterからのSAML接続について
- IAM Identity CenterはSAML2.0を使用したIDフェデレーションをサポートし、SAML対応のサービスプロバイダと連携可能です。
- これにより、IAM Identity Centerの認証情報を使って、ポータル画面から外部サービスプロバイダに接続できます。
- 今回は、組織外のAWSアカウントに対してIAM Identity CenterからSAML接続を試みます。
接続構成:
- 外部AWSアカウントを持っていないため、メンバーアカウントを外部アカウントとして扱い、ルートアカウントからSAML接続を試みる。
- 自組織の設定と外部AWSアカウントの設定を交互に行う。自組織の作業は「自組織」、外部AWSアカウント側の作業は「外部組織」と区別して進める。
- メンバーアカウントはIAM Identity Centerから接続できないように設定を変更し、ルートアカウントで管理を戻した。
この流れで、組織内での設定を外部AWSアカウントと連携させる方法について進めています。
アプリケーションの追加(自組織)
IAM Identity Center
に外部組織用のアプリケーションを追加するため、「IAM Identity Center」→「アプリケーション割り当て」→「アプリケーション」から「アプリケーションを追加」を選択して設定していきます。
「カスタムアプリケーション」と「事前統合アプリケーション」があるので、「事前統合アプリケーション」から「External AWS Account」を選択して「次」に進みます。

任意のアプリケーションの表示名を指定します。
また、「ステップバイステップの手順を表示」を選択すると、設定手順が表示されるため、設定時に開いておくと良いかと思います

「IAM Identity Centerメタデータ」の項目より、後ほど外部組織側設定で使用する「IAM Identity Center SAMLメタデータファイル」をダウンロードしておきます。

「アプリケーションのプロパティ」と「アプリケーションメタデータ」は今回の場合、デフォルトで問題ないので、そのまま「送信」を選択します。

「ユーザーを割り当て」を選択して、外部組織にアクセスさせたいユーザ・グループを選択します。


IDプロバイダの追加(外部組織)
外部組織側のアカウントに移り、
IAM Identity Center
からの認証を受け付けるIDプロバイダの設定を行っていきます。「IAM」→「アクセス管理」→「IDプロバイダ」の「プロバイダを追加」より設定を行っていきます。
- IDプロバイダ(Identity Provider): 認証情報を提供するサービス。IAM Identity Centerや外部の認証システム(例えば、Active DirectoryやGoogle Workspace)などがこれに該当します。
- サービスプロバイダ(Service Provider): ユーザーがアクセスしたいリソースやシステム。AWSアカウントや外部アプリケーションがサービスプロバイダです。
IAM Identity Centerからの認証を行う場合、IDプロバイダとしてIAM Identity Centerを使用してユーザーの認証を行い、その後ユーザーはアクセスしたいAWSリソース(サービスプロバイダ)にアクセスできるようになります。

以下表、図のように設定を行い、「プロバイダを追加」を選択。

以下のように概要画面が表示されるため、後ほど
IAM Identity Center
側作業で必要となるARNを控えて「ロールの割り当て」でIDプロバイダと結びつけるIAMロールを作成します。
IAMロールの作成(外部組織)
前手順に引き続き、設定を行っていきます。
「新しいロールを作成」を選択し、「次へ」進みます。

以下表、図のように設定を行い、「次のステップ:アクセス権限」を選択。
項目 | 設定 |
信頼されたエンティティの種類を選択 | SAML 2.0 フェデレーション |
SAMLプロバイダー | IdentityCenterSAML(先程作成したIDプロバイダ) |
ㅤ | プログラムによるアクセスとAWSマネジメントコンソールによるアクセスを許可する |
属性 | SAML:aud |
値 | |
条件 | なし |

IAM Identity Center
からのアクセス時に適用したいポリシーを選択して「次のステップ:タグ」を選択。

タグ設定は今回は特に設定せず次へ進み、ロール名の指定を行い、「ロールの作成」で作成します。

作成後、
IAM Identity Center
側の設定で必要となるIAMロールのARNを控えておきます。

属性マッピングの設定(自組織)
再度、
IAM Identity Center
の設定画面に戻り、「IAM Identity Center」→「アプリケーション割り当て」→「アプリケーション」の「設定済み」タブから先程作成したアプリケーション名を選択します。
アクション」から「属性マッピングを編集」を選択します。

下記の図の1行目と2行目はデフォルトで記載されているため、新たに3行目を追加し、以下のように設定します。
また、以下表2列目のValue値の書式については
arn:aws:iam::[ACCOUNTID]:saml-provider/[SAMLPROVIDERNAME],arn:aws:iam:: [ACCOUNTID]:role/[ROLENAME]
となり、先程控えたIDプロバイダのARNとIAMロールのARNを結合したものを記載します。アプリケーションのユーザー属性 | この文字列値またはIAM Identity Centerのユーザー属性にマッピング | 形式 | 備考 |
Subject | ${user:email} | persistent | デフォルトで入力済み |
${user:email} | unspecified | デフォルトで入力済み | |
arn:aws:iam::xxxxxxxxxxxx:saml-provider/IdentityCenterSAML,arn:aws:iam::xxxxxxxxxxxx:role/IdentityCenterSAML-Role | unspecified | ステップバイステップ手順に書式記載あり |

まとめ
- 自組織(A組織)の設定:
- 自組織の IAM Identity Center で Aアプリケーション を作成します。
- Aユーザー を Aアプリケーション に関連付けます。このアプリケーションは、他組織(B組織)のリソースにアクセスするために必要な認証情報を持つ役割を果たします。
- 他組織(B組織)の設定:
- B組織で Bロール を作成し、アクセス権限(ポリシー)を設定します。
- このロールには、B組織のリソースへのアクセス権限が含まれており、アクセスするために必要な認証を Aアプリケーション に委譲します。
- 信頼関係の設定:
- B組織の IAM で、Aアプリケーション からの認証を受け入れるための信頼関係を設定します。具体的には、B組織の IAMロール に対して Aアプリケーション からの SAML 認証を受け付ける設定を行います。
- これにより、A組織の IAM Identity Center が提供する認証を通じて、AユーザーがB組織のリソースにアクセスするためのロールを付与されます。
- Aユーザーのアクセス:
- AユーザーがAアプリケーションを通じて認証されると、その認証情報をもとにB組織の Bロール を取得します。
- B組織で設定した権限に基づき、AユーザーはB組織のリソースにアクセスできるようになります。
このように、Aユーザーが自組織の IAM Identity Center を使って認証し、他組織のロールにアクセスする設定が完了します。この設定により、ユーザーはB組織のリソースにアクセスできますが、B組織のロールの認証と権限はA組織の IAM Identity Center によって管理されます。
IAM Identity Centerを使って複数アカウント管理する。(その4:GHECへのSAML)
前提条件
GitHubでSAML認証を使用するには、以下の条件が必要です:
- *GitHub Enterprise Cloud(GHEC)**を利用していること
- GitHub Organizationを構成していること
そのため、個人向けのフリープランやTeamプランではSAML認証は利用できません。もし検証したい場合は、Enterpriseトライアルを利用して機能を確認することをおすすめします。
今回の記事は、Organizationの認証にSAMLを使用する前提で進めます。
接続構成
今回の設定手順では、GitHub Enterpriseプランを使用し、Organizationが構成されている前提で進めます。
設定の流れは前回の外部AWSアカウント接続時と似ていますが、今回は外部組織がGitHubです。
自組織側(IAM Identity Center)で設定を行い、外部組織(GitHub)との接続用アプリケーションを作成し、接続設定を行う流れです。
構成イメージは前回と同様に、**自組織(IAM Identity Center)と外部組織(GitHub)**の接続設定として説明します。
SAMLメタデータの取得(外部組織)
外部組織(GitHub)での設定において、SAMLメタデータを取得するために、前回の自組織側のアプリケーション設定時に指定した「アプリケーションACS URL」と「アプリケーションSAML対象者」に対応するSPメタデータをダウンロードします。
メタデータのURLは次の形式で提供されます:
https://github.com/orgs/ORGANIZATION/saml/metadata
(
ORGANIZATION
は自分のOrganization名)このURLにアクセスし、表示されたXMLファイルをページ保存などでダウンロードしておきます。
アプリケーションの追加(自組織)
IAM Identity Center
に外部組織用のアプリケーションを追加するため、「IAM Identity Center」→「アプリケーション割り当て」→「アプリケーション」から「アプリケーションを追加」を選択して設定していきます。
「カスタムアプリケーション」と「事前統合アプリケーション」が選択肢としてありますが、今回は「事前統合アプリケーション」から「GitHub」を選択し、「次」に進みます。
※執筆時には英語表記となっているため、実際に設定する際には英語表記のまま進めることになりますが、適宜日本語に読み替えて進行してください。

今回は
GitHub
側に登録するURL等確認する必要があるので、「View step-by-step instructions」を選択。
別ウィンドウでセットアップ手順が書かれた以下のようなページが開くため、開いたままにしておき、元のウィンドウの「IAM Identity Center metadata」より「IAM Identity Center Certificate」をダウンロードしておきます。(※別ウィンドウでも同じIAM Identity Center証明書がダウンロードできます)


「Configure application」(ディスプレイ名等)は任意で入力、「Application properties」はそのまま空欄とし、「Application metadata」で「Upload application SAML metadata file」を選択し、先程事前にダウンロードした
GitHub
のSPメタデータを選択して「Submit」します。

「Assign Users」を選択して、外部組織にアクセスさせたいユーザ・グループを選択します。


SAMLの有効化(外部組織)
GitHub
でOrganization
のSAML
設定が可能なユーザでログインし、右上のユーザアイコンから「Your organizations」より自組織の「Settings」を選択。
左メニューの「Authentication security」に「SAML single sign-on」の項目があり、「Enable SAML authentication」のチェックを付けると以下のような設定項目が表示されるため、先程の
IAM Identity Center
の設定時に別ウィンドウで開いたセットアップ手順に記載されている「Single sign-on URL」と「Issuer」を入力、「Public certificate」には、先程ダウンロードした「IAM Identity Center Certificate」の内容をコピペします。また、鉛筆アイコンより「RSA-SHA256」、「SHA256」を指定しておきます。
項目 | 設定 |
Sign on URL | ステップバイステップ手順のSingle sign-on URL |
Issuer | ステップバイステップ手順のIssuer |
Public certificate | IAM Identity Centerの証明書 |
Signature Method | RSA-SHA256 |
Digest Method | SHA256 |

全て設定できたら「Test SAML configuration」を選択することで、接続テストが行われます。
初回は
IAM Identity Center
、GitHub
のユーザ情報入力が求められるかと思うので、無事IAM Identity Center
のSAML
でログインできれば、以下のように無事テストが成功した画面となるため、最後に「Save」して終了です。
属性マッピングの設定(自組織)
前回は属性マッピングの設定も手動で行いましたが、
GitHub
の場合は特に変更する必要が無いため、設定は行いません。ちなみに、デフォルトでは以下のようなアトリビュートが設定されます。
User attribute in the application | Maps to this string value or user attribute in IAM Identity Center | Format |
Subject | ${user:email} | unspecified |
Email | ${user:email} | unspecified |
IAM Identity Centerからのログイン(自組織)
上記までの手順を実施することで、
IAM Identity Center
のポータル画面にGitHub
へログインするためのアプリケーションが表示されるようになっているため、表示されているアプリケーションを選択することでGitHub
にログインできるようになります。

おわりに
GitHubでのSAML認証設定には、Enterpriseプランが必要ですが、IAM Identity Centerの設定画面に表示されるステップバイステップの手順に従えば、設定は比較的簡単に進められます。
ただし、以下の点に留意する必要があります:
- 「IdP Initiated SSO」の設定がGitHub画面では見つからない場合があります。
- 手順通りに進めると、IAM Identity CenterとGitHubを行ったり来たりする必要があるため、今回紹介した方法で設定することをおすすめします。
また、GitHub側でログアウト後に再度SAML接続を行う際には、ユーザー名やパスワードの再入力が求められることがあります。これに関する詳細な設定方法は見つかりませんでしたが、設定次第で回避できるかもしれません。
さらに、GitHub側でOrganizationの全メンバーにSAML認証を要求することもできるため、IAM Identity CenterとGitHubの認証をSAML認証で統合したい場合は、今回の手順を参考にして設定を進めてください。
一問道場
シナリオ:
企業はオンプレミスのActive Directoryサービスを使用してユーザー認証を行っています。企業は同じ認証サービスを利用してAWSアカウントにもサインインしたいと考えています。AWSアカウントはAWS Organizationsを使用しています。また、オンプレミス環境とすべてのAWSアカウント間にはAWS Site-to-Site VPN接続がすでに確立されています。
企業のセキュリティポリシーは、ユーザーグループや役割に基づく条件付きアクセスを要求しています。ユーザーIDは一元管理する必要があります。
要件:
- ユーザーグループや役割に基づく条件付きアクセス
- ユーザーIDの一元管理
どのソリューションが要件を満たすか?
選択肢:
A.
- AWS IAM Identity Center(AWS Single Sign-On)を設定
- SAML 2.0を使用してActive Directoryに接続
- System for Cross-domain Identity Management(SCIM)v2.0プロトコルを使用して自動プロビジョニングを有効
- 属性ベースのアクセス制御(ABAC)を使用してAWSアカウントへのアクセスを付与
B.
- AWS IAM Identity Center(AWS Single Sign-On)を設定
- IAM Identity CenterをIDソースとして使用
- System for Cross-domain Identity Management(SCIM)v2.0プロトコルを使用して自動プロビジョニングを有効
- IAM Identity Centerの権限セットを使用してAWSアカウントへのアクセスを付与
C.
- 企業のAWSアカウントの1つでAWS Identity and Access Management(IAM)を設定
- SAML 2.0 IDプロバイダーを使用
- フェデレーテッドユーザーに対応するIAMユーザーをプロビジョニング
- Active Directoryの適切なグループに基づくアクセスを付与
- クロスアカウントIAMユーザーを使用してAWSアカウントへのアクセスを付与
D.
- 企業のAWSアカウントの1つでAWS Identity and Access Management(IAM)を設定
- OpenID Connect(OIDC)IDプロバイダーを使用
- Active Directoryの適切なグループに対応するフェデレーテッドユーザーに対してAWSアカウントへのアクセスを付与するIAMロールをプロビジョニング
- クロスアカウントIAMロールを使用してAWSアカウントへのアクセスを付与
もう少し詳しく、わかりやすく説明しますね。
最適なソリューション:A
理由:
Aが最適な理由は以下の通りです:
- AWS IAM Identity Center(AWS SSO)を使用
AWS SSOを使うことで、オンプレミスのActive Directoryと連携できます。これにより、AWS環境の管理を一元化でき、ユーザー認証を効率的に行えます。オンプレミスのActive Directoryで管理しているユーザーがそのままAWSにもアクセスできるようになります。
- SAML 2.0を使用して認証
SAML 2.0は、Active Directoryのユーザー情報をAWSに伝える認証プロトコルです。これを使うことで、ユーザーがAWSにアクセスする際に、企業のActive Directoryで認証を行い、シングルサインオン(SSO)を実現できます。
- SCIM v2.0を使った自動プロビジョニング
SCIM(System for Cross-domain Identity Management)v2.0は、ユーザー情報を自動でAWSに反映させる仕組みです。これにより、Active Directoryで新しいユーザーを作成した際、AWS側でも自動的にアカウントが作成され、管理が簡単になります。
- ABAC(属性ベースのアクセス制御)で細かいアクセス管理
ABACは、ユーザーの属性(例えば、役職や部署など)に基づいてアクセス権を管理する方法です。これを使うことで、ユーザーグループや役職に応じて、AWSアカウントへのアクセスを柔軟に制御できます。
このように、Aの方法では、ユーザーIDの管理が一元化され、アクセス制御もグループや役職に基づいて柔軟に行えます。セキュリティポリシーを満たすための条件付きアクセスも簡単に設定できます。
他の選択肢の評価:
- B
IAM Identity Centerを使う点ではAと似ていますが、条件付きアクセスの柔軟性に欠けます。特にグループや役職ごとのアクセス制御が細かくできないため、要件を満たしきれません。
- C
- フェデレーテッドユーザー(外部のIDシステムからログインするユーザー)は、IAMユーザーを作成せずに、IAMロールを使ってアクセス管理します。
- ですが、選択肢Cでは、フェデレーテッドユーザーに対してIAMユーザーを作成する方法を採っています。これだと不必要にIAMユーザーを作らないといけないため、効率的ではありません。
- クロスアカウントアクセス(異なるAWSアカウント間でのアクセス)では、IAMロールを使う方が簡単で効率的です。
- しかし、選択肢Cでは、クロスアカウントアクセスにIAMユーザーを使っています。これも不適切で、代わりにIAMロールを使うべきです。
IAMを使って手動でユーザーを設定する方法です。ユーザーIDの一元管理や自動プロビジョニングには対応していません。また、クロスアカウントアクセスを設定するために多くの手間がかかります。
1. フェデレーテッドユーザーとIAMユーザー
2. クロスアカウントアクセスにIAMユーザーを使う
- D
IAMロールとOIDCを使う方法です。この方法もユーザー管理が手動で行われるため、一元管理や自動プロビジョニングには対応していません。セキュリティの管理が煩雑になり、効率的ではありません。
結論:
Aは、ユーザー管理とアクセス制御の面で最も効率的で、安全かつ簡単に実装できる方法です。B、C、Dの方法は、特にユーザー管理や自動化の部分で手間がかかり、要件を満たすのが難しいため、Aが最適な選択肢です。
022-指数バックオフ
理論
参照元:
Web API パターンのサーバーレスアプリケーションの特徴
- Push 形式の起動
Web API は外部からの HTTP リクエスト によってトリガーされる Push 形式 を採用しています。
クライアントがリクエストを送信する責任を持つため、サーバー側はリクエストの処理ロジックに専念できます。
- 同期通信の特性
- 正常時: クライアントで利用可能なデータを返す。
- エラー時: エラー情報を返し、クライアントが適切なエラーハンドリングを行えるようサポートします。
Web API では、クライアントがリクエストを送信すると、サーバーが処理を実行し、すぐにレスポンスを返します。
レスポンス内容:
- Push 形式と Pull 形式の比較(補足)
- Push 形式(Web API の特徴): クライアントがリクエストを送信し、それに応じてサーバーが処理を行う。
- Pull 形式(別のパターン): サーバーが外部からデータを取りに行く形式。サーバー側でエラーハンドリングを含む責任が増えるが、AWS の「イベントソースマッピング」などで負担を軽減する仕組みが提供されている。
Web API パターンのサーバーレスアプリケーションを AWS 上で構築するには、2 つの主要なサービスを使用します:
1.Amazon API Gateway:
HTTP リクエストを処理する Web サーバーとして機能し、API の作成、公開、管理を行います。主に REST API を構築する際に使用され、モバイルや業務系 API に利用されます。

2.AWS AppSync:
GraphQL を利用した API を構築するためのサービスです。リアルタイムのチャットアプリなど、リアルタイムモバイルやオフライン対応のアプリケーションで使用されます。

サーバーレスな Web API を構築するには、Amazon API Gateway(HTTP リクエストを処理する)と AWS Lambda(バックエンド処理を実行する)を組み合わせます。Lambda はイベント駆動型で、さまざまなプログラミング言語をサポートし、広範なユースケースに対応します。
エラーを処理
クライアント側で行うエラーハンドリングの一つに「リトライ」があります。リトライは一時的なエラー(例:スロットリング、一時的な障害、ネットワーク問題)に対応する方法です。
リトライのポイント
- リトライが必要なエラー:
- 一時的な障害やリクエスト制限(スロットリング)など。
- リトライが不要なエラー:
- 不正なデータやアクセス権限の不足など、設定修正が必要なエラー。
リトライ設定
- 回数と間隔を適切に設定することが重要。短時間で繰り返しリクエストするとサーバーに負担をかけるため、間隔を調整します。
- エクスポネンシャルバックオフとジッター(ランダムに間隔を変更)を使うのが推奨されます。

【ジッター】
ジッターはリトライの際にランダムな遅延を加えることで、同時に発生するリクエストやそのリトライによる競合や過負荷を避けるための効果的な手法です。この方法を使用することで、リクエストが集中する時間帯にエラーの再発を防ぎ、システム全体の安定性を保つことができます。

リトライ実装
AWS SDKを使用すると、エクスポネンシャルバックオフとジッターを含むリトライを簡単に実装できます。例えば、フロントエンドアプリケーションからAPI Gatewayへのリクエストを行う際、AWS SDKが自動でリトライ機能を適用します。
以下の表でエクスポネンシャルバックオフとジッターの違いをまとめました:
特徴 | エクスポネンシャルバックオフ | ジッター |
目的 | リトライ間隔を長くして負荷を減らし、システムの復旧時間を確保 | 同時リクエストの競合を避け、リトライのタイミングを分散 |
リトライ間隔 | 初回リトライから指数的に増加(例:1秒 → 2秒 → 4秒) | リトライ間隔にランダムな時間のずれを加える |
主な効果 | リクエストが集中しないようにし、システムにかかる負荷を減少 | 同時リトライによる競合や過負荷を防ぐ |
使用場面 | リトライ回数が多い場合に有効 | 複数のクライアントが同時にリトライする場合に有効 |
このように、両者は異なる目的で使用されますが、合わせて使うことで、リトライによるエラー処理をより効果的に行えます。
以下はその簡単なサンプルコードです。
AWS SDK を使うと、エクスポネンシャルバックオフとジッターを備えたリトライ機能が自動で実装されます。API呼び出し時に
apigClient.methodName
を使うと、SDKがリトライ処理を行い、手動での実装が不要です。これにより、サーバーレスアーキテクチャでのエラーハンドリングが簡単に実現できます。実践
エクスポネンシャルバックオフ(Exponential Backoff)を実装したLambda関数をテストするために、以下の構成と手順を紹介します。エクスポネンシャルバックオフを使用する場合、APIのリクエストが失敗した場合に一定の待機時間をおいて再試行を行い、待機時間が増加していく仕組みを作成します。
構成概要
- Lambda関数: AWS Lambdaを使ってS3バケットをリストするAPIを作成します。失敗した場合はエクスポネンシャルバックオフを使って再試行します。
- API Gateway: HTTPエンドポイントを公開し、Lambda関数をトリガーします。
- S3: Lambda関数がリストするS3バケットを準備します。
1. Lambda関数の作成
Lambda関数でエクスポネンシャルバックオフを実装し、S3バケットのリストを取得します。バックオフ処理には、最大再試行回数や再試行間隔を設定します。
2. API GatewayでHTTPエンドポイントを作成
次に、API Gatewayを使って、HTTPリクエストがLambda関数をトリガーするように設定します。
手順:
- API Gatewayを作成:
- AWS Management Consoleで「API Gateway」を選択し、新しいHTTP APIを作成します。
- 必要なリソース(例:
/s3-buckets
)とメソッド(例: GET)を作成します。
- Lambda関数をAPI Gatewayに統合:
- 作成したGETメソッドに、先ほど作成したLambda関数を統合します。
- デプロイ:
- API GatewayでAPIをデプロイし、エンドポイントURLを取得します。
3. S3バケットの設定
Lambda関数がS3バケットのリストを取得するので、事前に少なくとも1つ以上のS3バケットが存在する必要があります。もし必要であれば、新しいS3バケットを作成してください。
4. テスト方法
4.1 Lambda関数のテスト
- Lambdaコンソールから直接関数をテストできます。
- イベントは
{}
のように空のJSONで設定できます。 - 関数が正常に動作する場合、S3バケットのリストが含まれたレスポンスが返されます。
- s3:ListAllMyBuckets IAMロールに適切な権限を付与することで、アクセスできるようにします。
4.2 API Gatewayを介してテスト
- API Gatewayを介してLambda関数をHTTPリクエストでテストするには、以下の手順を実行します。
- Postman、curl、またはブラウザを使ってAPI GatewayのエンドポイントURLにGETリクエストを送信します。
- レスポンスにS3バケットのリストが含まれていれば、成功です。もしバックオフが発生した場合は、再試行の間隔(エクスポネンシャルバックオフの挙動)がコンソールログに表示されます

4.3 エラーハンドリングのテスト
- S3へのアクセスに必要な権限(
s3:ListAllMyBuckets
)がない場合、APIは失敗し、500 Internal Server Error
が返されるはずです。
5. CloudWatch Logsで詳細なログの確認
Lambda関数の実行後、CloudWatch Logsに記録されたログを確認して、エクスポネンシャルバックオフの挙動を確認できます。
- Lambdaの実行ログがCloudWatchに出力されるので、そこにバックオフの試行回数や遅延時間が表示されます。
ログ例:
まとめ
- エクスポネンシャルバックオフをLambda関数に実装し、失敗した場合に自動で再試行を行うように設定しました。
- API Gatewayを使って、HTTPリクエストを介してLambda関数を呼び出し、S3バケットのリストを取得する構成を作成しました。
- テスト方法として、Lambdaコンソール、API Gateway経由でのHTTPリクエスト、およびCloudWatch Logsでログを確認する方法を使用しました。
一問道場
質問 #22
トピック 1
あるソフトウェア会社が、Amazon API Gateway、AWS Lambda関数、およびAmazon DynamoDBを使用してREST APIを提供しています。
現在、PUTリクエストでエラーが増えており、そのほとんどが特定のAPIキーで認証された少数のクライアントから発信されています。
エラーの多くは1つのクライアントから発生しており、APIは非クリティカルで、クライアントはリトライを受け入れられるため、即座にエラーを解消する必要はありません。しかし、エラーが顧客に表示されることで、APIの評判が悪化しています。
「非クリティカル」とは、システムやプロセスにおいて、重要度がそれほど高くない、あるいは障害や問題が発生しても即座に重大な影響を及ぼさないことを指します。
顧客体験を改善するために、ソリューションアーキテクトは何を推奨すべきか?
- A. クライアントアプリケーションで「指数バックオフ(リトライ時に待機時間を段階的に長くする)」と「不規則な変動」を使ったリトライロジックを実装する。
- エラー発生時には詳細なエラーメッセージを表示するようにする。
- B. API Gatewayで使用計画を作成し、APIスロットリングを実施する。
クライアントアプリケーションが「コード429(リクエスト制限を超えた)」のエラーを適切に処理できるようにする。
- C. APIキャッシュを有効にして、APIの応答性を向上させる。
10分間の負荷テストを実施し、キャッシュ容量が適切であることを確認する。
- D. Lambda関数に予約済みの同時実行設定を実装し、トラフィックの急増に対応できるようにリソースを確保する。
解説
この問題はクライアント側のエラーに該当します。具体的には、PUTリクエストのエラーが特定のAPIキーで認証されたクライアントから発生しており、そのクライアントはリトライを受け入れられる状況にあります。エラーが顧客に表示されることでAPIの評判が悪化しているものの、即座に解消する必要はなく、非クリティカルな問題として扱われています。
このような場合、リトライメカニズムやエラーハンドリングが重要で、特にクライアント側でリトライ処理を行い、エラーを回避することが推奨されます。
このシナリオでは、エラーが特定のAPIキーを使った少数のクライアントから発生しており、リトライが許容される状況です。したがって、顧客体験を改善するためには、クライアント側でリトライロジックを適切に処理し、APIが過負荷にならないようにすることが重要です。
そのため、最も適切な解決策はAです。
- A. クライアントアプリケーションで「指数バックオフ」と「不規則な変動」を使ったリトライロジックを実装することで、エラーが発生した場合に過剰なリクエストを防ぎ、APIの過負荷を避けることができます。指数バックオフは、再試行時に待機時間を段階的に長くすることで、リソースへの負荷を減らし、リトライ時の競合を避ける効果があります。
他の選択肢についても見てみましょう:
- B. APIスロットリングはリクエスト数を制限する方法であり、これが過剰なリクエストを防ぐのに役立つかもしれませんが、リトライが許容される状況では、クライアント側でリトライロジックを改善する方が適切です。
- C. APIキャッシュは応答性を向上させるかもしれませんが、エラーの根本的な原因を解決するものではありません。キャッシュはデータを一時的に保存し、応答速度を向上させることが目的です。
- D. Lambda関数の同時実行設定を調整することはトラフィック急増時のリソース確保に役立ちますが、このシナリオではエラーの原因がクライアント側の過剰なリクエストである可能性が高く、サーバー側のリソース確保ではなく、クライアント側の改善が必要です。
したがって、Aが最も適切な選択肢です。
023-Amazon FSx for Lustre
理論
大規模データ処理の効率化
企業がデータ集約型アプリケーションをAWS上で運用している場合、パフォーマンスとコストの最適化は重要な課題です。特に、大規模なデータ処理や月次のバッチジョブを実行するシナリオでは、ストレージと計算リソースのコストをどのように削減しつつ、高速なデータアクセスを維持するかが重要です。この記事では、AWSの各種サービスを活用したコスト削減の方法を解説します。
1. Amazon S3 Intelligent-Tiering: 自動的にコスト最適化
Amazon S3 Intelligent-Tiering は、データのアクセス頻度に基づいて自動的にストレージクラスを変更するストレージサービスです。アクセス頻度が低いデータを最適なストレージに自動的に移行するため、コスト削減が可能です。例えば、月次バッチジョブでデータを使用する場合、ほとんど使用されないデータを低コストのストレージクラスに保存し、アクセス頻度が高いデータを適切なストレージクラスで管理することができます。
- コスト削減: 使用していないデータのコストを最適化
- 柔軟性: アクセス頻度に応じてストレージクラスを自動的に変更
2. Amazon FSx for Lustre: 高パフォーマンスなファイルシステム
データ集約型のアプリケーションや大規模なバッチ処理には、Amazon FSx for Lustre が最適です。これは、高速なデータアクセスが求められるシナリオに最適なファイルシステムです。FSx for Lustreは、Amazon S3 と統合することで、データを高速に読み込み、バッチ処理中に必要なパフォーマンスを提供します。
- 高速アクセス: データ処理に最適化された高速なファイルシステム
- S3統合: S3と連携し、データを効率的に取得・処理
3. バッチロード: 大規模データ移行の効率化
バッチロード は、大量のデータを一度に移行する方法です。ジョブ実行前に必要なデータをまとめて移行し、必要なタイミングで効率的にアクセスできるようにする手法です。このアプローチは、リアルタイム処理が不要なシナリオに有効です。
- 効率的なデータ移行: 大量のデータを一度に処理
- 遅延可能: リアルタイム性を必要としない場合に有効
以下は、遅延読み込み(Lazy Loading) と バッチロード の比較表です。
特徴 | 遅延読み込み(Lazy Loading) | バッチロード |
データのロードタイミング | 必要なタイミングでデータを逐次的にロード | 最初に全てのデータを一度にロード |
パフォーマンス | 高速、必要なデータのみをロードするため効率的 | 大量データを一度に処理するため時間がかかる可能性あり |
コスト | 使用した分だけコストが発生、無駄なロードが発生しない | 一度に大量のデータをロードするためコストが高くなる可能性 |
用途 | 必要なデータを必要なときに読み込むシナリオに最適 | 大量のデータをまとめて処理する必要がある場合に適応 |
データ処理の柔軟性 | 高い、必要なデータだけを動的に取得できる | 低い、最初に全てのデータを準備する必要がある |
このように、遅延読み込み(Lazy Loading) は、必要なデータだけを効率的に取得するため、パフォーマンスとコストに優れています。一方、バッチロード は、大量のデータを一度に扱うシナリオに適していますが、パフォーマンスとコスト面での問題が発生することがあります。
4. AWS Storage Gateway: ハイブリッド環境でのデータアクセス
AWS Storage Gateway は、オンプレミスのデータとAWSクラウド間でシームレスにデータを統合するサービスです。ファイルゲートウェイ を使用することで、S3のデータをオンプレミスのアプリケーションから直接アクセス可能にします。これにより、クラウドストレージの利点を享受しつつ、オンプレミス環境と連携できます。
- ハイブリッドアーキテクチャ: オンプレミスとAWSのシームレスなデータ連携
- コスト: クラウドストレージにアクセスするための追加コストが発生する可能性
最適なソリューションの選択
これらのサービスを組み合わせることで、コスト削減とパフォーマンス最適化を実現できます。具体的なシナリオとしては、データをAmazon S3 Intelligent-Tiering に保存し、月次ジョブ実行時にAmazon FSx for Lustre を利用して必要なデータに迅速にアクセスする方法が挙げられます。これにより、常に高性能なデータアクセスを確保しつつ、ストレージコストを抑えることができます。
AWSのサービスは、それぞれ異なるユースケースに最適化されており、シナリオに合わせた選択をすることで、コスト削減とパフォーマンス向上を両立できます。
実践
参照元:
Amazon FSx for LustreとAWS ParallelClusterでHPC環境を学ぶ
1. Lustreファイルシステムの理解
Lustreは、高性能コンピューティング(HPC)向けに特化した分散型ファイルシステムで、並列処理や大量のデータを扱うシステムに最適です。Amazon FSx for Lustreは、このLustreファイルシステムをAWS上でフルマネージドで提供するサービスであり、HPC環境でのストレージニーズに対応します。
2. AWS ParallelClusterの活用
AWS ParallelClusterは、HPCクラスターを簡単に構築、管理できるAWSの公式ツールです。これを使用して、Amazon FSx for Lustreにアクセスし、Lustreファイルシステムの管理方法やデータアクセス方法を学びます。ParallelClusterは、HPCワークロードをクラウド環境でスムーズに運用できるように支援します。
3. AWS HPC Workshopsでの実践
AWS HPC Workshopsでは、HPC技術を学ぶためのハンズオンが提供されています。特に「Build a High-Performance File System」というセクションでは、FSx for LustreをParallelClusterにマウントし、ファイルシステムの操作方法やアクセス方法について解説されています。このセクションを通じて、AWS上での効率的なストレージ管理の仕組みを学ぶことができます。
4. ストライピングと性能検証
ストライピングは、データを複数のストレージに分散して保存し、データ読み書き速度を向上させる技術です。FSx for Lustreを使用して、ストライピングを行い、その性能を検証することが可能です。この検証記録を通じて、どのようにHPC環境でのデータ処理効率を最大化できるかを学びます。
このように、AWS ParallelClusterとAmazon FSx for Lustreを活用して、HPC環境でのストレージとファイルシステム管理を学ぶことができます。また、実際の検証を通じて、ストライピングの性能向上効果も体験できます。
S3にサンプルデータのアップロード
S3に保存したデータをFSx for Lustre経由してアクセスするための準備
from
- S3バケット作成
- サンプルファイルをローカルにダウンロード
- サンプルファイルをS3バケットにアップロード
- ローカルのサンプルファイルを削除
CloudShellで実行

FSx for LustreをマウントしたParallelClusterの構築
以下は、AWS ParallelCluster の設定ファイルで FSx for Lustre を新規作成し、SCRATCH_2 デプロイタイプを指定してマウントする方法を分かりやすく説明した内容です。
1. FSx for Lustreの概要
FSx for Lustre は高性能な分散ファイルシステムで、HPC(高性能計算)などでよく使われます。デプロイタイプは以下の3種類から選べます:
- SCRATCH_1(デフォルト)
- 短期使用向けで安価。
- スループットは固定。
- データの耐久性は保証されません。
- SCRATCH_2(今回使用するタイプ)
- 第2世代のスクラッチファイルシステム。
- 短期使用向けでデータ耐久性は保証されないが、データ容量 1 TB あたり最大 1200 MB/s のスループットにバースト可能。
- PERSISTENT_1
- 永続ファイルシステム(データ耐久性を保証)。
- 高可用性が必要な長期ストレージに適している。
FSx for Lustreのデプロイタイプはスクラッチ2を指定して作成します。
AWS ParallelClusterの設定ファイル
6行追加するだけでクラスター構築と同時にFSx for Lustreも新規作成・マウントしてくれます。
操作手順
1. 設定ファイルを作成する
- 設定ファイルの準備
テキストエディタを使って設定ファイルを作成します。ファイル名は
config.ini
とします。- 設定内容の記述
次の設定をファイルに記述してください。
2. クラスターの作成
- コマンドを実行する
設定ファイルを指定してクラスターを作成します。
- クラスターの進行状況を確認する
クラスターの作成には数分かかります。以下のコマンドでステータスを確認できます。
ステータスが
CREATE_COMPLETE
になれば成功です。3. クラスターに接続して確認する
- クラスターに SSH 接続する
作成したクラスターのマスターインスタンスに接続します。
- FSx for Lustre のマウント確認
接続後に次のコマンドを実行し、FSx for Lustre が正しくマウントされているか確認します。
出力に
/lustre
が表示されていれば成功です。4. 必要に応じた操作
- FSx のパフォーマンス確認:
必要に応じて Lustre ファイルシステムにデータを読み書きし、パフォーマンスを確認します。
- クラスターの削除:
クラスターが不要になったら、次のコマンドで削除します。
注意点
- リソース料金に注意
クラスターを起動している間、AWS リソース(EC2、FSx など)の使用料金が発生します。不要な場合は速やかに削除してください。
- インスタンスとストレージの選定
ワークロードに応じて適切なインスタンスタイプやストレージサイズを選択してください。
- トラブル時の対応
クラスターの作成や接続がうまくいかない場合、設定ファイルや IAM ポリシーを見直してください。
これで、AWS ParallelCluster を使って FSx for Lustre を組み込んだクラスターを簡単に構築できます!
MDT(Meta Data Target)とOST(Object Storage Target)の概要
- MDT (Meta Data Target)
- ファイルシステムのメタデータを保持するストレージです。
- MDS(Meta Data Server)にマウントされたストレージ領域です。
- OST (Object Storage Target)
- ファイルシステムの実データを保存するストレージです。
- OSS(Object Storage Server)にマウントされたストレージ領域です。
Amazon FSx for Lustreはマネージドサービスで、MDSやOSSのサーバー管理が不要です。FSx for Lustreのデプロイ時に、ストレージサイズを1.2TB単位で指定します。この指定されたサイズはOSTのストレージサイズです。
Lustreのストレージアクセスとパフォーマンス
アクセステスト
- 初回アクセス
- 455MBのファイル(
SEG_C3NA_Velocity.sgy
)をFSx for Lustreにマウントされたディレクトリにアクセス。初回アクセス時は、HPCクラスターがUS-East-1にあり、S3バケットがAP-Northeast-1にあるため、16秒のアクセス時間となった。

- キャッシュ後の再アクセス
- データがインスタンスにキャッシュされた後の再アクセスでは、0.24秒と大幅に速くなった。さらに、キャッシュ削除後でもアクセス時間は0.8秒となり、最初のアクセスに比べて格段に速くなった。

- ファイルの状態確認
lfs hsm_state
コマンドでファイルの状態を確認すると、最初は「released」で、ファイルがLustreのストレージにロードされていないことがわかる。キャッシュ後、状態は「exists archived」となり、ファイルがLustreにロードされたことが確認できた。

- ファイル解放
lfs hsm_release
コマンドでファイルを解放し、再度状態を確認すると、ファイルが「released」に戻った。

FSx for Lustreのストレージ容量と使用状況
- MDTの容量とOSTの容量
lfs df
コマンドを使ってFSx for Lustreのストレージ容量を確認した結果、MDTは約35GB、OSTの使用可能容量は1.1TBであることがわかる。
- ファイル保存後の使用容量確認
- 455MBのサンプルファイルをLustreに保存した後、OSTの使用容量が459MBに増加した。ファイルを解放した後、再び使用容量は4.5MBに戻った。
FSx for Lustreのストライピング
- ストライピングの設定
- Amazon FSx for Lustreは、デフォルトでストライピングが有効でない設定です。
lfs getstripe
コマンドを確認したところ、stripe_count
が1となっており、実際にはストライピングされていないことが確認されました。
- 複数のOSTとストライピング
- FSx for Lustreを新たに作成し、複数のOSTを使用する設定(4つのOST、各1.1TB)にした場合でも、ストライピング設定が有効でないことが確認されました。
実際のファイル操作によるパフォーマンス
- ファイル書き込みテスト
- 約10GBのファイルをLustreに書き込むテストを行った結果、2分10秒かかりました。書き込み速度は80.3MB/sとなりました。
このように、FSx for Lustreでは、ストレージの管理、データのキャッシュ、ストライピングの有無に関する設定やパフォーマンスが重要な要素となり、利用状況に応じて最適な管理と運用が求められます。
一問道場
ある企業が、データ集約型のアプリケーションをAWSで運用しています。このアプリケーションは、月に1回実行され、200 TBのデータを扱う共有ファイルシステムでデータを読み書きしてレポートを生成します。計算インスタンスはオートスケーリンググループでスケールしますが、共有ファイルシステムをホストするインスタンスは常時稼働しています。
要件:
- 月に1回のジョブが72時間で実行される。
- 必要なデータに高パフォーマンスアクセスが必要。
- 共有ファイルシステムを置き換えてコストを削減。
選択肢の整理:
A.
- 手順:
- 既存の共有ファイルシステムからデータをAmazon S3に移行。
- S3 Intelligent-Tieringストレージクラスを使用。
- ジョブ実行前に、Amazon FSx for Lustreを使用して、S3から新しいファイルシステムを作成し、遅延読み込みでデータをロード。
- ジョブ終了後にFSx for Lustreファイルシステムを削除。
B.
- 手順:
- 既存の共有ファイルシステムからデータをAmazon EBSに移行。
- Multi-Attachを有効にして、EBSボリュームを複数のインスタンスにアタッチ。
- Auto Scalingグループのユーザーデータスクリプトで、EBSボリュームをインスタンスに接続。
- ジョブ終了後にEBSボリュームをデタッチ。
C.
- 手順:
- 既存の共有ファイルシステムからデータをAmazon S3に移行。
- S3 Standardストレージクラスを使用。
- ジョブ実行前に、Amazon FSx for Lustreを使用して、S3から新しいファイルシステムを作成し、バッチロードでデータをロード。
- ジョブ終了後にFSx for Lustreファイルシステムを削除。
D.
- 手順:
- 既存の共有ファイルシステムからデータをAmazon S3に移行。
- AWS Storage Gatewayを使用して、S3からファイルゲートウェイを作成。
- ジョブ終了後にファイルゲートウェイを削除。
- 特徴:
- S3からファイルゲートウェイを使ってデータを直接アクセスできる。
- Storage Gatewayを使うことで、オンプレミスとAWSのデータ統合が可能。
結論:
最もコスト削減を実現できる選択肢は A です。
- 理由:
- S3 Intelligent-Tieringを使用することで、データのアクセス頻度に応じたコスト管理が可能になり、FSx for Lustreで必要なデータを効率よく処理できるからです。
- バッチ処理によるデータの遅延読み込みで、不要なコストを抑えつつ、72時間のジョブを高パフォーマンスで実行できます。
024-NLB
理論
高可用性と冗長性を持つサービスの設計
クラウド環境で高可用性や冗長性を持つサービスを設計するためには、いくつかの重要なコンセプトとAWSのサービスを理解する必要があります。この記事では、特にネットワークロードバランサ(NLB)やElastic IP(EIP)を使用したサービス設計の本質を解説します。
1. 高可用性と冗長性
高可用性とは、システムやサービスが障害に強く、常に稼働し続けることができる状態を指します。これを実現するためには、冗長性が重要です。冗長性とは、システムの主要なコンポーネントを複数設置し、障害が発生しても他のコンポーネントがその役割を引き継ぐことでサービスの継続を可能にすることです。
AWSで高可用性を実現するためには、次の要素を考慮する必要があります:
- 複数のアベイラビリティゾーン(AZ)にリソースを分散させる。
- 自動スケーリングを活用してトラフィックの増加に柔軟に対応する。
- 障害復旧のために、フェイルオーバー機能やバックアップを設定する。
これにより、特定のAZがダウンしても、他のAZでサービスが稼働し続けることができます。
2. ネットワークロードバランサ(NLB)
- NLB(Network Load Balancer)は、TCP、UDPトラフィックを効率的に処理するためのロードバランサです。特に、低レイテンシと高いスループットが要求されるサービスに向いています。
NLBの主な特徴:
- 高いパフォーマンス: 大量のTCP/UDPトラフィックを扱うため、高速な通信が求められるサービスに最適です。
- IPベースの負荷分散: トラフィックをIPアドレスに基づいて分散させるため、静的IP(Elastic IP)を提供することができます。
- 障害時のフェイルオーバー: サービスを複数のAZに分散することで、障害時に他のAZに自動的に切り替えることができます。
NLBを使用することで、固定IPアドレスを提供することができ、他の企業がそのIPアドレスを許可リストに追加することも可能です。これにより、サービスが外部からのアクセスを安全に受け入れられるようになります。
3. Elastic IP(EIP)
Elastic IPは、AWSが提供する静的IPアドレスです。EIPは、EC2インスタンスやNLBに割り当てることができ、サービスがスケールアウトやインスタンスの再起動を行っても、常に同じIPアドレスを維持できます。
EIPの主な特徴:
- 静的IPアドレス: アプリケーションが必要とする固定IPを提供します。
- 障害復旧: EC2インスタンスやNLBに問題が発生した場合でも、EIPを別のインスタンスやサービスに再割り当てできるため、ダウンタイムを最小限に抑えます。
このように、EIPはサービスを外部のシステムに公開する際に、固定IPアドレスを提供し、他の企業やサービスがそのIPアドレスを許可リストに追加できるようにします。
4. NLBの利用方法
NLBを利用したサービス設計では、以下のような流れで構成を組み立てることができます:
- EC2インスタンスやコンテナ(ECSやEKS)を複数のアベイラビリティゾーンに配置し、高可用性を確保します。
- NLBを使用して、複数のインスタンスやサービスにトラフィックを分散します。NLBの前にElastic IPを割り当てることで、固定IPを提供し、外部からのアクセスを受け入れます。
- DNS設定:
my.service.com
のDNSレコードを、NLBのDNS名にエイリアスとして設定します。これにより、ユーザーは固定IPを使用することなく、サービスにアクセスできます。
- セキュリティ: NLBを利用することで、EC2インスタンスやバックエンドのリソースに直接アクセスされることなく、安全にトラフィックを受けることができます。
5. 結論
高可用性と冗長性を持つサービスを設計する際、NLBとElastic IPを活用することで、固定IPの提供とトラフィックの負荷分散を実現できます。また、NLBは複数アベイラビリティゾーンへの冗長性を提供し、システムの可用性を確保します。このような設計を採用することで、外部企業がIPアドレスを許可リストに追加できるようにし、安全かつ高可用なサービスを提供することができます。
実践
参照元:
(前提)今回の構成と設定
パブリックサブネットに「internet-facing」のNLBを配置し、プライベートサブネットにEC2を配置します。 クライアントPCからインターネット経由でSSHでアクセスしてみます。


NLBの待ち受けポート番号は51512として、ターゲットグループにはEC2(TCP22番ポート)を設定します。 ヘルスチェックはトラフィックと同じTCP22番ポートを使用します。 ターゲットタイプはインスタンスに設定しています。


※ターゲットタイプをIPアドレスに設定した場合は挙動が変わりますのでご注意ください。詳細は以下リンクに記載があります。
ターゲットをインスタンス ID で登録すると、クライアントの送信元 IP アドレスが保持され、アプリケーションに提供されます。ターゲットを IP アドレスで登録する場合、送信元 IP アドレスはロードバランサノードのプライベート IP アドレスとなります。
結論の整理
ターゲットグループのタイプが「インスタンス」の場合、以下の要点が確認されました:
1. NAT Gateway・ルーティング設定
- 不要: EC2からクライアントPCへの通信を返す際、NAT Gatewayや特別なルーティング設定は必要ありません。
2. EC2のセキュリティグループ
以下の許可設定が必要です:
- NLBのプライベートIPからの通信許可
- 目的: ヘルスチェック用(SSH通信)。
- クライアントPCのIPからの通信許可
- 目的: メイントラフィック用(SSH通信)。
3. tcpdumpの記録内容
- 送信元IPアドレス: クライアントPC。
- 宛先ポート番号: 22番ポート(SSH通信)。
4. VPC Flow Logsの記録内容
- 送信元IPアドレス: クライアントPC。
- 宛先ポート番号: 22番ポート(SSH通信)。
まとめ
- NAT Gatewayや特別なルーティング設定は不要。
- セキュリティグループ設定で、NLBのヘルスチェックとクライアントPCの通信を許可する必要あり。
- tcpdumpとVPC Flow Logsには、クライアントPCを送信元とする通信が記録される。
EC2からクライアントPCへ通信を返すために、NAT Gateway・クライアントPC向けのルーティング設定は不要。
今回EC2はプライベートサブネットに配置していますが、NAT Gatewayを設置せずにクライアントPCに通信を返すことができました。 また、プライベートサブネットのルートテーブルにはインターネット向けのルートがありませんが、これも問題ありませんでした。

以下リンクの記載の通り、EC2からの戻りの通信がNLBを経由しているため、このような挙動となるようです。
ポイント整理
- NLBと戻りパケット
- NLBはAWS Hyperplaneを使用し、戻りのパケットもNLBを通過する仕組み。
- AWS Hyperplaneは、AWSが提供する高度なネットワーク仮想化技術の一つで、主にロードバランサやゲートウェイサービスの背後で動作します。
- クライアント側から見ると、NLBと直接通信しているように見える。
- バックエンド側のルーティング設定は不要。
- セキュリティグループ設定
- バックエンドサーバー側でクライアントIP(Internet-facingの場合は
0.0.0.0/0
)の通信を許可する必要がある。
- EC2発のインターネット通信
- 必要な設定: NAT Gatewayとインターネット向けルーティング。
- 用途: パッケージダウンロードなどのアウトバウンド通信。
要点まとめ
NLB経由の通信では特別なルーティングは不要。ただし、EC2発のインターネット通信にはNAT Gatewayが必要となる。
EC2のセキュリティグループ
NLBのプライベートIPからのSSH通信(ヘルスチェック用)
ヘルスチェック用に、NLBのプライベートIPからのSSH通信を許可する必要がありました。 ※NLBにはセキュリティグループを設定できないため、直接IPを指定しています。今回はNLBに固定IPを設定しなかったので、ネットワークインターフェイスの画面からIPを確認しました。

クライアントPCのIPからのSSH通信(メイントラフィック用)
以下リンクの通り、クライアントのIPからの通信を許可する必要があります。
「透過」とは、ネットワークやシステムにおいてデータの送受信が中継機器やサービスを経由しても、元の情報(例: 送信元IPアドレスやポート番号)が変更されず、そのまま保持される状態を指します。
NLBにおける透過性の具体例
- 透過される情報:
- 送信元IPアドレス(クライアントPCのIPアドレス)が変更されずにEC2インスタンスに届く。
- 変更される情報:
- 宛先ポート番号はNLBのリスナールールに従い、ターゲットグループの待ち受けポートに変換される。
透過性があるため、バックエンド(EC2など)はクライアントのIPアドレスをそのまま認識可能ですが、セキュリティグループやアプリケーションの設定でクライアントIPを許可する必要があります。

EC2のtcpdumpでは、送信元IPアドレス:クライアントPC、宛先ポート番号:22番ポートの通信として記録される。
以下はEC2でtcpdumpを実行した際のログです。
見づらくて申し訳ありませんが、送信元と宛先のIPアドレスが記載されているのが分かるかと思います。 10.0.128.108がEC2のIPアドレス、一部マスキングしていますが114.xxx.xxx.xxxがクライアントPCのIPアドレスです。
VPC Flow Logsでも、送信元IPアドレス:クライアントPC、宛先ポート番号:22番ポートの通信として記録される。
VPC Flow Logsの確認方法
- 目的
クライアントPCからEC2への通信ログを特定するため、VPC Flow Logsを使用。
- フィルターパターン
クライアントPCのIPアドレスと宛先ポート番号22、プロトコルTCPを条件に以下のパターンでログを絞り込み。
- 理由
- NLBのヘルスチェック通信ログが大量に記録され、目的の通信を特定しづらいため、クライアントPCのIPを条件に含める。
- 補足
詳細なVPC Flow Logsのフィルター方法については、AWSの公式ブログを参照可能。
フィルターした結果、クライアントPCからのSSHリクエストが許可されているログが確認できました。

まとめの図
これまでの設定と、送信元/宛先アドレスの状態の変化をまとめると、下図のようになりました。 ※well-knownポート以外のポート番号を使うケースについては、便宜上「Un-Wellknown」としました。

おわりに
以上、NLBを使用する場合の設定と動作の確認でした。(ターゲットタイプがインスタンスの場合のみですが)
基本的な事ではありますが、戻りの通信がNLBを経由するのかどうか、セキュリティグループで許可する通信は何か等、意外と理解があやふやだったので、今回しっかり確認することが出来て良かったです。
この記事が少しでも参考になれば幸いです。
一問道場
次の要件を満たす新しいサービスを開発中の会社があります:
- サービスはTCPを使用して静的ポートでアクセスされる。
- サービスは高可用性があり、複数のAZに冗長性がある必要がある。
- サービスは「my.service.com」というDNS名でアクセスできる必要がある。
- サービスは他の企業がそのアドレスを許可リストに追加できるよう、固定IPアドレスを使用する必要がある。
- リソースは単一のリージョン内の複数のアベイラビリティゾーンにデプロイされる。
この要件を満たすソリューションは次のうちどれでしょうか?
A.
- Amazon EC2インスタンスを作成して各インスタンスにElastic IPアドレスを割り当て
- ネットワークロードバランサ(NLB)を作成して静的TCPポートを公開
- EC2インスタンスをNLBに登録
- 「my.service.com」という名前サーバーレコードセットを作成し、EC2インスタンスのElastic IPアドレスをそのレコードセットに割り当て
- EC2インスタンスのElastic IPアドレスを他の企業に提供して、許可リストに追加できるようにする
B.
- Amazon ECSクラスターとアプリケーションのサービス定義を作成
- ECSクラスターに公開IPアドレスを割り当て、ネットワークロードバランサ(NLB)を作成してTCPポートを公開
- ターゲットグループを作成し、ECSクラスター名をNLBに割り当て
- 「my.service.com」というAレコードセットを作成し、ECSクラスターの公開IPアドレスをそのレコードセットに割り当て
- ECSクラスターの公開IPアドレスを他の企業に提供して、許可リストに追加できるようにする
C.
- Amazon EC2インスタンスをサービスのために作成
- 各アベイラビリティゾーンに1つのElastic IPアドレスを作成
- ネットワークロードバランサ(NLB)を作成して割り当てられたTCPポートを公開
- Elastic IPアドレスを各アベイラビリティゾーンのNLBに割り当て、ターゲットグループを作成してEC2インスタンスをNLBに登録
- 「my.service.com」というA(エイリアス)レコードセットを作成し、NLBのDNS名をそのレコードセットに割り当て
D.
- Amazon ECSクラスターとアプリケーションのサービス定義を作成
- クラスター内の各ホストに公開IPアドレスを割り当て、アプリケーションロードバランサ(ALB)を作成して静的TCPポートを公開
- ターゲットグループを作成し、ECSサービス定義名をALBに割り当て
- CNAMEレコードセットを作成し、公開IPアドレスをそのレコードセットに関連付け
- EC2インスタンスのElastic IPアドレスを他の企業に提供して、許可リストに追加できるようにする
上記のオプションの中で、要件に最も適した解決策を選択してください。
解説
要件:
- TCPでアクセスするサービス
- 高可用性と冗長性(複数のアベイラビリティゾーン)
- 固定IPアドレス
- DNS名
my.service.com
でアクセス
各オプションの解説:
- A: EC2インスタンスにElastic IPを割り当ててNLBを使う。
→ 固定IPを提供できるが、EC2インスタンスを手動で管理する必要があり、管理が面倒。
- B: ECSクラスターを使ってNLBに公開IPを割り当てる。
→ ECSタスクは動的なIPを使うため、固定IPアドレスを提供できない。
- C: EC2インスタンスにElastic IPを割り当て、NLBを使用。
→ 固定IPを提供し、高可用性を確保できる最適な方法。
- D: ECSクラスターを使い、ALBで公開IPを割り当てる。
→ ALBは固定IPを提供できないため、要件を満たさない。
結論:
C が最適です。
Elastic IPを使って固定IPを提供し、NLBを使って高可用性と冗長性を確保するからです。
025-EC2 キャパシティ予約
理論
Amazon EC2 キャパシティ予約の整理
キャパシティ予約とは?
Amazon EC2 インスタンスの計算能力(キャパシティ)を特定のアベイラビリティゾーンで予約できる機能です。短期または長期の保証されたキャパシティが必要な場合に使用されます。
主な特徴
- 柔軟性のある期間設定
- 現在の利用向け:すぐに利用可能なキャパシティ予約。期間のコミットメントなし。
- 将来の利用向け:開始日時を指定して予約可能。ただし、指定した期間はコミットメントが必要。
- キャンセルおよび変更
- 現在のキャパシティ予約:いつでもキャンセルまたは変更可能。
- 将来のキャパシティ予約:
- コミットメント期間中はキャンセルや変更不可。
- コミットメント期間終了後に変更やキャンセルが可能。
- インスタンス属性との一致
- 自動一致: デフォルト設定では、インスタンスの属性(インスタンスタイプ、プラットフォーム、アベイラビリティゾーンなど)が一致すれば、自動的にキャパシティ予約が利用される。
- 明示的な指定: 特定のワークロードにキャパシティ予約を割り当て可能。
- 柔軟なリソース管理
- リソースグループ管理: キャパシティ予約をリソースグループ単位で管理することも可能。
用途に応じた選択例
- すぐに利用可能な場合
- 期間のコミットメントが不要。必要なときにいつでも利用可能。
- 将来の予約が必要な場合
- 開始日時とコミットメント期間を設定して予約。期間中は変更やキャンセル不可。
キャパシティ予約のメリット
- ビジネスクリティカルなワークロードで、キャパシティ不足のリスクを回避。
- アベイラビリティゾーン内でのキャパシティ保証。
注意点
- 属性が一致しないインスタンスではキャパシティ予約を使用できない。
- 将来の予約では、コミットメント期間中の柔軟性が制限される。
実践
参照元:
はじめに
AWSはクラウド環境で「使いたいときに使いたいだけリソースを利用できる」サービスですが、物理的なリソースには限界があります。そのため、必要なときにリソースが不足してEC2インスタンスが起動できないリスクが存在します。
こうしたリスクに備える手段が 「オンデマンドキャパシティ予約」 です。この予約を事前に行うことで、リソース不足による障害を回避できます。
オンデマンドキャパシティ予約の特徴
1. メリット
- リソース確保: 必要なときに確実にEC2インスタンスを利用可能。
- ビジネスクリティカルなワークロード向け: 重要な業務におけるキャパシティ不足の回避。
2. デメリット
- コストが発生: キャパシティを予約するだけで、EC2のオンデマンド料金と同額が発生します。実際にEC2インスタンスを起動していなくても課金されるため、慎重に計画する必要があります。
実施方法
以下では、オンデマンドキャパシティ予約の手順をスクリーンショットを交えて説明します。AWS管理コンソールでの操作に慣れていない方でもわかりやすく解説します。
公式情報へのリンク
詳細な仕様や注意点については、以下のAWS公式ページを参照してください。
内容が読みやすく、手順にフォーカスした構成になりましたが、さらに必要に応じて手順やスクリーンショットを補足してください!
キャパシティ予約の実施手順
まずはマネージメントコンソールにログインし、該当リージョンのEC2のページを開きます。
ここで 「キャパシティの予約」>「キャパシティ予約の作成」 をクリックします。

インスタンスの詳細

以下を選択します
- インスタンスタイプ
- プラットフォーム(OS)
- アベイラビリティーゾーン(AZ)
- テナンシー
- プレイスメントグループ
- 数量
インスタンスタイプ、OS、AZなどが多様だと、それごとに設定しなくちゃいけないので結構面倒です。
テナンシーやプレイスメントグループを利用していなければそのままでOKです。
今回は、試しに「t3.nano」「Linux/UNIX」「ap-northeast-3a(大阪リージョン)」で「1台」としてみます。
予約の詳細

「手動」 にすると、キャパシティ予約をキャンセルしない限りはずっと予約が維持されます。
「特定の時間」 にすると、未来の日時を設定しておけば、そのタイミングで自動で予約がキャンセルされます。
また、インスタンスの利用資格に関して、「一致する詳細を持つ任意のインスタンス」 を選択すると、「インスタンスの詳細」で設定したインスタイプ・OS・AZのEC2を起動した場合、自動的にキャパシティ予約の内数としてカウントされます。
「この予約を指定するインスタンスのみを受け入れます。」 を選択すると、EC2を起動する際に、明示的に予約リソースグループのARNを指定する必要があります。
今回は「手動」、「一致する詳細を持つ任意のインスタンス」としてみます。
このまま 「作成」 を押すと確認画面が出てきますので、「確認」 を押すとキャパシティ予約完了です。

キャパシティ予約の確認

上記のように予約ができました。
利用可能が1インスタンスとなっています。
EC2の起動
ここで該当するインスタンスタイプ・OS・AZでEC2を起動してみます。
キャパシティ予約の画面から 「インスタンスの起動」 をクリックしてウィザードを進めます。

どうやら、t3.nanoを予約したのに、t2.microを起動しようとしてしまったみたいです。
このように、パラメータを間違えると起動できないようにしてくれます。
インスタンスタイプを修正したところ無事起動しました。
起動後のキャパシティ予約の画面は以下のとおりです。
ちゃんと起動が1インスタンスとなり、利用可能は0インスタンスに減っています。

予約のキャンセル
キャパシティ予約をしたままだと料金がかかってしまうので不要であればキャンセルしましょう。
「予約をキャンセル」 をクリックします。

確認画面が出ますので
「予約をキャンセル」
をクリックします。
これでキャパシティ予約が解放され、料金がかからない状態にできます。

一問道場
質問 #25
トピック 1
ある企業がオンプレミスのデータ分析プラットフォームを使用しており、このシステムは、企業のデータセンター内にある12台のサーバーを使って高可用性を確保しています。
システムでは、定期的に実行されるジョブ(毎時・毎日のスケジュール)と、ユーザーからのリクエストに基づく一回限りのジョブがあります。
- スケジュールされたジョブは、20分から2時間かかり、システム使用率の65%を占めており、厳しいSLA(サービスレベルアグリーメント)があります。
- ユーザーのジョブは5分以内で完了し、SLAはありません。これらはシステム使用率の35%を占めています。
システム障害時には、スケジュールされたジョブはSLAを満たし続ける必要がありますが、ユーザーのジョブは遅延しても問題ありません。
システムをAmazon EC2インスタンスに移行し、コスト削減を目指すとともに、高可用性を維持しつつ、SLAに影響を与えないソリューションが求められています。
どのソリューションが最もコスト効率よく、要件を満たすでしょうか?
解答選択肢
A.
12台のインスタンスを、選んだAWSリージョン内の2つのアベイラビリティゾーンに分け、
- 各アベイラビリティゾーンに2台のオンデマンドインスタンスをキャパシティ予約で実行し、
- 各アベイラビリティゾーンに4台のスポットインスタンスを実行する。
B.
12台のインスタンスを、選んだAWSリージョン内の3つのアベイラビリティゾーンに分け、
- 1つのアベイラビリティゾーンに4台のオンデマンドインスタンスをキャパシティ予約で実行し、
- 残りのインスタンスをスポットインスタンスで実行する。
C.
12台のインスタンスを、選んだAWSリージョン内の3つのアベイラビリティゾーンに分け、
- 各アベイラビリティゾーンに2台のオンデマンドインスタンスをSavings Plansで実行し、
- 各アベイラビリティゾーンに2台のスポットインスタンスを実行する。
D.
12台のインスタンスを、選んだAWSリージョン内の3つのアベイラビリティゾーンに分け、
- 各アベイラビリティゾーンに3台のオンデマンドインスタンスをキャパシティ予約で実行し、
- 各アベイラビリティゾーンに1台のスポットインスタンスを実行する。
解説:
- A: スポットインスタンスの数が少なく、SLAを満たすために重要なスケジュールされたジョブにはオンデマンドインスタンスが必要です。スポットインスタンスの割合が少ないため、最適な解決策ではありません。
- B: 1つのアベイラビリティゾーンにリソースを集中させると、高可用性が損なわれ、災害時にシステム全体が影響を受けやすくなります。
- C: Savings Planは長期契約に基づいてコストを削減するものであり、「消費ベースのモデル」という要件には合致しません。また、スポットインスタンスのリスクが高くなります。
- D: 3つのアベイラビリティゾーンにリソースを分散し、オンデマンドインスタンスで高可用性を確保し、スポットインスタンスを使ってコスト削減。これにより、災害時の影響を最小化し、コスト効率の良い解決策が実現できます。
結論:
Dが最適な選択肢です。
026-Secrets Manager
理論
AWS Systems Manager Parameter Store と Secrets Manager の違い
項目 | AWS Systems Manager Parameter Store | AWS Secrets Manager |
主な用途 | 設定データや機密情報の管理 | データベースやAPIキーなど、機密情報の管理 |
ローテーション機能 | 手動またはカスタム実装が必要 | 自動ローテーション機能を標準で提供 |
コスト | 無料プランあり(基本機能は無料) | 有料(機能が豊富な分、コストがかかる) |
統合性 | SSMエージェントを通じてEC2やLambdaなどと連携が簡単 | 機密情報を簡単に取得するAPIやSDKを提供 |
暗号化 | AWS KMSで暗号化可能 | デフォルトでKMS暗号化 |
ターゲットユースケース | 環境変数や設定データ、簡易なパスワードの管理 | データベース認証情報や重要なキーの安全な保存 |
アクセス制御 | IAMで可能 | IAMで可能 |
簡単な違いまとめ
- Parameter Store: 設定データや簡単なパスワードの管理。コストを抑えたい場合に適している。
- Secrets Manager: 機密情報の管理がメイン。ローテーションが必要な場合や強力なセキュリティが必要なケースに最適。
AWS Secrets Manager には自動ローテーション機能が標準で提供されています。これにより、保存されているシークレット(例えば、データベースのパスワードなど)を定期的に自動で変更することができます。
自動ローテーションの仕組み
- Secrets Manager はシークレットを保存するだけでなく、それを定期的に変更(ローテーション)する機能も持っています。
- ローテーションの際には、AWS Lambda 関数を使用してパスワードを更新し、その変更をアプリケーションやサービスに反映させます。
- ローテーションの頻度(例えば90日ごと)や、ローテーション処理を行うためのLambda関数も設定することができます。
自動ローテーションの設定手順
- シークレットの作成: AWS Secrets Managerでシークレット(例えば、RDSのデータベースのパスワード)を作成します。
- ローテーションの有効化: 作成したシークレットに対して、ローテーションを有効化します。この際、Lambda関数を指定して、どのようにパスワードをローテーションするかを設定します。
- ローテーションのスケジュール設定: ローテーションの頻度を設定します(例:90日ごと)。
- Lambda関数によるパスワード更新: Lambda関数が実行されることで、シークレットが自動的に更新され、新しいパスワードが適用されます。

実践
Secrets Managerにシークレットを保存
マネージメントコンソールより新規にシークレットを作成し、対象のRDSを指定し、「ユーザ名」と「パスワード」を保存します。

RDSの「ユーザ名」と「パスワード」を入力します。


対象のRDSインスタンスを選択します。
今回は、わかりやすいように、まず「自動ローテーション無効」で作成します。

自動ローテーションを有効にする
作成したシークレットの「ローテーションの編集」から、自動ローテーションを有効にします。
ローテーションスケジュールの設定
ローテーションウィンドウでの指定には、cronおよびrate式をサポートしています。
今回は下記の内容で設定し、「毎日7:00:00 UTC」にローテーションされるように設定します。
項目 | 設定値 |
スケジュール式 | cron(0 7 * * ? *) |
ウィンドウ期間 | 1h |
すぐにローテーション | OFF |
上記を設定します。

<注意点>
- Secrets ManagerのタイムゾーンはUTCです。
- cron式のminute、およびyearは0しか設定できません。
- これはローテーションウィンドウが正時に開始されるため、および1年を超える設定ができないためです。
- すぐにローテーションはネットワーク次第で失敗してしまいますので[OFF]にしておくのがオススメです。
ローテーション関数の設定
ローテーション関数は、あらかじめ用意されているローテーション関数のテンプレートに基づいたローテーション関数を自動作成するか、作成済みの自作のローテーション関数が利用可能です。
項目 | 内容 |
ローテーション関数を作成 | ローテーション関数を自動作成 |
アカウントからローテーション関数を使用 | 作成済みローテーション関数を利用 |
「個別の認証情報を使用してこのシークレットをローテーション」は「いいえ」を選択します。
こちらは後述の「ローテーション戦略」の指定です。今回は一般的な「シングルユーザーのローテーション戦略」をとります。
項目 | 内容 |
いいえ | シングルユーザーのローテーション戦略 |
はい | 交代ユーザーのローテーション戦略 |
設定が完了するとあらかじめ用意されているCloudFormationテンプレートからLambdaにローテーション関数が自動生成されます。

ここで作成されるlambda関数は、「VPC、サブネット、セキュリティグループ」がシークレット作成時に指定したRDSから引き継がれます。

<注意点>
- lambda関数のSGからRDSのSGにアクセス許可されていること。
- プライベートサブネットであればPrivateLinkやNATを経由してSecrets Managerにアクセス可能であること。
- RDSと同じ場所に作成されることに抵抗がある場合は、作成後に移動しましょう。
- NATがない環境では、意外とハマりポイントなのでご注意です。
これでローテーションの設定は完了です。
一問道場
質問 #26
トピック 1
セキュリティエンジニアは、既存のアプリケーションがAmazon S3内の暗号化ファイルからAmazon RDS for MySQLデータベースの認証情報を取得していることを確認しました。次のアプリケーションバージョンでは、セキュリティを向上させるために以下の設計変更を実装したいと考えています:
- データベースは、強力でランダムに生成されたパスワードを使用し、AWSが管理する安全なサービスに保存されなければならない。
- アプリケーションリソースはAWS CloudFormationを使用してデプロイされなければならない。
- データベースの認証情報は90日ごとにローテーションされなければならない。
ソリューションアーキテクトは、アプリケーションをデプロイするためのCloudFormationテンプレートを作成します。
セキュリティエンジニアの要件を満たし、運用上の負担を最小限に抑えるCloudFormationテンプレートに指定するリソースはどれですか?
A.
AWS Secrets Managerを使用してデータベースパスワードをシークレットリソースとして生成します。
AWS Lambda関数リソースを作成してデータベースパスワードをローテーションします。
Secrets ManagerのRotationScheduleリソースを指定して、データベースパスワードを90日ごとにローテーションします。
B.
AWS Systems Manager Parameter Storeを使用してデータベースパスワードをSecureStringパラメータタイプとして生成します。
AWS Lambda関数リソースを作成してデータベースパスワードをローテーションします。
Parameter StoreのRotationScheduleリソースを指定して、データベースパスワードを90日ごとにローテーションします。
C.
AWS Secrets Managerを使用してデータベースパスワードをシークレットリソースとして生成します。
AWS Lambda関数リソースを作成してデータベースパスワードをローテーションします。
Amazon EventBridgeのスケジュールされたルールリソースを作成して、90日ごとにLambda関数のパスワードローテーションをトリガーします。
D.
AWS Systems Manager Parameter Storeを使用してデータベースパスワードをSecureStringパラメータタイプとして生成します。
AWS AppSync DataSourceリソースを指定して、データベースパスワードを自動的に90日ごとにローテーションします。
解説
この問題は、セキュリティ要件を満たしながら、最小限の運用負荷でデータベースのクレデンシャルをローテーションする方法を求めています。以下に各選択肢の解説を行います。
A. AWS Secrets Manager と RotationSchedule の組み合わせ
- Secrets Manager は、AWS が提供するフルマネージドなシークレット管理サービスです。強力なランダムなパスワードの生成、保存、管理、ローテーションをサポートします。
- RotationSchedule リソースを使用することで、Secrets Manager が自動的にパスワードをローテーションします。AWSはLambda関数を利用して、パスワードを自動的にローテーションします。
- この方法は、運用負荷が非常に少なく、Secrets Managerが自動でパスワードの管理とローテーションを行うため、セキュリティ要件を満たし、非常に効率的です。
B. AWS Systems Manager Parameter Store と RotationSchedule の組み合わせ
- Systems Manager Parameter Store は、シークレット管理のために使えるもう1つのサービスですが、Secrets Managerよりもシンプルな機能を提供します。
- SecureString パラメータタイプを使用して、暗号化されたパラメータを保存しますが、RotationScheduleは直接サポートしていません。このオプションでは、パスワードのローテーションを実行するためにAWS Lambda関数を手動で作成する必要があり、そのため運用負荷が増加します。
- Parameter Store を使った場合、Secrets Managerのような自動ローテーション機能がないため、運用負荷が高くなります。
C. AWS Secrets Manager と EventBridge によるスケジュール管理
- AWS Lambda を使ってパスワードをローテーションし、EventBridge を利用して90日ごとにLambda関数をトリガーする設定を行います。
- EventBridge によるスケジュールトリガーは可能ですが、Secrets Manager に組み込まれている RotationSchedule 機能を使えば、同じ結果をより簡単に得ることができます。したがって、運用負荷は高くなり、無駄な手間がかかる可能性があります。
D. AWS Systems Manager Parameter Store と AWS AppSync
- AppSync はGraphQLベースのデータ操作を提供するサービスであり、パラメータのローテーションには通常使用しません。Parameter Storeのパラメータを自動的にローテーションするためには、通常AWS Lambdaを使用しますが、AppSyncはその役割には適していません。
- この方法は、運用負荷が高く、不適切なリソースの選択であり、正しい選択肢ではありません。
結論
最も効率的で運用負荷が少ないのは 選択肢A です。AWS Secrets Manager と RotationSchedule を利用すれば、パスワードの生成、保存、ローテーションがすべて自動で行われるため、セキュリティ要件を満たしつつ、管理が簡単になります。
027-REST API と HTTP API
理論
API (Application Programming Interface) とは、アプリやサービス同士がデータや機能をやり取りするための仕組みです。
例えるなら、レストランの「メニュー」のようなものです。お客さん(アプリ)は、メニュー(API)を見て注文し、料理(データや機能)を受け取ります。
特徴
- 他のサービスと簡単に連携可能。
- 内部の仕組みを知らなくても使える。
- 開発効率を上げる。
例
- Google Maps API: アプリで地図を表示。
- Twitter API: ツイートを取得・投稿。
メリット
- 時間短縮。
- 機能の再利用。
以下は Amazon API Gateway の REST API と HTTP API の比較表です。それぞれの特徴を対照的にまとめました。
特徴 | REST API | HTTP API |
利用目的 | フル機能のAPIを構築する用途に適している | シンプルでコスト効率の良いAPIを構築する用途に適している |
コスト | 高い(HTTP APIに比べると) | 低い |
パフォーマンス | HTTP APIに比べて若干遅い | 高速 |
統合オプション | - AWS Lambda
- AWSサービス(直接統合)
- VPCリンク | - AWS Lambda
- VPCリンク |
セキュリティ | AWS IAMカスタム認証ロジックCognitoユーザープール | AWS IAMJWT認証 |
ステージ管理 | 各ステージごとに設定可能 | 簡略化されたステージ管理 |
WebSocketサポート | 非対応 | 非対応 |
リクエスト変換 | 詳細なマッピングテンプレートが使用可能 | 基本的なリクエスト変換のみ |
カスタムドメインのサポート | 対応 | 対応 |
スロットリング | 詳細な設定が可能 | シンプル |
ロギング | CloudWatch Logsで詳細なログを記録可能 | CloudWatch Logsで基本的なログを記録可能 |
ターゲット市場 | 複雑で多機能なAPIを必要とする場合 | シンプルなAPIを必要とする場合 |
選択のポイント
- REST API: 高度な制御や詳細な機能が必要な場合に適しています。
- HTTP API: シンプルなAPIでコスト効率やパフォーマンスを重視する場合に適しています。
違いのまとめ
特徴 | AWS AppConfig | AWS Secrets Manager |
目的 | アプリケーション設定の管理・配信 | 機密情報の安全な保存・管理 |
主な保存対象 | タイムアウト値、機能フラグなど | パスワード、トークン、APIキーなど |
配信機能 | 段階的な設定変更やリアルタイム反映 | 機密情報を安全に配信 |
セキュリティ管理 | 主に設定変更に焦点を当てる | 機密情報の暗号化や自動更新に焦点 |
併用する場合
- AppConfig を使用してアプリケーションの設定を管理し、その設定内で Secrets Manager に保存された機密情報を参照することが可能です。
- 例: AppConfig で「データベース接続を有効化するフラグ」を管理し、接続情報は Secrets Manager で安全に管理する。
実践
参照元:
HTTP API とは
HTTP API は AWS re:Invent 2019 でベータ版が発表され、今年の 3 月に GA となった Amazon API Gateway (以下、 API Gateway) の新機能です。
もともと API Gateway は、 REST API と WebSocket API をサポートしていました。
HTTP API を使用すると、 REST API よりも低レイテンシーおよび低コストで、 RESTful API を作成することができます。
ただし、旧世代の REST API の方が多くの機能を有しているため、単純に HTTP API を選択すれば良い、ということではありません。
HTTP API と REST API の機能の違いは、以下公式ドキュメントをご覧ください。
今回のアップデート
これまでは、 HTTP API では AWS Lambda 関数と任意の HTTP バックエンドにリクエストをルーティングすることができましたが、 AWS サービス統合はサポートされていませんでした。
よって、バックエンドとして他の AWS サービスを利用したい場合は、 AWS Lambda 関数もしくは HTTP バックエンド経由でアクセスすることが必要でした。

今回新たに以下 5 つの AWS サービスとの統合が追加されました。
- AWS AppConfig
- Amazon EventBridge
- Amazon Kinesis Data Streams
- Amazon SQS
- AWS Step Functions
サポートするアクションについては、 公式ドキュメント を参照ください。
今回のアップデートで、 API 経由で直接 AppConfig から設定情報を取得したり、 EventBridge にイベントを発行したり、 Kinesis Data Streams を介してデータを取り込んだり、 SQS にメッセージを送信したり、 Step Functions でワークフローを開始したりすることができるようになりました。

試してみる
では実際に試してみましょう。
今回は AWS AppConfig との統合を確認してみます。
AppConfig と統合することで、設定情報を HTTP API から取得することが可能です。
事前準備
今回のアップデート内容を試すために、以下を事前に作成しておきます。
- AppConfig
- IAM ロール
AppConfig には YouTube API を利用する際の設定情報 (対象プレイリストの ID) を格納しています。
AWS AppConfig と HTTP API を直接統合する方法について、日本語で説明します。以下は、API Gateway を使用して AWS AppConfig から設定データを取得する手順です。
ステップ 1:AWS AppConfig の設定を作成する
- AWS AppConfig でアプリケーションを作成
- AWS 管理コンソールにログインし、AppConfig を開きます。
- 新しいアプリケーション(例:
YouTube-notification-app
)を作成します。 - 環境(例:
dev
)を作成します。 - 設定データをアップロードします。設定データは、S3 や Systems Manager などから取得できます。以下のような JSON データを例として使用します:
ステップ 2:API Gateway HTTP API を作成する
- API Gateway で HTTP API を作成
- AWS 管理コンソールで API Gateway を開きます。
- 新しい HTTP API を作成します(例:
YouTube-notification-api
)。 - 新しい GET ルート(例:
/appconfig
)を作成します。このルートが AWS AppConfig から設定データを取得するエンドポイントになります。
ステップ 3:API Gateway で AppConfig を統合する
- API Gateway で AppConfig を統合
- API Gateway コンソールで Integrations(統合)を選択します。
- AWS Service を選択し、統合タイプとして
AppConfig
を選択します。 - 必要な設定を行います:
- リージョン:AppConfig があるリージョンを選択します。
- サービス:
AppConfig
を選択します。 - アクション:
GetConfiguration
を選択します。 - パラメータ:
Application
:YouTube-notification-app
Environment
:dev
Configuration
:default
ステップ 4:必要な権限の設定
- API Gateway に権限を付与
- API Gateway が AppConfig にアクセスできるように、適切な IAM ロールを作成します。このロールに
appconfig:GetConfiguration
権限を付与します。
ステップ 5:API のデプロイ
- API をデプロイ
- 設定が完了したら、HTTP API を新しいステージ(例:
prod
)にデプロイします。 - デプロイ後、API Gateway によって生成された URL(例:
https://<api-id>.execute-api.<region>.amazonaws.com/appconfig
)を取得します。
ステップ 6:API を呼び出して AppConfig の設定データを取得
- API を使用して設定データを取得
- 以下のように
curl
コマンドを使用して、API Gateway 経由で AppConfig の設定データを取得できます: - レスポンスとして、以下のような設定データが返されます:
まとめ
これで、API Gateway を使用して直接 AWS AppConfig から設定データを取得できるようになります。Lambda を使わずに、HTTP API 経由で AppConfig のデータを取得する方法です。
IAM ロールは HTTP API を作成する際に、 Invocation role で指定します。
今回は、 AppConfig の GetConfiguration を許可するように以下ポリシーにて事前に作成しています。
HTTP API の作成
AWS マネジメントコンソールから API Gateway を開き、 API を作成 ボタンをクリックします。

API タイプは HTTP API を選択しましょう。

API 名に任意の名前を入力。

そのまま進めていきます。

ステージもデフォルト、自動デプロイも有効のまま進めていきます。

作成ボタンをクリックして作成しましょう。

HTTP API ができたので、左ペインから ルート を選びます。

ルートの作成画面で、 Create ボタンをクリック。

今回は
GET
メソッドを選択し /appconfig
パスを入力しました。
ルートが作成されたので、 統合をアタッチする ボタンをクリックしてバックエンドリソースを定義していきましょう。

統合を作成してアタッチ ボタンをクリック。

統合ターゲットに今回追加された各 AWS サービスが存在することがわかります。 今回は AWS AppConfig を選択します。

AWS AppConfig との統合では現在 1 つのアクションのみをサポートしているので、 GetConfiguration を選択しましょう。

GetConfiguration
を指定したので、 設定情報の取得に必要なパラメータ をリクエストからマッピングする設定を行います。 今回はデモなので設定や Client ID を直接指定していますが、 $request.body.Configuration
や $request.body.ClientId
と定義することでリクエスト時に柔軟にパラメータを指定することも可能です。
これで HTTP API の作成は完了です。

API を叩いてみる
実際に作成した HTTP API を実行してみましょう。 指定したパスに対して GET リクエストを送信してみます。
きちんと AppConfig に定義してある設定情報を取得することができました!!

おわりに
API Gateway から他の AWS サービスを利用する際、これまでは AWS Lambda を経由したアクセスが主流でしたが、このように直接他のサービスとの統合が簡単に低コストでできてしまうならこちらを使ったほうがよさそうですね。
ただしまだまだサポートしているサービスおよびアクションも限られているので、今後のアップデートに期待しましょう!
一問道場
質問 #27
トピック 1
ある企業が複数のAmazon DynamoDBテーブルにデータを保存しています。ソリューションアーキテクトは、このデータをHTTPS経由でシンプルなAPIを通じて公開するためのサーバーレスアーキテクチャを使用する必要があります。このソリューションは、需要に応じて自動的にスケールする必要があります。
次のどのソリューションがこれらの要件を満たしますか?(2つ選んでください。)
A. Amazon API Gateway REST APIを作成し、このAPIをAPI GatewayのAWSインテグレーションタイプを使用してDynamoDBへの直接統合で構成します。
B. Amazon API Gateway HTTP APIを作成し、このAPIをAPI GatewayのAWSインテグレーションタイプを使用してDynamoDBへの直接統合で構成します。
C. Amazon API Gateway HTTP APIを作成し、このAPIをAWS Lambda関数への統合で構成し、DynamoDBテーブルからデータを返します。
D. AWS Global Acceleratorでアクセラレータを作成し、このアクセラレータをAWS Lambda@Edge関数の統合で構成して、DynamoDBテーブルからデータを返します。
E. Network Load Balancerを作成し、リスナールールを設定して、リクエストを適切なAWS Lambda関数に転送します。
解説
この問題では、以下の要件を満たすソリューションを選ぶ必要があります:
- シンプルなAPIを提供。
- HTTPS経由でアクセス可能。
- サーバーレスアーキテクチャを使用。
- 需要に応じて自動スケールする。
以下、それぞれの選択肢について検討します。
選択肢 A
Amazon API Gateway REST APIを作成し、このAPIをAPI GatewayのAWSインテグレーションタイプを使用してDynamoDBへの直接統合で構成します。
- API Gateway REST APIはDynamoDBと直接統合でき、サーバーレスでシンプルなAPIを構築可能です。
- REST APIは需要に応じて自動スケールするため、この要件にも適合しています。
適切です。
選択肢 B
Amazon API Gateway HTTP APIを作成し、このAPIをAPI GatewayのAWSインテグレーションタイプを使用してDynamoDBへの直接統合で構成します。
- HTTP APIはコスト効率が高いですが、DynamoDBとの直接統合をサポートしていません。
- DynamoDBにアクセスする場合、AWS Lambdaなどを使用する必要があります。
不適切です。
選択肢 C
Amazon API Gateway HTTP APIを作成し、このAPIをAWS Lambda関数への統合で構成し、DynamoDBテーブルからデータを返します。
- HTTP APIはシンプルでコスト効率が高く、AWS Lambdaを統合することでDynamoDBへのアクセスが可能です。
- サーバーレスであり、需要に応じてスケールするため、要件を満たします。
適切です。
選択肢 D
AWS Global Acceleratorでアクセラレータを作成し、このアクセラレータをAWS Lambda@Edge関数の統合で構成して、DynamoDBテーブルからデータを返します。
- AWS Global Acceleratorはネットワークパフォーマンスの最適化が主な用途であり、APIの構築には適していません。
- また、Lambda@Edgeは通常、CloudFrontと連携してエッジでコードを実行する用途に使用されます。
不適切です。
選択肢 E
Network Load Balancerを作成し、リスナールールを設定して、リクエストを適切なAWS Lambda関数に転送します。
- Network Load Balancerはレイテンシーの低いネットワークトラフィックのルーティングが主な用途で、HTTPSベースのAPIには不適切です。
- サーバーレスアーキテクチャの一部として利用されることは一般的ではありません。
不適切です。
結論
正しい選択肢は A と C です。
これらの選択肢は以下の理由で要件を満たします:
- サーバーレスアーキテクチャで構築可能。
- シンプルなAPIを提供。
- 自動スケールに対応。
- HTTPSでアクセス可能。
028-URL にリダイレクト
理論
AWSで実現する効率的なリダイレクトサービスの基礎知識
リダイレクトは、ユーザーが特定のURLにアクセスした際に別のURLへ転送する仕組みです。AWSはスケーラブルかつコスト効率の高いリダイレクトサービスを構築するための多くのツールを提供しています。本記事では、その実現方法をシンプルに解説します。
リダイレクトの概要
リダイレクトには主に以下の2種類があります:
- 301リダイレクト: 永久的な転送。SEOに適している。
- 302リダイレクト: 一時的な転送。短期間の用途に適している。
この機能を効率的に実現するには、動的ルールの設定やHTTPS対応などが必要です。
AWSを活用したリダイレクト設計
1. AWS Lambda
サーバーレス環境でコードを実行できるAWSのコンピューティングサービスです。
- 用途: ユーザーリクエストに応じて、動的にリダイレクトURLを決定。
- 利点: スケーラビリティが高く、イベントベース課金でコスト効率が良い。
2. Amazon API Gateway
HTTP/HTTPSリクエストを受け付けるAPIを公開できるサービスです。
- 用途: リクエストをLambda関数にルーティング。
- 利点: HTTPSサポート、カスタムドメイン設定が容易。
3. Amazon Route 53
AWSのスケーラブルなDNSサービス。
- 用途: ドメイン名とリダイレクト先URLを紐付け。
- 利点: 高速で信頼性のある名前解決。
4. AWS Certificate Manager(ACM)
SSL/TLS証明書を簡単に発行・管理できるサービス。
- 用途: HTTPS通信を暗号化し、安全性を確保。
- 利点: 無料で証明書を発行し、自動更新が可能。
5. Amazon CloudFront
コンテンツ配信ネットワーク(CDN)サービス。
- 用途: Lambda@Edgeを使い、グローバルなリダイレクトを実現。
- 利点: ユーザー近くで処理することで、低レイテンシーを実現。
リダイレクトサービスの構築フロー
- リダイレクトルールを定義
JSONファイルなどにドメインと転送先URLのルールを記述。
- Lambdaでリクエスト処理を構築
ユーザーリクエストを解析し、ルールに従ってリダイレクトURLを返却。
- API Gatewayでエンドポイントを作成
HTTPSリクエストを受け付けるエンドポイントを設定。
- SSL証明書を適用
ACMで発行した証明書をAPI GatewayやCloudFrontに設定し、HTTPS通信をサポート。
AWSを活用する利点
- スケーラビリティ
トラフィック量に応じて自動的にリソースを拡張。
- コスト効率
サーバーレスで運用コストを最小化。
- セキュリティ
HTTPS対応やIAMポリシーで高い安全性を実現。
- 運用の簡便性
サーバー管理不要で設定や運用がシンプル。
まとめ
AWSを活用すれば、柔軟性が高くスケーラブルなリダイレクトサービスを効率的に構築できます。LambdaやAPI Gatewayを中心に、Route 53やACMを組み合わせることで、セキュアでコスト効率の良いソリューションを実現可能です。クラウド技術を活用したスマートなリダイレクト設計を目指しましょう!
実践
Lambda@EdgeはLambdaをCloudFrontのエッジロケーションで実行するもので、CloudFrontで受けたアクセスに対して何かしらの処理を実行するのに安くて便利な方法です。
今回はLambda@Edgeを使ってリダイレクトやフォワードするための方法を紹介します。
リダイレクトやフォワードの為にわざわざApacheサーバーなどを用意しなくてよいですし、Lambdaを使うことで(常時サーバー立ち上げが必要ないので)非常に安く済みます。
手段の一つとして覚えておき活用してもらえたら嬉しく思います。

Lambda@Edge を利用したリダイレクト・フォワード設定ハンズオン
Lambda@Edgeを利用すると、CloudFrontディストリビューションを通じてリクエストやレスポンスに対して柔軟な処理を追加できます。ここでは、リダイレクトやフォワードを行う方法を学びます。
ステップ 1: ダミーオリジンの作成
まず、CloudFrontディストリビューションを作成するために、ダミーオリジンを作成します。これにより、リダイレクト処理を行うための出発点を作ります。
- S3 バケットの作成
- S3コンソールにログインし、「バケットを作成」をクリックします。
- 任意の名前(例:
dummy-origin-bucket
)を入力し、リージョンを選択します。 - バケットを作成したら、そのバケットに適当なダミーファイル(例えば、
index.html
)をアップロードします。
ステップ 2: CloudFrontの構築
次に、作成したダミーオリジンを使用してCloudFrontディストリビューションを構築します。
- CloudFrontディストリビューションの作成
- CloudFrontのコンソールにアクセスし、「Create Distribution」を選択します。
- オリジンタイプとして「S3」を選択し、先程作成したダミーS3バケットをオリジンとして設定します。
- 必要に応じてキャッシュ設定やエラーページ設定を行います。
- 作成後、CloudFrontのディストリビューションIDをメモします。
ステップ 3: Lambda@Edgeの構築
Lambda@Edge 関数は、必ず us-east-1(北バージニア)リージョン に配置されている必要があります
Lambda@Edgeを使って、CloudFrontリクエストを処理します。ここでは、特定のURLパスに対してリダイレクトやフォワードを実行します。
- Lambda関数の作成
- AWS Lambdaのコンソールに移動し、「Create function」をクリックします。
- 関数名(例:
redirect-function
)を設定し、ランタイムを「Node.js 22.x」などに設定します。 - 以下のコードを貼り付け、リダイレクトのロジックを追加します:
- Lambda@Edgeへのデプロイ
- ポリシーを修正
- Lambda関数を作成したら、「Actions」から「Deploy to Lambda@Edge」を選択します。
- 「CloudFrontディストリビューション」と「CloudFrontイベントの選択」画面で、先ほど作成したディストリビューションを選択し、トリガーを「Viewer Request」に設定します。

ステップ 4: 動作確認
- CloudFrontディストリビューションのURLにアクセス
- CloudFrontディストリビューションのURL(例:
d123abc456xyz.cloudfront.net
)にアクセスし、/path
に該当するURL(例:http://d123abc456xyz.cloudfront.net/path
)にアクセスします。 - 期待通りに、指定したリダイレクト先(例:
https://www.example.com/new-path
)にリダイレクトされることを確認します。
まとめ
これで、Lambda@Edgeを使ってCloudFrontリクエストに対してリダイレクトやフォワードを行う設定が完了しました。これを応用すれば、様々なリダイレクトパターンや複雑なリクエスト処理を実現できます。
一問道場
質問 #28
トピック 1
企業が新たに 10 個のドメイン名を登録しました。これらのドメインはオンラインマーケティングに使用されます。企業は、各ドメインの訪問者を特定の URL にリダイレクトするソリューションを必要としています。すべてのドメインとターゲット URL は JSON ドキュメントに定義されています。また、DNS レコードは Amazon Route 53 によって管理されています。
ソリューションアーキテクトは、HTTP および HTTPS リクエストを受け入れるリダイレクトサービスを実装する必要があります。
次のステップの組み合わせのうち、最小限の運用負荷で要件を満たすものはどれですか?(3つ選択)
A. Amazon EC2 インスタンス上で動作する動的なウェブページを作成します。このウェブページを、イベントメッセージと JSON ドキュメントを組み合わせてリダイレクト URL を検索し、応答するように設定します。
B. HTTP と HTTPS のリスナーを含む Application Load Balancer を作成します。
C. AWS Lambda 関数を作成します。この関数は、イベントメッセージと JSON ドキュメントを組み合わせてリダイレクト URL を検索し、応答します。
D. カスタムドメインを使用して AWS Lambda 関数を公開するために、Amazon API Gateway API を使用します。
E. Amazon CloudFront ディストリビューションを作成し、Lambda@Edge 関数をデプロイします。
F. AWS Certificate Manager(ACM)を使用して SSL 証明書を作成します。ドメインを Subject Alternative Names(SANs)として含めます。
解説:
- C. AWS Lambda 関数: リダイレクトのロジックを Lambda 関数で処理し、運用負荷を最小化できます。Lambda 関数はサーバーレスでスケーラブルであり、複雑なサーバー管理を避けられます。
- E. Amazon CloudFront + Lambda@Edge: CloudFront と Lambda@Edge を使用すると、リダイレクトをエッジロケーションで処理でき、低遅延でスケーラブルなサービスを提供できます。これにより、ユーザーに最寄りのエッジロケーションからリダイレクトが行われ、パフォーマンスが向上します。
- F. AWS Certificate Manager: SSL/TLS 証明書を使用して、HTTPS リクエストを安全に処理するために必要です。ACM を使用すると、証明書の管理が簡素化され、運用負荷が軽減されます。
これらの選択肢を組み合わせることで、最小限の運用負荷でリダイレクトサービスを提供できるようになります。
029-AWSコスト配分タグ
理論
AWS 組織でのコスト管理とタグ付けの重要性
AWS では、リソースの使用状況やコストを効率的に追跡し、管理するために「タグ付け」と「コストレポート」を活用することが非常に重要です。特に、複数の AWS アカウントを管理する企業においては、正確なコスト計算と適切な請求処理が求められます。以下では、AWS 組織におけるコスト管理に関する基本的な概念とその活用方法について解説します。
1. AWS タグ付けの活用
タグ付けは、リソースにメタデータを追加することで、リソースを識別・管理するための重要な手段です。AWS では、リソースに「キー」と「バリュー」のペアを使ってタグを付けることができます。たとえば、コスト管理のために「costCenter」というタグを使用することで、リソースごとのコストを追跡しやすくなります。タグを適切に設定することで、以下の利点が得られます。
- リソースの整理: 複数のリソースを整理し、どのリソースがどのプロジェクトや部門に関連しているかを明確にします。
- コストの追跡: タグに基づいてコストを分類し、特定の部門やプロジェクトのコストを正確に把握できます。
AWS Organizations では、複数アカウントに対して統一的にタグを管理することができます。これにより、全アカウントにおけるリソースのコストを一元的に追跡することが可能になります。
2. AWS コストと使用状況レポート
AWS では、詳細なコストと使用状況のレポートを生成することができます。これを「AWS コストと使用状況レポート (AWS CUR)」と言い、企業がどのリソースに対してどの程度のコストが発生しているのかを把握するために非常に有用です。AWS CUR は、コストに関する詳細なデータを Amazon S3 に保存でき、複数のアカウントやサービスごとのコストを分析することができます。
AWS CUR では、以下の項目が確認できます。
- サービス別コスト: 各 AWS サービスのコストを確認できます。
- リソース別コスト: 特定のリソース(EC2 インスタンス、S3 バケットなど)ごとのコストを追跡できます。
- タグ別コスト: 特定のタグ(例えば「costCenter」)を基にしたコストの内訳を確認できます。これにより、プロジェクトや部門ごとのコストを管理できます。
3. AWS Cost Explorerの利用
AWS Cost Explorer は、コストと使用状況を視覚的に分析するためのツールです。これにより、過去のコストデータをグラフや表形式で表示し、トレンドや異常を迅速に検出できます。また、Cost Explorer では、タグを使ってコストをフィルタリングすることができるため、特定の部門やプロジェクトのコストを簡単に確認できます。
Cost Explorer の主な機能は次の通りです。
- コスト分析: 過去のコストデータを表示し、トレンドや使用状況を確認できます。
- 予算管理: 予算を設定し、コストが予算を超過しないように監視できます。
- レポート作成: 必要に応じてレポートを作成し、コストの詳細を把握できます。
4. 自動化とコスト管理の統合
企業が複数の AWS アカウントを運営している場合、コスト管理の自動化は重要です。AWS では、AWS Lambda や AWS SDK を使って、コストレポートを自動的に処理し、定期的に更新することが可能です。これにより、手動でレポートを確認する必要がなくなり、コスト計算が効率化されます。
例えば、AWS Lambda を使用して定期的にコストレポートを取得し、タグ別に集計してレポートを生成することができます。これにより、コスト管理がシームレスに行えるようになります。
costCenter
は 自分で定義するタグ(ユーザー定義タグ)です。AWS では、リソースにタグを付けることで、それらを分類・管理できます。costCenter
タグは、特定の部門やプロジェクト、予算センターにリソースを関連付けて、コストを追跡・分析するために使用されます。主なポイント:
costCenter
は AWS のデフォルトタグではなく、ユーザーが任意で定義できます。
- 例えば、
costCenter: Marketing
やcostCenter: Engineering
など、部門やプロジェクトを示す値を設定します。
- このタグを使うことで、AWS のリソースにかかるコストを部門別、プロジェクト別に分類し、管理・最適化できます。
タグを活用することで、コストの透明化や効率的なコスト管理が可能になります。
5. AWS Organizations と一元的なコスト管理
AWS Organizations を活用すると、複数の AWS アカウントを一元管理でき、全アカウントに対して共通のポリシーや設定を適用できます。これにより、各アカウントのコストを一元的に管理し、特定の部門やプロジェクトに対する請求を正確に行うことができます。
AWS Organizations では、以下のような管理が可能です。
- リソースのタグ付けポリシー: 組織全体でタグ付けポリシーを統一し、タグの一貫性を保つことができます。
- コストと請求の統合: 複数アカウントのコストデータを一元管理し、請求の仕組みを簡素化できます。
結論
AWS でコスト管理を行う際には、タグ付け、コストレポート、Cost Explorer、そして AWS Organizations を組み合わせて活用することが非常に重要です。これにより、リソースごとのコスト追跡や正確な請求処理が可能となり、企業のコスト管理が効率化されます。
一問道場
質問 #29
トピック 1
複数の AWS アカウントを持つ企業が AWS Organizations を使用しています。この企業の AWS アカウントでは、VPC、Amazon EC2 インスタンス、コンテナがホストされています。
企業のコンプライアンスチームは、各 VPC にセキュリティツールを展開しており、これらのツールは EC2 インスタンス上で動作しています。ツールは情報をコンプライアンスチーム専用の AWS アカウントに送信しています。すべてのコンプライアンス関連リソースには「costCenter」というタグが付けられており、値として「compliance」が設定されています。
企業は、これらのセキュリティツールのコストを把握し、コンプライアンスチームの AWS アカウントに請求できるようにしたいと考えています。コスト計算は正確である必要があります。
要件に最適な対応はどれですか?
A. 管理アカウントで costCenter タグを有効にし、月次の AWS コストと使用状況レポートを管理アカウントの S3 バケットに保存します。レポート内で costCenter タグ別にコストの内訳を取得します。
B. メンバーアカウントで costCenter タグを有効にし、月次の AWS コストと使用状況レポートを管理アカウントの S3 バケットに保存します。AWS Lambda 関数を毎月実行し、レポートを取得して costCenter タグのリソースの総コストを計算します。
C. メンバーアカウントで costCenter タグを有効にし、管理アカウントから月次の AWS コストと使用状況レポートをスケジュールして、レポート内で costCenter タグ別にコストを計算します。
D. AWS Trusted Advisor でカスタムレポートを作成し、コンプライアンスチームの AWS アカウントに対して、costCenter タグ付きリソースの月次請求サマリーを生成します。
解説
この問題では、複数の AWS アカウントを持つ企業が、コンプライアンスチームの AWS アカウントにセキュリティツールのコストを正確に請求するための方法を検討しています。要件は、
costCenter
タグを使用してリソースを特定し、そのコストを集計することです。最適な対応方法
A. 管理アカウントで
costCenter
タグを有効にし、月次の AWS コストと使用状況レポートを S3 バケットに保存し、レポート内で costCenter
タグ別にコストを取得する。- 解説: これにより、すべてのアカウントからコスト情報を集計し、
costCenter
タグを基にコストの内訳を簡単に取得できます。これが最も簡単で正確な方法です。
B. メンバーアカウントで
costCenter
タグを有効にし、AWS Lambda 関数を使用して毎月レポートを取得し、コストを計算する。- 解説: Lambda 関数でコスト計算を行う方法ですが、管理アカウントでのレポート生成だけで十分に対応可能なので、運用負荷が高くなります。
C. メンバーアカウントで
costCenter
タグを有効にし、管理アカウントから月次のコストレポートを取得し、コストを計算する。- 解説: これも可能ですが、管理アカウントでレポートを取得する方法は最初の選択肢に近いので、特に追加の操作は不要です。
D. AWS Trusted Advisor でカスタムレポートを作成し、コンプライアンスチームの AWS アカウントに対して請求サマリーを生成する。
- 解説: Trusted Advisor は主にベストプラクティスやコスト最適化の提案を行いますが、コスト計算に特化したツールではないため、適切な解決策ではありません。
結論
最適な選択肢は A です。管理アカウントでタグを有効化し、レポートを使ってコストを集計する方法が最も簡単で運用負荷が少ないです。
030-
RAMで複数アカウントでの Transit Gateway
理論
AWS リソースアクセスマネージャー(AWS Resource Access Manager、RAM) は、AWS のサービス間でリソースを共有するためのサービスです。これを使用すると、AWS アカウントや組織内の複数のメンバーアカウントにリソースを共有できます。特に、複数のアカウントや組織間で共通のリソースを使いたい場合に役立ちます。
具体的には、以下のようなリソースを共有する際に利用されます:
- VPC ピアリング接続
他のアカウントの VPC とピアリング接続を作成する際に、AWS RAM を使ってその接続を共有することができます。
- Transit Gateway
企業が複数のアカウントで AWS Transit Gateway を使って VPC を接続する際、Transit Gateway を他のアカウントと共有するために AWS RAM を使います。
- Amazon Route 53 プライベートホストゾーン
プライベート DNS ゾーンを複数のアカウントで使用する場合に、そのゾーンを他のアカウントと共有できます。
AWS RAM を使用する利点:
- リソースの共有
他の AWS アカウントや AWS Organizations 内のメンバーアカウントとリソースを簡単に共有できます。
- 管理の簡素化
複数のアカウント間で一貫した設定を維持でき、リソースの管理が簡単になります。
- セキュリティとアクセス管理
リソースを共有する際に、アクセス権限をきめ細かく制御できます。共有先のアカウントやユーザーに対するアクセス権を設定でき、セキュアにリソースを利用できます。
例えば、Transit Gateway を複数のアカウント間で共有する場合、管理アカウントから AWS RAM を使用して、Transit Gateway のリソースをメンバーアカウントに提供します。これにより、各アカウントが自分の VPC を Transit Gateway に接続できるようになります。
実践

AWS RAM を使った複数アカウントでの Transit Gateway (TGW) 共有手順
1. TGW 作成
- アカウントAで TGW を作成し
2. RAM でリソース共有
- アカウントAから RAM を使用して TGW をアカウントBに共有。
- 「Resource Access Manager」でリソース共有を作成。
- アカウントBのAWSアカウントIDを共有先に追加。
3. 共有承諾
- アカウントBにログインし、RAM の「受信済みの共有リソース」で TGW 共有を承諾。
4. アカウントBでのアタッチ
- アカウントBで共有された TGW を確認し、自身のVPC (例: 172.16.0.0/16) にアタッチメントを作成。
- アタッチメント作成時に、自動で TGW ルートテーブルが生成され、相互通信のルートが設定されます。
5. アカウントAでのアタッチ
- アカウントAで自身のVPC (例: 172.16.0.0/16) にアタッチメントを作成。
- アタッチメント作成時に、自動で TGW ルートテーブルが生成され、相互通信のルートが設定されます。
6. 通信確認
- EC2が存在するサブネットに向こうに繋ぐTGWを指定して、相手側のVPC CIDRに対するルートを設定。
- EC2間の通信が可能であることを確認。
これにより、複数アカウント間でセキュアかつ効率的に通信を実現できます。TGW ルートテーブルの自動生成機能を活用することで、設定の手間を削減可能です。
一問道場
質問 #30
トピック 1
ある企業には、AWS Organizations のメンバーとして 50 の AWS アカウントがあります。各アカウントには複数の VPC が含まれています。企業は、AWS Transit Gateway を使用して各メンバーアカウント内の VPC 間の接続を確立したいと考えています。また、各新しいメンバーアカウントが作成されるたびに、新しい VPC と Transit Gateway 添付の作成プロセスを自動化したいと考えています。
この要件を満たすための手順の組み合わせはどれですか?(2つ選んでください)
A. 管理アカウントから AWS リソースアクセスマネージャーを使用して、メンバーアカウントに Transit Gateway を共有します。
B. 管理アカウントから AWS Organizations の SCP(サービス制御ポリシー)を使用して、メンバーアカウントに Transit Gateway を共有します。
C. 管理アカウントから AWS CloudFormation スタックセットを起動して、新しい VPC と VPC Transit Gateway 添付をメンバーアカウントに自動的に作成します。その後、Transit Gateway ID を使用して、管理アカウントの Transit Gateway に添付を関連付けます。
D. 管理アカウントから AWS CloudFormation スタックセットを起動して、新しい VPC とピアリング Transit Gateway 添付をメンバーアカウントに自動的に作成します。Transit Gateway サービスリンクロールを使用して、管理アカウントの Transit Gateway と添付を共有します。
E. 管理アカウントから AWS サービスカタログを使用して、メンバーアカウントに Transit Gateway を共有します。
解説
- A は AWS リソースアクセスマネージャーを使用して、管理アカウントから Transit Gateway をメンバーアカウントに共有する方法です。これにより、新しい VPC と Transit Gateway の接続を簡単に共有できます。
- C は CloudFormation スタックセットを使用して、VPC と Transit Gateway の添付を自動的に作成し、管理アカウントの Transit Gateway に関連付ける方法です。自動化に最適です。
他の選択肢については、要件に合わないか、過剰な手順が含まれているため、適切ではありません。
例
管理アカウントが Transit Gateway を作成し、Account A と Account B の VPC がその Transit Gateway を通じて接続されるようにしたい場合、次の手順が必要です:
- Account A と Account B は、それぞれ自分の VPC を Transit Gateway に接続するために、各アカウント内で Transit Gateway Attachment を作成する必要があります。
- これらの Transit Gateway Attachment は、それぞれのアカウント内の VPC に作成されますが、どちらの添付接続も同じ Transit Gateway に接続されます。
要するに、各アカウント内で Transit Gateway Attachment を作成することで、複数のアカウントにまたがる VPC が Transit Gateway を通じて相互接続されます。
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/159d7ae8-88e2-80f7-a948-f084cd2ffe43
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章