【Python】ID PoolでAPI GatewayのIAM認証を突破する方法

悩んでいる人

PythonでAPI GatewayのIAM認証を突破する方法が知りたいんだよね…

こんな疑問にお答えします。

  • 本記事の執筆者
プロフィール
  • フリーランスエンジニア(保有資格約20個)
  • ブログ・アフィリエイト歴5年
  • ブランドせどりで月利50万円⇨脱サラ
  • Twitterフォロワー約2,000人
いずみん

本記事を書いている僕はエンジニア歴7年です。
AWSは業務歴2年半なので、かなり有益な情報を発信できるかと思います。

結論、CognitoのID Poolを使ってAPI GatewayのIAM認証を突破するのは非常に簡単です。

具体的なソースコードも載せているので安心してくださいね。

本記事を読んでもらえれば、ID PoolでAPI GatewayのIAM認証を突破する方法が理解できるので、早速見ていきましょう。

いずみん

すぐ読み終わるので、是非最後まで読んでみてください!

\ 年収が2倍に?! /

目次

ID PoolでAPI GatewayのIAM認証を突破する方法

早速ですが、CognitoのID PoolでAPI GatewayのIAM認証を突破する方法を解説します。

Chaliceの設定

まずは環境を準備します。

今回はChaliceを使いますが、API GatewayにIAM認証付きのAPIがあればOKです。

※画像クリックで拡大
いずみん

↑のような感じですね。
Chaliceのソースコードは後ほど載せておきます。

IDプールの作成

IAM認証を通過するには権限が必要です。

今回は、CognitoのIDプールを利用して一時的な権限を払い出します。

STEP
IDプールを開く
※画像クリックで拡大

IDプールの管理をクリックします。

STEP
新しいIDプールの作成をクリック
※画像クリックで拡大

新しいIDプールの作成をクリックします。

STEP
新しいIDプールの作成
※画像クリックで拡大
※画像クリックで拡大

IDプール名を入力し、プールの作成をクリックします。

いずみん

認証されていないIDに必ずチェックを入れてください。

STEP
ロールを編集
※画像クリックで拡大

ロールを編集し、許可をクリックします。

ロールの内容は以下になります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

API Gatewayの認証を突破するための権限が必要なので「execute-api:Invoke」を記載します。

いずみん

Resouceは面倒くさいので全てにしていますが、限定的にするのをおすすめします。

STEP
IDプールのIDをコピー
※画像クリックで拡大

IDプールのIDはソースコード内で使用するのでコピーします。

Pythonのソースコードはこちら

Pythonのソースコードは以下になります。

from chalice import Chalice, IAMAuthorizer
from botocore.awsrequest import AWSRequest
from botocore.auth import SigV4Auth
import boto3
import json
import requests

app = Chalice(app_name='hello-world')

authorizer = IAMAuthorizer()

@app.route('/', methods=['GET'], authorizer=authorizer)
def index():
    return {'hello': 'world'}

@app.route('/hoge', methods=['GET'])
def hoge():
    REGION = 'ap-northeast-1'
    ARN_ID_POOL = 'ap-northeast-1:...'

    client = boto3.client('cognito-identity', REGION)

    credentials_for_identity = client.get_credentials_for_identity(
        IdentityId=client.get_id(IdentityPoolId=ARN_ID_POOL)['IdentityId']
    )

    session = boto3.session.Session(
        aws_access_key_id=credentials_for_identity['Credentials']['AccessKeyId'],
        aws_secret_access_key=credentials_for_identity['Credentials']['SecretKey'],
        aws_session_token=credentials_for_identity['Credentials']['SessionToken'],
        region_name=REGION
    )

    url = 'https://....execute-api.ap-northeast-1.amazonaws.com/api/'

    credentials = session.get_credentials()
    request = AWSRequest(method = "GET", url = url)
    SigV4Auth(credentials, 'execute-api', REGION).add_auth(request)

    res = requests.get(
        url,
        headers = {
            'Authorization': request.headers['Authorization'],
            'X-Amz-Date': request.context['timestamp'],
            'X-Amz-Security-Token': credentials_for_identity['Credentials']['SessionToken']
        }
    )

    return res.json()

/」のAPIを「/hoge」から実行しています。

いずみん

意外と簡単ですよね?
難しいのはIAMロールの権限周りでしたね。

よくある質問|ID PoolでAPI GatewayのIAM認証を突破する方法

署名バージョン4の公式ドキュメントはありますか?

下記になります。

CognitoIdentityのドキュメントはありますか?

下記になります。

まとめ|ID PoolでAPI GatewayのIAM認証を突破するのは簡単

今回は、ID PoolでAPI GatewayのIAM認証を突破する方法について解説しました。

以下が本記事のまとめになります。

まとめ
  • IDプールを使うことで一時的な権限を払い出せる。
  • IDプールにAPI Gatewayの実行権限を付与する必要がある。
  • Pythonのソースコードはboto3を使えば比較的簡単。

この記事があなたのお役に立てば幸いです。

サイト内には、他にも初心者向けの記事を多く投稿していますので良ければ参考にしてみてください。

最後までお読みいただきありがとうございました!

最後に

僕が個人的におすすめするAWSエンジニア向けのフリーランスエージェントをご紹介します。

いずみん

エンジニアで実務経験のある方(目安は3年)はフリーランスも視野に入れましょう。

僕自身、フリーランスになって収入が2倍(年収+280万)になりました。

あなたの貴重なスキルを安売りしないようにしましょうね!

初めてのフリーランスなら「レバテックフリーランス」

総合評価案件数(公開)面談
約40,000件無料
マージン率単価アフターフォロー
10〜20%あり
Good Point
  • 国内最大級のフリーランスエージェント
  • 案件数は約40,000件(国内最多)
  • 高単価案件が豊富
  • マージン率は10〜20%

は国内最大級のフリーランスエージェントです。

高単価案件が豊富で、初めてフリーランスになる方におすすめのエージェントです。

いずみん

僕も最初はレバテックを利用しましたが、おかげさまで収入が約1.5倍になりました(笑)。

正社員並みの保証なら「Midworks(ミッドワークス)」

総合評価案件数(公開)面談
約3,000件以上無料
マージン率単価保証
非公開
Good Point
  • 正社員並みの手厚い保証
  • 給与保証あり
  • 非公開案件が豊富
  • マージン率は一律20%

正社員並みの手厚い保証を受けたい方におすすめのエージェントです。

非公開案件が豊富で給与保証も付いているので、安心してフリーランスにチャレンジできますよ!

いずみん

ちなみに僕はMidworks経由でフルリモート案件に参画できました!
営業担当の方も真摯に対応してくれて非常に助かりました。

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次