識別具有 OIDC 聯盟的使用者 - AWS Identity and Access Management

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

識別具有 OIDC 聯盟的使用者

當您在 IAM 建立存取政策時,能根據設定的應用程式和已使用外部身分提供者 (IdP) 驗證的使用者 ID 來指定許可,通常是很管用的。例如,您的行動應用程式使用 OIDC 聯合可能會使用如下結構在 Amazon S3 中保留資訊:

myBucket/app1/user1 myBucket/app1/user2 myBucket/app1/user3 ... myBucket/app2/user1 myBucket/app2/user2 myBucket/app2/user3 ...

您可能還會想要透過提供者另外區分這些路徑。在這種情況下,結構可能如下所示 (只列出兩個提供者以儲存空間):

myBucket/Amazon/app1/user1 myBucket/Amazon/app1/user2 myBucket/Amazon/app1/user3 ... myBucket/Amazon/app2/user1 myBucket/Amazon/app2/user2 myBucket/Amazon/app2/user3 myBucket/Facebook/app1/user1 myBucket/Facebook/app1/user2 myBucket/Facebook/app1/user3 ... myBucket/Facebook/app2/user1 myBucket/Facebook/app2/user2 myBucket/Facebook/app2/user3 ...

對於這些結構,app1app2 代表不同的應用程式,例如不同的遊戲,以及每個應用程式的使用者各有不同的資料夾。app1app2 的值可能是您指派的易記名稱 (例如 mynumbersgame),或是提供者在您設定應用程式時指定的應用程式 ID。如果您決定在路徑中包含提供者名稱,那些也可以是像 CognitoAmazonFacebookGoogle 等的易記名稱。

您通常可以透過 app1建立 app2 和 AWS Management Console的資料夾,因為應用程式名稱是靜態值。如果您在路徑包含提供者名稱,也是 true,因為提供者名稱也是靜態值。相反地,使用者特定的資料夾 (user1user2user3 等等) 必須在執行階段從應用程式中建立,其使用的使用者 ID 可用於 SubjectFromWebIdentityToken 值,而該值由 AssumeRoleWithWebIdentity 的請求傳回。

若要撰寫允許獨家存取個別使用者資源的政策,您可以比對完整資料夾名稱,包括應用程式名稱和提供者名稱,如果您有使用的話。然後,您可以包含下列提供者特定的內容索引鍵,其參考提供者傳回的使用者 ID:

  • cognito-identity.amazonaws.com:sub

  • www.amazon.com:user_id

  • graph.facebook.com:id

  • accounts.google.com:sub

對於 OIDC 提供者,請將 OIDC 提供者的完全合格 URL 與子內容索引鍵一起使用,如以下範例所示:

  • server.example.com:sub

以下範例顯示授予的許可政策,其僅允許儲存貯體的字首符合字串時,存取在 Amazon S3 中的儲存貯體:

myBucket/Amazon/mynumbersgame/user1

此範例假設使用者使用 Login with Amazon 登入,且使用者使用一款稱為 mynumbersgame 的應用程式。使用者的唯一 ID 會顯示稱為 user_id 的屬性。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::myBucket"], "Condition": {"StringLike": {"s3:prefix": ["Amazon/mynumbersgame/${www.amazon.com:user_id}/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::myBucket/amazon/mynumbersgame/${www.amazon.com:user_id}", "arn:aws:s3:::myBucket/amazon/mynumbersgame/${www.amazon.com:user_id}/*" ] } ] }

您會為使用 Amazon Cognito、Facebook、Google 或另一個 OpenID Connect 相容的 IdP 登入的使用者建立類似的政策。這些政策會使用不同的提供者名稱當做路徑,以及不同的應用程式 ID 的一部分。

如需有關原則中可用於條件檢查的 OIDC 聯合金鑰的詳細資訊,請參閱。AWS OIDC 聯盟的可用金鑰