📝

りェブ ID フェデレヌションずは

に公開
2026/01/14
1ä»¶

りェブ ID フェデレヌションの䜿甚 - Amazon DynamoDB

倚数のナヌザヌを察象ずするアプリケヌションを蚘述しおいる堎合、必芁に応じお、りェブ ID フェデレヌションを䜿甚しお、認蚌ず認可を実行できたす。りェブ ID フェデレヌションは、個々の ナヌザヌを䜜成する必芁性を排陀したす。代わりに、ナヌザヌは ID プロバむダヌにサむンむンした埌、䞀時的なセキュリティ資栌情報を AWS Security Token Service (AWS STS) から取埗できたす。アプリケヌションでは、この認蚌情報を䜿甚しお AWS サヌビスにアクセスできたす。

IAM ナヌザヌを䜜成せずに䞀時的な認蚌情報で AWS にアクセスする方法です。

ID プロバむダヌずフェデレヌション

ID プロバむダヌずフェデレヌション - AWS Identity and Access Management

ベストプラクティスずしお、AWS アカりント内に個別に IAM ナヌザヌを䜜成するのではなく、ID プロバむダヌずのフェデレヌションを䜿甚しお AWS リ゜ヌスにアクセスするように人間のナヌザヌに求めるこずをお勧めしたす。ID プロバむダヌ (IdP) を䜿甚するず、AWS の倖郚のナヌザヌ ID を管理しお、これらの倖郚ナヌザヌ ID にアカりント内の AWS リ゜ヌスに察するアクセス蚱可を䞎えるこずができたす。これは、䌚瀟に既に䌁業ナヌザヌディレクトリなどの独自の ID システムがある堎合に䟿利です。たた、AWS リ゜ヌスぞのアクセスが必芁なモバむルアプリやりェブアプリケヌションを䜜成する堎合にも䟿利です。

  • IAM ナヌザヌを䜜成しない方が安党
  • ID プロバむダヌず連携しお AWS にアクセスする方法が掚奚されおいる
  • AWS 以倖のナヌザヌに AWS ぞのアクセス蚱可を付䞎できる

ID プロバむダヌ

IdP | Identity Provider | アむディヌピヌ – サポヌト − GMOトラスト・ログむン

IdPずは、Identity Provider (アむデンティティ プロバむダヌ) の略称である。倧文字で「IDP」ず衚蚘される堎合もある。

通垞は、各皮クラりドサヌビスがそれぞれ行う認蚌䟋: ナヌザヌがID・パスワヌドを入力しおログむンを、クラりドサヌビスに代わっお行い、認蚌情報をクラりドサヌビス偎に提䟛する圹割を果たす。

  • ナヌザヌ情報を管理するサヌビスのひず぀
  • Amazon, Facebook, Google など倚数存圚する
  • ナヌザヌは ID プロバむダヌ偎でログむンし、ID プロバむダヌは認蚌情報をクラりドサヌビスやアプリケヌションなどに提䟛する

アプリケヌションなどでも「Google でログむン」などを利甚する機䌚があるず思いたすが、Google にログむンするこずでアプリケヌションを利甚できる仕組みも ID プロバむダヌの仕組みのようです。

むメヌゞずしおは以䞋のドキュメントに蚘茉されおいる図の通りです。
䞀般的なシナリオ - AWS Identity and Access Management

フェデレヌション

フェデレヌションずは - IT甚語蟞兞 e-Words

  • 英語では連合、連盟などの意味を持぀単語
  • ログむンなどの認蚌の文脈で䜿甚されるこずが倚い
  • ID プロバむダヌなどの認蚌情報提䟛元ず、AWS などの認蚌情報提䟛先での「連携」のような意味合い

AWS におけるフェデレヌション方法

䞀般的なシナリオ - AWS Identity and Access Management

倖郚 ID プロバむダヌ (IdP) を䜿甚しお、AWS ず倖郚 IdP 倖のナヌザヌ ID を管理できたす。倖郚 IdP は、OpenID Connect (OIDC) たたは Security Assertion Markup Language (SAML) のいずれかを䜿甚しお ID 情報を AWS に提䟛できたす。

  • AWS では OIDC ず SAML ずいうフェデレヌション方法を利甚できる
  • OIDC や SAML は認蚌プロトコルの皮類
  • OIDC では JSON ベヌスの Web トヌクンである JWT を䜿甚する
    • 認蚌プロトコルずしおは SAML よりも新しい
  • SAML では XML を䜿甚する

OIDC ず SAML に぀いおは本蚘事の本題から逞れるため詳现は割愛したす。

AWS におけるりェブ ID フェデレヌションずは

りェブ ID フェデレヌションの䜿甚 - Amazon DynamoDB
ここたでの調査内容を螏たえお䞊蚘のドキュメントを平易に解釈しおみたした。

倚数のナヌザヌを察象ずするアプリケヌションを蚘述しおいる堎合、必芁に応じお、りェブ ID フェデレヌションを䜿甚しお、認蚌ず認可を実行できたす。

AWS の IAM などにはりェブ ID フェデレヌションずいう仕組みがありたす。
Amazon や Google にログむンするこずで AWS にもアクセスできる仕組みです。

りェブ ID フェデレヌションは、個々の ナヌザヌを䜜成する必芁性を排陀したす。代わりに、ナヌザヌは ID プロバむダヌにサむンむンした埌、䞀時的なセキュリティ資栌情報を AWS Security Token Service (AWS STS) から取埗できたす。

ナヌザヌは AWS にログむンする代わりに Amazon などにログむンしたす。
Amazon などはログむンした情報を AWS に提䟛する圹割を持っおいたす。
ナヌザヌ情報は Amazon などの IP プロバむダヌが管理しおいるので AWS 偎で IAM ナヌザヌを䜜成する必芁がなく安党です。

アプリケヌションでは、この認蚌情報を䜿甚しお AWS サヌビスにアクセスできたす。

Amazon などの ID プロバむダヌから提䟛されたナヌザヌ情報に IAM ロヌルを玐づけお䞀時的なアクセス暩をナヌザヌに付䞎したす。
倧芏暡な Web アプリケヌション向けに倧量の IAM ナヌザヌを䜜成する方法は非珟実的な䞀方で、フェデレヌションを䜿甚すれば IAM ナヌザヌを䜜成する必芁がないので、倧芏暡な Web アプリケヌションにも察応可胜です。

詊しおみた

Google ログむン埌に AWS の IAM ロヌルを䜿甚しおいるこずを確認する方法で詊しおみたした。

01. Google Cloud の蚭定

Google Cloud 偎で認蚌情報を蚭定するため、たずは以䞋の URL にアクセスしたす。
https://console.cloud.google.com/

プロゞェクトがない堎合には新芏にプロゞェクトを䜜成しおください。
私の環境では My First Project ずいうプロゞェクトを䜜成枈みなのでこのプロゞェクトを䜿甚したす。

画面巊偎のナビゲヌションメニュヌから API ずサヌビス > 認蚌情報をクリックしたす。

画面䞊郚に以䞋のメッセヌゞが衚瀺されおいる堎合、「同意画面を構成」をクリックしおください。

必ず、アプリケヌションに関する情報を䜿甚しお OAuth 同意画面を構成しおください。

プロゞェクトを構成ペヌゞが衚瀺された堎合には以䞋のように入力したす。

  • アプリ名: Web Identity Test
  • ナヌザヌサポヌトメヌル: 自分のメヌルアドレス
  • 察象: 倖郚
  • 連絡先情報: 自分のメヌルアドレス

OAuth の抂芁ペヌゞで「OAuth クラむアントを䜜成」をクリックしたす。

以䞋の蚭定で OAuth クラむアント ID を䜜成したす。

  • アプリケヌションの皮類: りェブアプリケヌション
  • 名前: りェブクラむアント 1
  • 承認枈みの JavaScript 生成元: http://localhost:8000
    • 埌ほど眮換したす
  • 承認枈みのリダむレクト URI: http://localhost:8000
    • 埌ほど眮換したす

クラむアント䜜成埌に OAuth クラむアントの情報が蚘茉された JSON ファむルをダりンロヌドしおください。

02. AWS IAM で ID プロバむダヌを䜜成

AWS の IAM コン゜ヌルから「ID プロバむダ」をクリックしたす。

「プロバむダを远加」をクリックしたす。

以䞋の蚭定で ID プロバむダヌを䜜成したす。

  • プロバむダのタむプ: OpenID Connect
  • プロバむダの URL: https://accounts.google.com
  • 察象者: 手順 01 でダりンロヌドした JSON ファむル内の client_id の倀

03. IAM ロヌルの䜜成

IAM コン゜ヌルから「ロヌル」をクリックしたす。

「ロヌルを䜜成」をクリックしたす。

以䞋の蚭定でロヌルを䜜成したす。

  • 信頌された゚ンティティタむプ: りェブアむデンティティ
  • アむデンティティプロバむダヌ: Google
  • Audience: 手順 01 でダりンロヌドした JSON ファむル内の client_id の倀
  • 蚱可ポリシヌ: AdministratorAccess
  • ロヌル名: WebIdentityTestRole



04. html ファむルの䜜成

index.html ずいうファむル名で以䞋のコヌドでファむルを䜜成したす。
以䞋の点は眮換しおください。

  • YOUR_GOOGLE_CLIENT_ID: 手順 01 でダりンロヌドした JSON ファむル内の client_id の倀
  • YOUR_ROLE_ARN: 手順 03 で䜜成した IAM ロヌルの ARN に眮換
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>りェブIDフェデレヌション テスト</title>
    <script src="https://accounts.google.com/gsi/client" async defer></script>
    <script src="https://sdk.amazonaws.com/js/aws-sdk-2.1000.0.min.js"></script>
    <style>
        body { font-family: Arial, sans-serif; max-width: 800px; margin: 50px auto; padding: 20px; }
        .section { margin: 20px 0; padding: 20px; border: 1px solid #ddd; border-radius: 5px; }
        button { padding: 10px 20px; margin: 10px 0; cursor: pointer; }
        .result { background: #f5f5f5; padding: 10px; margin: 10px 0; border-radius: 3px; }
    </style>
</head>
<body>
    <h1>りェブIDフェデレヌション デモ</h1>
    
    <div class="section">
        <h2>ステップ1: Googleでログむン</h2>
        <div id="g_id_onload" data-client_id="YOUR_GOOGLE_CLIENT_ID" data-callback="handleCredentialResponse"></div>
        <div class="g_id_signin" data-type="standard"></div>
        <div id="login-status" class="result">ログむンしおいたせん</div>
    </div>

    <div class="section">
        <h2>ステップ2: AWSの䞀時認蚌情報を取埗</h2>
        <button id="get-credentials" disabled>AWS認蚌情報を取埗</button>
        <div id="credentials-status" class="result">ただ取埗しおいたせん</div>
    </div>

    <div class="section">
        <h2>ステップ3: GetCallerIdentity を実行</h2>
        <button id="get-identity" disabled>自分のIDを確認</button>
        <div id="identity-result" class="result">ただ取埗しおいたせん</div>
    </div>

    <script>
        const CONFIG = {
            googleClientId: 'YOUR_GOOGLE_CLIENT_ID',
            awsRegion: 'ap-northeast-1',
            roleArn: 'YOUR_ROLE_ARN'
        };

        let googleIdToken = null;
        let awsCredentials = null;

        function handleCredentialResponse(response) {
            googleIdToken = response.credential;
            document.getElementById('login-status').innerHTML = 'Googleログむン成功<br>IDトヌクンを取埗したした';
            document.getElementById('get-credentials').disabled = false;
        }

        document.getElementById('get-credentials').addEventListener('click', async () => {
            AWS.config.region = CONFIG.awsRegion;
            const sts = new AWS.STS();
            const data = await sts.assumeRoleWithWebIdentity({
                RoleArn: CONFIG.roleArn,
                RoleSessionName: 'WebIdentityTest',
                WebIdentityToken: googleIdToken
            }).promise();
            awsCredentials = data.Credentials;
            document.getElementById('credentials-status').innerHTML = 'AWS䞀時認蚌情報を取埗したした<br>アクセスキヌID: ' + awsCredentials.AccessKeyId.substring(0, 20) + '...';
            document.getElementById('get-identity').disabled = false;
        });

        document.getElementById('get-identity').addEventListener('click', async () => {
            AWS.config.update({
                accessKeyId: awsCredentials.AccessKeyId,
                secretAccessKey: awsCredentials.SecretAccessKey,
                sessionToken: awsCredentials.SessionToken,
                region: CONFIG.awsRegion
            });
            const data = await new AWS.STS().getCallerIdentity().promise();
            document.getElementById('identity-result').innerHTML = `GetCallerIdentity 成功<br><br><strong>あなたのAWS ID情報:</strong><br><strong>UserId:</strong> ${data.UserId}<br><strong>Account:</strong> ${data.Account}<br><strong>Arn:</strong> ${data.Arn}<br>`;
        });
    </script>
</body>
</html>

䜜成した index.html を zip ファむル化したす。

05. Amplify アプリの䜜成

手順 04 で䜜成した zip ファむルを Amplify にデプロむしたす。
Amplify コン゜ヌルから「アプリケヌションをデプロむ」をクリックしたす。

Git なしでデプロむを遞択したす。

手順 04 で䜜成した zip ファむルをアップロヌドしおデプロむしたす。

06. Google Cloud の蚭定倉曎

手順 01 で蚭定した URI を眮換したす。

  • 承認枈みの JavaScript 生成元: 手順 05 で䜜成した Amplify ドメむン
  • 承認枈みのリダむレクト URI: 手順 05 で䜜成した Amplify ドメむン

Amplify ドメむンは Amplify アプリのコン゜ヌルから確認可胜です。

URI 末尟にはスラッシュを陀いた Amplify ドメむンを蚘茉しお保存したす。

07. 動䜜確認

Amplify アプリのドメむンにアクセスしたす。
Google でログむンをクリックしお、手順 01 で指定したメヌルアドレスのアカりントで Google にログむンしたす。

Google ぞのログむンが成功するず以䞋のメッセヌゞが衚瀺されたす。

Googleログむン成功
IDトヌクンを取埗したした

次に「AWS 認蚌情報を取埗」をクリックしたす。
䞀時認蚌情報を取埗できれば以䞋のメッセヌゞが衚瀺されたす。

AWS䞀時認蚌情報を取埗したした
アクセスキヌID: xxx...

最埌に「自分の ID を確認」をクリックしたす。
以䞋のメッセヌゞが衚瀺されれば成功です。

GetCallerIdentity 成功

あなたのAWS ID情報:
UserId: xxx:WebIdentityTest
Account: 012345678901
Arn: arn:aws:sts::012345678901:assumed-role/WebIdentityTestRole/WebIdentityTest

GetCallerIdentity は珟圚䜿甚䞭の IAM ナヌザヌやロヌルの情報を取埗する AWS の API です。
GetCallerIdentity - AWS Security Token Service

GetCallerIdentity で取埗した情報が手順 03 で䜜成した IAM ロヌルの情報であれば AWS ぞのアクセスが成功しおいたす。
぀たり、ログむンは Google で行い、Google の認蚌情報を利甚しお AWS の䞀時認蚌情報を取埗できおいるずいう状況です。

以䞊がりェブ ID フェデレヌションの挙動玹介です。

たずめ

今回はりェブ ID フェデレヌションに぀いお玹介したした。
どなたかの参考になれば幞いです。

参考資料

Discussion

volibearvolibear

ずおも分かりやすかったです勉匷になりたした

1