本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
識別具有 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
...
對於這些結構,app1
和 app2
代表不同的應用程式,例如不同的遊戲,以及每個應用程式的使用者各有不同的資料夾。app1
和 app2
的值可能是您指派的易記名稱 (例如 mynumbersgame
),或是提供者在您設定應用程式時指定的應用程式 ID。如果您決定在路徑中包含提供者名稱,那些也可以是像 Cognito
、Amazon
、Facebook
和 Google
等的易記名稱。
您通常可以透過 app1
建立 app2
和 AWS Management Console的資料夾,因為應用程式名稱是靜態值。如果您在路徑包含提供者名稱,也是 true,因為提供者名稱也是靜態值。相反地,使用者特定的資料夾 (user1
、user2
、user3
等等) 必須在執行階段從應用程式中建立,其使用的使用者 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 聯盟的可用金鑰