Amazon API Gateway HTTP API へのクロスアカウントアクセスのために AWS Identity and Access Management (IAM) 認証をアクティブ化したいと考えています。設定するにはどうすればよいですか?
簡単な説明
API Gateway REST API では、リソースポリシーを使用してクロスアカウント用に IAM 認証を指定できます。ただし、このオプションは API Gateway HTTP API では使用できません。
sts:AssumeRole API アクションを使用して、HTTP API アカウントのロールを引き受けることができます。引き受けたロールは、別のアカウントで HTTP API を呼び出すために使用できる一時的なセキュリティ認証情報を提供します。
解決方法
IAM の一時的な認証情報を作成する
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
1. HTTP API をホストする Account A の IAM ポリシーを作成します。このポリシーは、HTTP API execute-api ARN の呼び出し許可を提供します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"execute-api:Invoke",
],
"Resource": [
"arn:aws:execute-api:us-east-1:<AccountA-id>:<Api-id>/$default/*/*"
]
}
]
}
2. Account A で IAM ロールを作成し、[AWS Account] (AWS アカウント) として [Trusted Entity Type] (信頼されたエンティティタイプ) を追加し、Account B の ID を入力します。
3. ステップ 1 で作成した IAM ポリシーを、ステップ 2 で作成した IAM ロールにアタッチします。
4. Account B の IAM ポリシーを作成して、sts:AssumeRole API アクションを許可します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::<AccountA-id>:role/<AssumedRoleName>"
}
]
}
5. IAM ポリシーを Account B のユーザーにアタッチします。
6. 次のような AWS CLI コマンド assume-role を実行します。
$ aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<AssumedRoleName> --role-session-name role_session
出力例:
{
"Credentials": {
"AccessKeyId": "A1B2C3D4E5E6G7H8J9K0",
"SecretAccessKey": "abcdefghijk123456789",
"SessionToken":
"11111111111122222222223333333333344444444455555566666667777777777778888888999999999aaaaaaaaaabbbbbbbbbcccccccc==",
"Expiration": "2022-07-11T15:55:25+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AAAAAAABBBBBBBBBBB:role_session",
"Arn": "arn:aws:sts::<account-id>:assumed-role/<AssumedRoleName>/role_session"
}
}
AccessKeyId、SecretAccessKey、および SessionToken の認証情報オブジェクトを確認します。引き受けたロールによって提供されるこれらの一時的な認証情報は、HTTP API を呼び出すために使用できます。
IAM 認証をテストする
Postman アプリケーションを使用し、IAM 認証を有効にしたメソッドを使用して API リソースにリクエストを送信します。
注: 別のツールまたは環境を使用して API Gateway に送信されたリクエストを手動で認証するには、「Signature Version 4 (SigV4) signing process」(Signature Version 4 (SigV4) 署名プロセス) を使用してください。詳細については、「AWS API リクエストの署名」を参照してください。
1. Postman で、[Authorization] (認証) タブを選択し、次の操作を実行します。
[Type] (タイプ) で、[AWS Signature] (AWS の署名) を選択します。
AccessKey、SecretKey、および SessionToken で、assume-role API コールからの値を入力します。
2. [Enter request URL] (リクエスト URL を入力) で、次のような API の呼び出し URL を入力します。
https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>
認証されたリクエストは、「200 OK」レスポンスコードを返します。許可されていないリクエストは、Missing Authentication Token のメッセージと 403 Forbidden レスポンスコードを返します。
関連情報
API Gateway REST API の IAM 認証を有効にするにはどうすればよいですか?