建立 Web 身分的角色或 OpenID Connect 聯合身分 (主控台) - AWS Identity and Access Management

建立 Web 身分的角色或 OpenID Connect 聯合身分 (主控台)

您可以使用 Web 身分或 OpenID Connect Federation (OIDC) 身分提供者,而不是以您的 AWS 帳戶建立 IAM 使用者。您可以使用身分提供者 (IdP),管理 AWS 外部的使用者身分,並提供這些外部使用者身分許可,以存取您帳戶中的 AWS 資源。如需有關聯合身分與身分提供者的詳細資訊,請參閱 身分提供者與聯合

建立適用於 Web 身分或 OIDC 的角色的先決條件

您必須先完成以下先決條件步驟,然後才能建立用於 Web 聯合身分的角色。

準備建立用於 Web 聯合身分的角色

  1. 註冊為具有一或多個 IdP 的開發人員。如果您建立的應用程式需要存取您的 AWS 資源,您還需要在應用程式設定提供者資訊。當您這麼做時,提供者會將應用程式唯一的 ID 提供給您的應用程式或對象。(不同的提供者可能使用不同的術語來表達此程序。本指南則使用術語設定來表示向提供者識別您應用程式的程序)。您可以在每個提供者設定多個應用程式,或在單一應用程式設定多個提供者。檢視有關使用身分提供者的相關資訊:

  2. 從身分提供者取得所需資訊後,在 IAM 中建立身分提供者。如需詳細資訊,請參閱 建立 OpenID Connect (OIDC) 身分提供者

    重要

    如果您正在使用來自 Google、Facebook 或 Amazon Cognito 的 OIDC 身分提供者,請勿在 AWS Management Console 建立個別的 IAM 身分提供者。這些 OIDC 身分提供者已內建於 AWS,並且可供您使用。略過此步驟,並直接移至以下步驟,使用您的身分提供者建立新角色。

  3. 為已進行 IdP 身分驗證的使用者要擔任的角色準備政策。正如任何角色一樣,手機應用程式的角色含有兩項政策。其中一項是信任政策,其指定擔任該角色的對象。另一項政策是許可政策,其指定行動應用程式被允許或拒絕存取的 AWS 動作和資源。

    對於 Web 身分提供者,我們建議您使用 Amazon Cognito 來管理身分。在這種情況下,請使用類似於這個範例的信任政策。

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Federated": "cognito-identity.amazonaws.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east-2:12345678-abcd-abcd-abcd-123456"}, "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "unauthenticated"} } } }

    以 Amazon Cognito 指派給您的身分集區 ID 取代 us-east-2:12345678-abcd-abcd-abcd-123456

    如果您手動設定 Web 身分 IdP,當您建立信任政策,您必須使用三個值,以確保只有您的應用程式可擔任該角色:

    • 對於 Action 元素,可使用 sts:AssumeRoleWithWebIdentity 動作。

    • 如需 Principal 元素,請使用字串 {"Federated":providerUrl/providerArn}

      • 對於一些常見的 OpenID Connect (OIDC) IdP,providerUrl 為 URL。以下範例包含多個方式,為部分常見 idP 指定委託人:

        "Principal":{"Federated":"cognito-identity.amazonaws.com"}

        "Principal":{"Federated":"www.amazon.com"}

        "Principal":{"Federated":"graph.facebook.com"}

        "Principal":{"Federated":"accounts.google.com"}

      • 對於其他的 OIDC 提供者,請使用您在 步驟 2 中建立的 OIDC 身分提供者的 ARN,如以下範例所示:

        "Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/server.example.com"}

    • 對於 Condition 元素,可使用 StringEquals 條件來限制許可。測試身分集區 ID (對於 Amazon Cognito) 或應用程式 ID (對於其他提供者)。它應與您透過 IdP 配置應用程式時所收到的應用程式 ID 一致。這樣可確保請求來自您的應用程式。建立類似以下範例的條件元素,其取決於您使用的 IdP:

      "Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east:12345678-ffff-ffff-ffff-123456"}}

      "Condition": {"StringEquals": {"www.amazon.com:app_id": "amzn1.application-oa2-123456"}}

      "Condition": {"StringEquals": {"graph.facebook.com:app_id": "111222333444555"}}

      "Condition": {"StringEquals": {"accounts.google.com:aud": "66677788899900pro0"}}

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

      "Condition": {"StringEquals": {"server.example.com:aud": "appid_from_oidc_idp"}}

    請注意,角色的信任政策中的委託人的值是 IdP 特有的。角色只可以指定一個委託人。因此,如果行動應用程式允許使用者從多個 IdP 登入,則必須為您要支援的每個 IdP 建立不同的角色。因此,您應該分別為每個 IdP 建立信任政策。

    下列範例信任政策是針對使用者從 Login with Amazon 登入時的行動應用程式而設計。在範例中,amzn1.application-oa2-123456 代表使用 Login with Amazon 設定應用程式時 Amazon 所指派的應用程式 ID。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForLoginWithAmazon", "Effect": "Allow", "Principal": {"Federated": "www.amazon.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"www.amazon.com:app_id": "amzn1.application-oa2-123456"}} }] }

    下列範例信任政策是針對使用者從 Facebook 登入時的行動應用程式而設計。在本範例中,111222333444555 代表由 Facebook 指派的應用程式 ID。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForFacebook", "Effect": "Allow", "Principal": {"Federated": "graph.facebook.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"graph.facebook.com:app_id": "111222333444555"}} }] }

    下列範例信任政策是針對使用者從 Google 登入時的行動應用程式而設計。在本範例中,666777888999000 代表由 Google 指派的應用程式 ID。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForGoogle", "Effect": "Allow", "Principal": {"Federated": "accounts.google.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"accounts.google.com:aud": "666777888999000"}} }] }

    下列範例信任政策是針對使用者使用 Amazon Cognito 登入時的行動應用程式而設計。在此範例中,us-east:12345678-ffff-ffff-ffff-123456 代表由 Amazon Cognito 指派的身分集區 ID。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForCognito", "Effect": "Allow", "Principal": {"Federated": "cognito-identity.amazonaws.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east:12345678-ffff-ffff-ffff-123456"}} }] }

建立 Web 身分或 OIDC 的角色

完成先決條件後,您可在 IAM 建立角色。以下程序介紹如何在 AWS Management Console 中建立用於 Web 聯合身分/OIDC 聯合身分的角色。若要從 AWS CLI 或 AWS API 建立角色,請參閱針對第三方身分提供者建立角色 (聯合身分)的程序。

重要

如果您使用 Amazon Cognito,則應該使用 Amazon Cognito 主控台來設定角色。否則,請使用 IAM 主控台來為 Web 聯合身分建立一個角色。

為 Web 聯合身分建立 IAM 角色

  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)。

  3. 選擇 Web identity (Web 身分) 角色類型。

  4. 針對 Identity provider (身分提供者),選擇您角色的身分提供者:

    • 如果要為個別 Web 身分提供者建立角色,請選擇 Login with AmazonFacebookGoogle

      注意

      您必須為想要支援的每個身分提供者建立單獨的角色。

    • 如果您在為 Amazon Cognito 建立進階案例角色,請選擇 Amazon Cognito

      注意

      只有在處理進階情況時,需要手動建立與 Amazon Cognito 一起使用的角色。否則,Amazon Cognito 可以為您建立角色。如需有關 Amazon Cognito 的詳細資訊,請參閱《AWS Mobile SDK for iOS 開發人員指南》中的 Amazon Cognito 身分,以及《AWS Mobile SDK for Android 開發人員指南》中的 Amazon Cognito 身分

  5. 輸入您的應用程式的識別碼。識別碼的標籤會因所選擇的提供者而改變:

    • 如果您要為 Login with Amazon 建立角色,請將應用程式 ID 輸入 Application ID (應用程式 ID) 方塊中。

    • 如果您要為 Facebook 建立角色,請在 Application ID (應用程式 ID) 方塊中輸入應用程式 ID。

    • 如果您要為 Google 建立角色,請在 Audience (觀眾) 方塊中輸入觀眾名稱。

    • 如果您要為 Amazon Cognito 建立角色,請在 Identity Pool ID (身分集區 ID) 方塊中輸入您為 Amazon Cognito 應用程式建立的身分集區 ID。

  6. (選用) 按一下 Add condition (optional) (新增條件 (選用)),以建立應用程式使用者在能夠使用角色所授予的許可之前所必須滿足的其他條件。例如,您可以新增一個條件,僅授予特定 IAM 使用者 ID 存取 AWS 資源。

  7. 檢閱您的 Web 身分資訊,然後選擇 Next: Permissions (下一步:許可)

  8. IAM 包含您帳戶中的 AWS 受管和客戶受管政策清單。選取用於許可政策的政策,或者選擇 Create policy (建立政策) 以開啟新的瀏覽器標籤,並從頭建立新的政策。如需詳細資訊,請參閱程序 建立 IAM 政策 中的步驟 4。在您建立政策後,關閉該標籤並返回您的原始標籤。選取您要 Web 身分使用者具有之許可政策旁的核取方塊。如果您希望,您目前可以不選取政策,稍後再將政策連接到角色。角色預設沒有任何許可。

  9. (選用) 設定許可界限。這是進階功能。

    開啟 Set permissions boundary (設定許可界限) 區段,並選擇 Use a permissions boundary to control the maximum role permissions (使用許可界限來控制角色許可上限)。選取用於許可界限的政策。

  10. 選擇 Next: Tags (下一步:標籤)。

  11. (選用) 藉由連接標籤做為索引鍵/值組,將中繼資料新增至角色。如需有關在 IAM 中使用標籤的詳細資訊,請參閱 標記 IAM 資源

  12. 選擇 Next:Review (下一步:檢閱)

  13. 針對 Role name (角色名稱),輸入角色名稱。角色名稱在您的 AWS 帳戶內必須是獨一無二的。它們無法透過大小寫進行區分。例如,您無法建立名為 PRODROLEprodrole 的角色。因為有其他 AWS 資源可能會參照角色,所以您無法在建立角色之後編輯角色名稱。

  14. (選用) 針對 Role description (角色說明),輸入新角色的說明。

  15. 檢閱角色,然後選擇 Create role (建立角色)