認証フロー
アプリケーションが
GetCallerIdentity リクエストを AWS に送信することはありません。署名を検証するために AWS STS を呼び出すのは MoEngage だけです。
各 MoEngage API リクエストには、次の 5 つのヘッダーが含まれます。
前提条件
- アプリケーションが、Amazon EC2 インスタンスプロファイル、Amazon ECS タスクロール、AWS Lambda 実行ロール、AWS STS を通じて引き受けたロールなどの AWS IAM ロールで実行されていること。永続的な IAM ユーザーの認証情報はサポートされていません。
- アプリケーションが、Signature Version 4 署名を提供する AWS SDK を使用していること。この記事の例では、Python の
botocoreライブラリを使用しています。 - API キーを作成する権限を持ち、Settings > Account > API keys にアクセスできること。
- ワークスペースをホストしているデータセンターを特定していること。データセンターを参照してください。
リージョンごとの AWS STS ホスト
MoEngage のデータセンターに対応する AWS STS ホストに対して署名してください。自社のインフラストラクチャが実行されているリージョンは関係ありません。MoEngage は同じホストに対して検証するため、他のホストに対して生成された署名は失敗します。これには、グローバルなsts.amazonaws.com エンドポイントに対して生成された署名も含まれます。
DC-06 に対応する
ap-southeast-3 は、AWS のオプトインリージョンです。そのホストに対して署名する前に、AWS アカウントの Account > AWS Regions で有効にしてください。これは MoEngage が管理しない AWS アカウントの設定です。ステップ 1: AWS STS Auth API キーを作成する
1
API Keys ページを開く
Settings > Account > API keys に移動します。
2
Create New Key ダイアログを開く
+ Create new key をクリックします。
3
キー名を入力する
Key name ボックスに、わかりやすい名前 (例:
orders-integration) を入力します。4
認証タイプを選択する
Authentication type で AWS STS Auth を選択します。
5
有効期限を設定する
Expiry time (in minutes) ボックスに、MoEngage が検証済みの署名を信頼する期間を入力します。範囲は 5~15 分で、デフォルトは 15 分です。この設定は、MoEngage が最初に検証する時点で許容される署名の古さには影響しません。これは AWS の有効期間ウィンドウによって決まります。
6
ロール ARN を追加する
ARN ボックスに、アプリケーションが署名に使用する assumed-role ARN を入力します。ARN を追加するには + Add value をクリックします (最大 10 件)。キーに登録されたすべての ARN に、そのキーの API アクセスが付与されます。形式、ワイルドカードのルール、検証については、Add Role ARNs を参照してください。
7
API アクセスを選択する
Select APIs for access で、キーが呼び出す API グループを選択します。
8
キーを保存する
Create key をクリックします。MoEngage がキーの
MOE-APPSECRET の値を生成します。9
MOE-APPSECRET の値を取得する
API Keys ページで、キーの をクリックし、View key details を選択します。詳細パネルに
MOE-APPSECRET の値が表示されます。この値は作成後も引き続き確認できます。AWS STS Auth キーは、すべての Data APIs スコープ、Channel Configuration > Setup & Manage、Personalize > View にアクセスできます。すべての Campaigns スコープを含むその他のスコープには、Basic Auth キーまたは OAuth 2.0 キーが必要です。Scopes Available to AWS STS Auth を参照してください。
認証情報の取り扱い
MOE-APPKEYには Workspace ID が格納されます。この値は秘密情報ではなく、すべてのリクエストに含める必要があります。MOE-APPSECRETは 1 つのキーに固有です。パスワードとして扱い、シークレットマネージャーに保存して、ソース管理に含めないでください。MOE-APPSECRETは、リクエストを 1 つの MoEngage キーとその API アクセスに結び付けます。AWS ロールはチームや環境間で共有されることが多いため、AWS の署名だけでは対象のキーを特定できません。MOE-APPSECRETは、リクエストに署名する AWS 認証情報とは異なり、有効期限がなく、自動でローテーションされることもありません。MOE-APPSECRETは作成後も取得できます。キーの メニューから View key details を選択すると、値が再度表示されます。- シークレットをローテーションするには、API キーダッシュボードで Regenerate key を使用します。再生成はキーのロール ARN や API アクセスには影響せず、以前のシークレットは直ちに使用できなくなります。
ステップ 2: GetCallerIdentity リクエストに署名する
次の AWS STS リクエストを作成して署名します。送信はしないでください。MoEngage は署名を検証するために同じリクエストを AWS STS に対して再実行するため、すべての部分が正確に一致している必要があります。
このリクエストの AWS での定義については、AWS STS API リファレンスの GetCallerIdentity を参照してください。
リクエストへの署名には AWS SDK を使用してください。cURL などのコマンドラインクライアントは署名と送信を 1 回の操作で行うため、再利用可能な署名済みヘッダーを生成できません。次の例では Python の
botocore を使用しています。使用する言語の AWS SDK に置き換えてください。
Sign a GetCallerIdentity Request
prepared.headers に Authorization、X-Amz-Date、X-Amz-Security-Token が追加されます。
ステップ 3: MoEngage Public API を呼び出す
署名済みのヘッダーを MoEngage Public API リクエストで送信します。AWS STS Auth には、MoEngage の個別の認証エンドポイントはありません。Call an API With the Signed Headers
{dc}をデータセンター番号に置き換え、各プレースホルダーを ステップ 2 で生成された値に置き換えてください。Content-Typeは、MoEngage の呼び出しでは必須ですが、署名済みのGetCallerIdentityリクエストでは指定できません。- 呼び出し可能なエンドポイントについては、API ドキュメントを参照してください。リクエスト制限とペイロードの上限については、Rate Limits を参照してください。
認証エラー
認証されたリクエストは、エンドポイントが通常返すレスポンスを返します。MoEngage が認証できないリクエストは401 Unauthorized を返します。失敗したリクエストから設定のどの部分が間違っているかがわからないように、具体的な原因ではなく汎用的なメッセージが返されます。トラブルシューティングを参照してください。
トラブルシューティング
リクエストで401 Unauthorized が返された場合は、次の項目を順番に確認してください。
それでもリクエストが失敗する場合は、失敗したリクエストのおおよそのタイムスタンプを添えて MoEngage サポートにお問い合わせください。
MoEngage が解決する ARN を確認する
MoEngage がリクエストを検証すると、AWS STS は、ロールセッション名を含む、リクエストに署名したロールの ARN を返します。MoEngage はその ARN をキーの ARN と比較します。この AWS レスポンスがアプリケーションに返されることはありません。 同じ ARN を確認するには、Amazon EC2 インスタンスや Amazon ECS タスクなど、アプリケーションが実行されている環境で次の AWS CLI コマンドを実行します。AWS Lambda では、代わりにboto3 の STS クライアントで get_caller_identity() を呼び出します。
Show the Resolved ARN
Example Output
Arn の値をキーに追加します。セッション名がインスタンスや呼び出しごとに変わる場合は、ロール ARN のワイルドカードの説明に従って、* に置き換えてください。
ロール ARN のワイルドカード
AWS が解決する ARN には、Amazon EC2 インスタンス ID、Amazon ECS タスク ID、AWS Lambda リクエスト ID などのロールセッション名が含まれます。この値はインスタンスや呼び出しごとに変わりますが、MoEngage は ARN を完全一致で照合します。また、セッション名は必須であるため、ロール名で終わるエントリは Invalid format として拒否されます。 範囲を広げたいセグメントの末尾に* を配置します。
すべてのワイルドカードエントリには、次の 2 つのルールが適用されます。
- 1 つのエントリで使用できる
*は 1 つだけで、最後の文字としてのみ使用できます。assumed-role/My*Roleや、ワイルドカードを 2 つ含むエントリは無効です。 - ロール名には、ワイルドカードの前に少なくとも 1 文字が含まれている必要があります。そのため、
assumed-role/*は無効です。
推奨されるプラクティス
- 本番トラフィックをルーティングする前に、ステージング用のロール ARN を登録したステージング専用キーで検証してください。
- 移行期間中は、Basic Auth または OAuth 2.0 の認証情報を有効なままにしてください。切り替え作業は必要ありません。
- 署名と送信は同じ操作で行ってください。署名をキャッシュしないでください。
MOE-APPSECRETはシークレットマネージャーに保存し、クライアントサイドのコードに含めないでください。- ロールごとに必要な API アクセスのレベルが異なる場合は、別々のキーを作成してください。
連携チェックリスト
- アプリケーションが、引き受けたロールの一時的な認証情報で署名している。
- STS ホストが MoEngage のデータセンターと一致している。
MOE-APPKEYとMOE-APPSECRETが署名前に追加されている。- 署名済みリクエストに
Content-Typeヘッダーが含まれていない。 - 実行時に解決される ARN が、正確なセッション名または
*ワイルドカードでキーに登録されている。 - キーに、連携に必要な API アクセスが設定されている。
MOE-APPSECRETがシークレットマネージャーに保存されている。- 署名済みのヘッダーを使用した MoEngage Public API の呼び出しが成功する。
- 追加の認証ヘッダーが含まれていない。
よくある質問
1 つの MoEngage キーで複数の AWS ロールを承認できますか?
1 つの MoEngage キーで複数の AWS ロールを承認できますか?
はい。1 つのキーに、異なる AWS アカウントのロールを含め、最大 10 件のロール ARN を追加できます。キーに登録されたすべての ARN は、そのキーの API アクセスを共有します。ロールごとに異なるアクセスが必要な場合は、別々のキーを作成してください。
正しいロールが許可リストに登録されているのに、リクエストが拒否されるのはなぜですか?
正しいロールが許可リストに登録されているのに、リクエストが拒否されるのはなぜですか?
解決された ARN には、インスタンスや呼び出しごとに変わるロールセッション名が含まれており、照合は完全一致で行われます。ロール ARN のワイルドカードを参照してください。
キーの作成後、MOE-APPSECRET はどこで確認できますか?
キーの作成後、MOE-APPSECRET はどこで確認できますか?
API Keys ページで、キーの をクリックし、View key details を選択します。この値は作成後も引き続き確認できます。
ダウンタイムなしで MOE-APPSECRET をローテーションできますか?
ダウンタイムなしで MOE-APPSECRET をローテーションできますか?
再生成は直ちに有効になるため、新しいシークレットが発行されるとすぐに以前のシークレットは使用できなくなります。通常の認証情報のローテーションと同様に、展開を計画してください。
AWS STS Auth は Basic Auth や OAuth 2.0 に代わるものですか?
AWS STS Auth は Basic Auth や OAuth 2.0 に代わるものですか?
いいえ。3 つの方法はそれぞれ独立して動作し、並行して使用できます。
キーの変更はいつ有効になりますか?
キーの変更はいつ有効になりますか?
直ちに有効になります。ロール ARN の追加や削除、API アクセスの変更、シークレットの再生成、キーのアーカイブは、待機時間なしで適用されます。
関連記事
API Key Dashboard
AWS STS Auth キーの作成、ロール ARN の許可リストへの登録、キーの再生成やアーカイブを行います。
OAuth 2.0 の概要
有効期間の短い OAuth 2.0 アクセストークンを使用して認証します。
Rate Limits
呼び出すエンドポイントに適用されるリクエスト制限とペイロードの上限を確認します。