本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Web 聯合身分
如果您要撰寫以大量使用者為目標的應用程式,也可以選擇使用 web 聯合身分進行身分驗證和授權。Web 聯合身分讓您不再需要建立個別的 使用者。反之,使用者可以登入身分提供者,然後從 AWS Security Token Service () 取得臨時安全登入資料AWS STS。然後,應用程式可以使用這些登入資料來存取 AWS 服務。
Web 聯合身分支援下列身分提供者:
-
登入 Amazon
-
Facebook
-
Google
Web 聯合身分的其他資源
下列資源可協助您進一步了解 Web 聯合身分:
-
AWS 開發人員部落格中的使用 AWS SDK for .NET的 Web 聯合身分
文章,會介紹如何使用 Facebook 的 Web 聯合身分。它包含 C# 中的程式碼片段,示範如何擔任具有 Web 身分IAM的角色,以及如何使用臨時安全登入資料來存取 AWS 資源。 -
AWS Mobile SDK for iOS
和 AWS Mobile SDK for Android 包含範例應用程式。這些應用程式所包含的程式碼示範如何呼叫身分提供者,接著示範如何使用這些供應商中的資訊來取得和使用暫時安全憑證。 -
文章 Web Identity Federation with Mobile Applications
討論 Web Identity Federation,並顯示如何使用 Web Identity Federation 存取 AWS 資源的範例。
Web 聯合身分的範例政策
若要示範如何搭配 DynamoDB 使用 Web 聯合身分,請重新瀏覽 中介紹的GameScores資料表使用IAM政策條件進行精細存取控制。以下是 的主要金鑰GameScores。
資料表名稱 | 主索引鍵類型 | 分割區索引鍵名稱和類型 | 排序索引鍵名稱和類型 |
---|---|---|---|
GameScores (UserId, GameTitle, ...) | 複合 | 屬性名稱: UserId 類型:字串 | 屬性名稱: GameTitle 類型:字串 |
現在假設手機遊戲應用程式使用此資料表,而且應用程式需要支援數千或甚至數百萬使用者。在此規模下,管理個別應用程式使用者變得非常困難,並保證每個使用者只能存取GameScores資料表中的自己的資料。好消息是,許多使用者都擁有第三方身分提供者 (例如 Facebook、Google 或 Login with Amazon) 的帳戶。因此可以合理地運用其中一個提供者來進行身分驗證任務。
若要使用 Web 聯合身分來執行這個操作,則應用程式開發人員必須向身分提供者 (例如 Login with Amazon) 註冊應用程式,並取得唯一應用程式 ID。接下來,開發人員需要建立 IAM 角色 (在此範例中,此角色名為 GameRole。) 角色必須連接IAM政策文件,指定應用程式可以存取GameScores資料表的條件。
使用者想要玩遊戲時,會從遊戲應用程式登入其 Login with Amazon 帳戶。應用程式接著會呼叫 AWS Security Token Service (AWS STS),提供 Login with Amazon 應用程式 ID 並在 中請求成員資格GameRole。 AWS STS 會傳回臨時 AWS 登入資料給應用程式,並允許其存取GameScores資料表,但需受GameRole政策文件約束。
下圖顯示這些部分如何一起使用。

Web 聯合身分概觀
-
應用程式會呼叫第三方身分提供者,以對使用者和應用程式進行身分驗證。身分提供者會將 Web 身分字符傳回給應用程式。
-
應用程式會呼叫 AWS STS 並傳遞 Web 身分字符做為輸入。 會 AWS STS 授權應用程式並提供其暫時 AWS 存取憑證。應用程式可以擔任IAM角色 (GameRole),並根據角色的安全政策存取 AWS 資源。
-
應用程式會呼叫 DynamoDB 來存取GameScores資料表。由於應用程式已擔任 GameRole,因此應用程式受與該角色相關聯的安全政策約束。政策文件會防止應用程式存取不屬於使用者的資料。
再次說明,以下是 中GameRole顯示的安全政策使用IAM政策條件進行精細存取控制:
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowAccessToOnlyItemsMatchingUserID", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ], "dynamodb:Attributes":[ "UserId", "GameTitle", "Wins", "Losses", "TopScore", "TopScoreDateTime" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES" } } } ] }
Condition
子句會決定應用程式GameScores可看見哪些項目。作法是比較 Login with Amazon ID 與 UserId
中的 GameScores
分割區索引鍵值。只有使用此政策中所列的其中一個 DynamoDB 動作才能處理屬於目前使用者的項目。但無法存取資料表中的其他項目。甚至,只能存取政策中所列的特定屬性。