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

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

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

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

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

いずみ

すぐ読み終わるので、ぜひ最後まで読んでくださいね♪

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
執筆者/監修者
  • フリーランスエンジニア(保有資格個、企業と直接契約
  • ブログ・アフィリエイト歴7年(2018年〜)
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資(仮想通貨・FX)歴7年(2018年〜)
  • X(旧Twitter)フォロワー約1,900人
  • 運営者情報はこちら
いずみです
目次

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ロールの権限周りでしたね。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式

【厳選】フリーランスエンジニアにおすすめなエージェント3選

フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。

僕が実際に利用しているおすすめエージェントを紹介しますね。

いずみ

エージェントは必ず複数登録してください。

担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…

僕は実際に5つのエージェントを使い回していますよ。

フリーランスを始めるなら「

案件数マージン率単価
約88,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 業界最大級の案件数。
  • 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
  • 案件参画中のフォローの充実。

※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。

は業界最大手のフリーランスエージェントです。

とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!

いずみ

僕もはじめてフリーランスの案件を貰ったのはです。

保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。

手厚い保障を重視したいなら「

案件数マージン率単価
約10,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 手厚い保障で正社員並みの安心感。
  • 還元率60%超え&単価公開でクリアな契約。
  • 給与保障制度(審査あり)。

は手厚い保障が特徴のフリーランスエージェントです。

フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。

いずみ

僕も何度か案件を紹介してもらいました。

自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。

週2〜3日の案件探しなら「

案件数マージン率単価
約5,000件非公開
初心者福利厚生申し込み
経験者向け無料
Good Point
  • IT案件に特化したフリーランスエージェント。
  • 週2〜3日の案件が豊富。
  • リモート案件が多く、直エンドなので単価も高い。

※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。

はIT案件に特化したフリーランスエージェントです。

週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。

いずみ

週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。

とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!

よくある質問

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

下記になります。

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

下記になります。

まとめ

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

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

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

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

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

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

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