本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
IAM 角色
建立身分集區時,系統會提示您更新使用者所擔任的 IAM 角色。IAM 角色運作的方式如下:當使用者登入您的應用程式時,Amazon Cognito 會為使用者產生暫時 AWS 憑證。這些暫時登入資料會與特定 IAM 角色建立關聯。您可以使用 IAM 角色定義一組存取 AWS 資源的許可。
您可以為已驗證和未驗證的使用者指定預設的 IAM 角色。此外,您也可以定義規則,以依據使用者 ID 權杖中的聲明,為每個使用者選擇角色。如需詳細資訊,請參閱使用以角色為基礎的存取控制。
Amazon Cognito 主控台預設會建立 IAM 角色,可存取 Amazon Mobile Analytics 和 Amazon Cognito Sync。或者,您也可以選擇使用現有 IAM 角色。
修改 IAM 角色以允許或限制存取其他服務。若要執行此作業,請登入 IAM 主控台
注意
根據最佳實務,請定義遵循授予最低權限原則的政策。換言之,政策僅包含使用者執行任務所需要的許可。如需詳細資訊,請參閱《IAM 使用者指南》中的授予最低權限。
請記住,未登入您應用程式的使用者會擔任未驗證的身分。一般而言,您指派給未驗證身分的許可,應該比已驗證身分的許可更具限制性。
設定信任政策
Amazon Cognito 使用 IAM 角色為您的應用程式使用者產生暫時憑證。對許可的存取權是由角色的信任關係來控制。進一步了解 角色信任和許可。Amazon Cognito 會代理 AWS STS 和身分集區 IdPs之間的連線。
呈現給 的字符是由身分集區 AWS STS 產生,該集區會將使用者集區、社交或 OIDC 提供者字符或 SAML 聲明轉譯為自己的字符。身分集區權杖包含身分集區 ID 的 aud
宣告。
當 IAM 角色信任政策Principal
的 是類似 的身分集區服務主體時cognito-identity.amazonaws.com
,您無法建立或修改角色信任政策,以允許任何身分集區擔任該角色。使用身分集區主體時, Action
元素必須具有 Condition
,要求 僅由您的身分集區AssumeRoleWithWebIndentity
執行,如 等條件金鑰所指定cognito-identity.amazonaws.com:aud
。其他條件索引鍵可用,但aud
為必要項目。如果您嘗試儲存沒有此類型條件的角色信任政策,IAM 會傳回錯誤。
如需 OIDC (Web 身分) 聯合金鑰的詳細資訊,請參閱 AWS OIDC 聯合的可用金鑰。
以下是 Amazon Cognito 可用的 OIDC 聯合條件金鑰。
cognito-identity.amazonaws.com:aud
-
將角色限制為來自一或多個身分集區的 操作。Amazon Cognito 會在身分集區權杖的
aud
宣告中指出來源身分集區。 cognito-identity.amazonaws.com:amr
-
將角色限制為
authenticated
或unauthenticated
(訪客) 使用者。Amazon Cognito 會在身分集區字符中指出amr
宣告中的身分驗證狀態。 cognito-identity.amazonaws.com:sub
-
依 UUID 將角色限制為一或多個使用者。此 UUID 是身分集區中的使用者身分 ID。此值不是來自使用者原始身分提供者
sub
的值。Amazon Cognito 會在身分集區字符的sub
宣告中指出此 UUID。
下列範例角色信任政策允許聯合身分服務主體cognito-identity.amazonaws.com
呼叫 AWS STS API AssumeRoleWithWebIdentity
。只有在 API 請求中的身分集區權杖具有以下宣告時,請求才會成功。
-
身分集區識別碼
us-west-2:abcdefg-1234-5678-910a-0e8443553f95
的aud
宣告。 -
當使用者已登入且不是來賓使用者時,新增的
authenticated
amr
宣告。
基本 (傳統) 身分驗證中 IAM 角色的信任政策
Summary
只有在目標角色的信任政策包含 aud
條件時,身分集區才能代表基本身分驗證流程中的使用者擔任角色。
基本身分驗證對不安全的角色信任政策具有與增強型身分驗證相同的限制:您無法儲存無法以 aud
條件限制支援身分集區的角色信任政策。服務啟動時不會強制執行此限制。在強制執行此要求之前,您可以建立沒有其他安全條件的角色信任政策。在強制執行此要求之後, 會 AWS STS 允許 Web 身分擔任未受條件保護的角色,但在未引入這些條件的情況下,無法修改這些角色。
增強型流程身分驗證需要 IAM 角色與身分集區位於相同的 AWS 帳戶 中。但在基本身分驗證中,您的應用程式會在其中撰寫AssumeRoleWithWebIdentity
請求,您的應用程式可以請求 擔任不同帳戶中的角色。不過,如果目的地角色具有不強制執行aud
條件的舊版信任政策,您的跨帳戶擔任角色請求將會失敗。
身分集區針對身分發行的字符,包含身分集區 AWS 帳戶 來源的相關資訊。當您在 AssumeRoleWithWebIdentity API 請求中呈現身分集區字符時, 會 AWS STS 檢查來源身分集區是否與 IAM 角色 AWS 帳戶 相同。如果 AWS STS 判斷請求是跨帳戶,則會檢查角色信任政策是否有 aud
條件。如果角色信任政策中沒有這類條件,則擔任角色呼叫會失敗。如果請求不是跨帳戶, AWS STS 不會強制執行此限制。最佳實務是,一律將此類型的條件套用至身分集區角色的信任政策。
以下是信任政策範例,該政策符合 IAM 角色對具有數個身分集區之基本身分驗證的最低要求。根據最佳實務, 也僅允許具有 "cognito-identity.amazonaws.com:amr": "authenticated"
條件的已驗證身分。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": [ "us-west-2:abcdefg-1234-5678-910a-0e8443553f95", "us-west-2:hijklmo-5678-9101-112b-0e4221776g96", "us-west-2:pqrstuv-9101-1121-314c-0e2110887h97" ] } } } ] }
其他信任政策條件
跨身分集區重複使用角色
若要跨多重身分集區重複使用角色 (因為這些集區共用一組通用的許可),您可以併入多個身分集區,如下所示:
"StringEquals": { "cognito-identity.amazonaws.com:aud": [ "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "us-east-1:98765432-dcba-dcba-dcba-123456790ab" ] }
限制對特定身分的存取權
若要建立政策,並僅限用於一組特定的應用程式使用者,請勾選 cognito-identity.amazonaws.com:sub
值:
"StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "cognito-identity.amazonaws.com:sub": [ "us-east-1:12345678-1234-1234-1234-123456790ab", "us-east-1:98765432-1234-1234-1243-123456790ab" ] }
限制對特定供應商的存取權
若要建立政策,並僅限用於透過特定供應商 (可能是您自己的登入供應商) 登入的使用者,請勾選 cognito-identity.amazonaws.com:amr
值:
"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "login.myprovider.myapp" }
例如,只信任 Facebook 的應用程式會有下列 amr 子句:
"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }
存取政策
您附加至角色的許可會套用至擔任該角色的所有使用者。若要將使用者的存取權分割,請使用政策條件和變數。如需詳細資訊,請參閱 IAM 政策元素:變數和標籤。您可以使用此 sub
條件,在存取政策中限制對 Amazon Cognito 身分 ID 的動作。請謹慎使用此選項,尤其是針對缺少一致使用者 ID 的未驗證身分。如需 Web 聯合與 Amazon Cognito 之 IAM 政策變數的詳細資訊,請參閱AWS Identity and Access Management 《 使用者指南》中的 IAM 和 AWS STS 條件內容索引鍵。
為了提升安全性保護,Amazon Cognito 針對您在強化流程中指派未驗證的使用者,使用 GetCredentialsForIdentity
對憑證套用縮減規模政策。縮減規模政策會在您套用至未經身分驗證角色的 IAM 政策中新增 內嵌工作階段政策 和 AWS 受管工作階段政策。由於您必須同時針對角色和工作階段政策授予 IAM 政策的存取,因此縮減規模政策會限制使用者存取下列清單外的服務。
注意
在基本 (傳統) 流程中,您可以發出自己的 AssumeRoleWithWebIdentity API 請求,並將這些限制套用至請求。對於最佳安全實務,請勿將此縮減規模政策以上的任何許可指派給未經身分驗證的使用者。
Amazon Cognito 也可防止已驗證和未經驗證的使用者向 Amazon Cognito 身分集區和 Amazon Cognito Sync 發出 API 請求。其他 AWS 服務 可能會限制 Web 身分的服務存取。
在具有強化流程的成功請求中,Amazon Cognito 會在背景發出 AssumeRoleWithWebIdentity
API 請求。在此請求中的參數中,Amazon Cognito 包括以下內容。
-
使用者的身分 ID。
-
您的使用者想要擔任的 IAM 角色。
-
加上內嵌工作階段政策的
policy
參數。 -
PolicyArns.member.N
參數,其值為 AWS 受管政策,可在 Amazon CloudWatch 中授予其他許可。
未經身分驗證的使用者可存取的服務
使用強化流程時,Amazon Cognito 會縮小套用於使用者工作階段的政策範圍,防止使用者使用下列清單以外的任何其他服務。對於子服務,只允許特定的動作。
類別 | 服務 |
---|---|
分析 |
Amazon Data Firehose Amazon Managed Service for Apache Flink |
應用程式整合 |
Amazon Simple Queue Service |
擴增實境和虛擬實境 |
Amazon Sumerian¹ |
商業應用程式 |
Amazon Mobile Analytics Amazon Simple Email Service |
運算 |
AWS Lambda |
密碼編譯和 PKI |
AWS Key Management Service 1 |
資料庫 |
Amazon DynamoDB Amazon SimpleDB |
前端 Web 與行動裝置 |
AWS AppSync Amazon Location Service Amazon Simple Notification Service Amazon Pinpoint Amazon Location Service |
遊戲開發 |
Amazon GameLift 伺服器 |
物聯網 (IoT) |
AWS IoT |
機器學習 |
Amazon CodeWhisperer Amazon Comprehend Amazon Lex Amazon Machine Learning Amazon Personalize Amazon Polly Amazon Rekognition Amazon SageMaker AI1 Amazon Textract¹ Amazon Transcribe Amazon Translate |
管理與治理 |
Amazon CloudWatch Amazon CloudWatch Logs |
聯網與內容交付 |
Amazon API Gateway |
安全、身分與合規 |
Amazon Cognito 使用者集區 |
儲存 |
Amazon Simple Storage Service |
1 對於下表 AWS 服務 中的 ,內嵌政策會授予動作子集。表格會顯示每個子集中的可用動作。
AWS 服務 | 未經身分驗證的強化流程使用者的最大許可 |
---|---|
AWS Key Management Service |
|
Amazon SageMaker AI |
|
Amazon Textract |
|
Amazon Sumerian |
|
Amazon Location Service |
|
若要授予 AWS 服務 超過此清單的存取權,請在您的身分集區中啟用基本 (傳統) 身分驗證流程。如果您的使用者看到未驗證使用者獲指派 IAM 角色的政策 AWS 服務 所允許的NotAuthorizedException
錯誤,請評估您是否可以從使用案例中移除該服務。如果不能,請切換至基本流程。
訪客使用者的內嵌工作階段政策
Amazon Cognito 會先在 IAM 登入資料的請求中套用內嵌政策。內嵌工作階段政策會限制使用者的有效許可,無法包含下列清單以外的任何 AWS 服務 的存取。您也必須在套用至使用者 IAM 角色的政策 AWS 服務 中授予這些許可。使用者對於擔任角色工作階段的有效許可,是指派給其角色的政策及其工作階段政策的交集。如需詳細資訊,請參閱 AWS Identity and Access Management 使用者指南中的工作階段政策。
Amazon Cognito 會將下列內嵌政策新增至 AWS 區域 中使用者預設啟用的工作階段。如需內嵌政策和其他工作階段政策的淨效果概觀,請參閱 未經身分驗證的使用者可存取的服務。
對於所有其他區域,內嵌範圍向下兼容規則會包含預設區域中列出的所有項目,但下列 Action
陳述式除外。
"cognito-sync:*", "sumerian:View*", "codewhisperer:*", "textract:DetectDocumentText", "textract:AnalyzeDocument", "sdb:*"
訪客的 AWS 受管工作階段政策
Amazon Cognito 也會將 AWS 受管政策作為工作階段政策套用到未驗證訪客的增強流程工作階段。此政策使用政策 限制未驗證使用者許可的範圍AmazonCognitoUnAuthedIdentitiesSessionPolicy
。
您也必須在連接到未驗證 IAM 角色的政策中授予此許可。使用者對擔任角色工作階段的有效許可是指派給其角色的 IAM 政策及其工作階段政策的交集。如需詳細資訊,請參閱 AWS Identity and Access Management 使用者指南中的工作階段政策。
如需此 AWS 受管政策和其他工作階段政策的淨效果概觀,請參閱 未經身分驗證的使用者可存取的服務。
AmazonCognitoUnAuthedIdentitiesSessionPolicy
受管政策具有下列許可。
存取政策範例
在本節中,您可以找到 Amazon Cognito 存取政策範例,這些政策會授予您的使用者執行特定操作所需的最低許可。您可以盡可能使用政策變數,進一步限制特定身分 ID 的許可。例如,使用 ${cognito-identity.amazonaws.com:sub}。如需詳細資訊,請參閱 AWS Mobile 部落格的了解 Amazon Cognito 身分驗證第 3 部分:角色和政策
注意
基於安全最佳實務,政策應該只包含使用者執行任務所需的許可。這表示您應該盡可能嘗試一律限定個別身分才能存取物件。
授予身分對 Amazon S3 中的單一物件具有讀取存取權
下列存取政策會將讀取許可授予身分,以從指定的 S3 儲存貯體擷取單一物件。
授予身分同時對 Amazon S3 中的身分特定路徑具有讀取和寫入存取權
下列存取政策將字首映射至 ${cognito-identity.amazonaws.com:sub}
變數,以授予讀取和寫入許可來存取 S3 儲存貯體中的特定字首 “folder”。
使用此政策,透過 ${cognito-identity.amazonaws.com:sub}
插入的身分 (例如 us-east-1:12345678-1234-1234-1234-123456790ab
) 可取得、放入和列出 arn:aws:s3:::amzn-s3-demo-bucket/us-east-1:12345678-1234-1234-1234-123456790ab
中的物件。不過,該身分不會獲授予 arn:aws:s3:::amzn-s3-demo-bucket
中其他物件的存取權。
Amazon S3 Access Grants 可實現類似的存取模型。
將 Amazon DynamoDB 精細定義存取權指派給身分
以下存取政策使用 Amazon Cognito 環境變數,提供對 DynamoDB 資源的精細定義存取控制。這些變數依身分 ID 授予對 DynamoDB 中的項目的存取權。如需詳細資訊,請參閱《Amazon DynamoDB 開發人員指南》中的使用 IAM 政策條件進行精細定義存取控制。
授予身分許可以叫用 Lambda 函數
下列存取政策授予身分許可以叫用 Lambda 函數。
授予身分許可以發佈記錄到 Kinesis 資料串流
以下存取政策允許身分對任何 Kinesis Data Streams 使用 PutRecord
操作。它可以套用到需要將資料記錄新增至帳戶中所有串流的使用者。如需詳細資訊,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的使用 IAM 控制對 Amazon Kinesis 資料串流資源的存取。
授予身分存取 Amazon Cognito Sync 存放區中的資料
以下存取政策授予身分許可只能存取他們自己在 Amazon Cognito Sync 存放區中的資料。
角色信任和許可
這些角色的不同之處,在於其信任關係。以下為未驗證的角色的範例信任政策:
此政策授予來自 cognito-identity.amazonaws.com
(OpenID Connect 權杖的發行者) 的聯合身分使用者許可以擔任這個角色。此外,政策會限制權杖的 aud
(在此案例中為身分集區 ID) 來配合身分集區。最後,政策會指定權杖 (由 Amazon Cognito GetOpenIdToken
API 操作發出) 之多值 amr
宣告的其中一個陣列成員包含值 unauthenticated
。
當 Amazon Cognito 建立權杖時,會將權杖的 amr
設為 unauthenticated
或 authenticated
。如果 amr
是 authenticated
,該權杖包括身分驗證期間使用的任何供應商。這表示,您只要將 amr
條件變更如下,即可建立只信任透過 Facebook 登入之使用者的角色:
"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }
在變更角色的信任關係時,或是嘗試跨身分集區使用角色時,請小心謹慎。如果未將角色正確設定為信任您的身分集區,STS 結果會產生如下的例外狀況:
AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity
如果您看到此訊息,請檢查您的身分集區和身分驗證類型是否有適當的角色。