如何解決使用 AWS 管理主控台切換 IAM 角色的問題?

上次更新日期:2022 年 4 月 5 日

我嘗試使用 AWS 管理主控台切換 AWS Identity and Access Management (IAM) 角色,並收到類似以下的錯誤:

"Invalid information in one or more fields.Check your information or contact your administrator" (一個或多個欄位無效。請檢查您的資訊或聯絡您的管理員)。

簡短描述

出現此錯誤的原因可能是:

  • 不正確的 AssumeRole 動作許可
  • 不正確的 IAM 信任政策
  • 來自政策的明確拒絕
  • 不正確的帳戶 ID 或角色名稱
  • 需要外部 ID 才能切換角色
  • 不正確的信任政策條件

解決方案

按照這些指示驗證 IAM 政策組態,以便為您的情境切換 IAM 角色。

缺少或不正確的 AssumeRole 動作許可

若要切換 IAM 角色,IAM 實體必須具有 AssumeRole 動作許可。IAM 實體必須具有類似以下的政策以及AssumeRole 動作許可:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume"  
}

確認資源與您想要切換過去的 IAM 角色的 Amazon 資源名稱 (ARN) 相符。如需詳細資訊,請參閲授予使用者切換角色的許可

IAM 角色信任政策不信任 IAM 使用者的帳戶 ID

IAM 角色信任政策定義主體,該主體可以擔任驗證信任政策是否將 IAM 使用者的帳戶 ID 列為受信任的主體實體的角色。例如,名為 Bob 且帳戶 ID 為 111222333444 的 IAM 使用者想要切換到名為 Alice 且帳戶 ID 為 444555666777 的 IAM 角色。帳戶 ID 111222333444 是受信任的帳戶,帳戶 ID 444555666777 是信任帳戶。IAM 角色 Alice 具有信任 Bob 的信任政策,與以下類似:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {
                "AWS": “<111222333444>
            },
            "Condition": {}
        }
    ]
}

注意:最佳實務是遵循最低權限原則,並僅為使用者需要的角色指定完整的 ARN。

如需詳細資訊,請參閲修改角色信任政策 (主控台)

來自服務控制政策 (SCP) 或 IAM 政策的明確拒絕

如果您的 AWS 帳戶是 AWS Organizations 的一部分,則您的管理帳戶可能具有 SCP。請確認對於 AssumeRole 動作,沒有來自 SCP 的明確拒絕。檢查是否有依據 AWS 區域拒絕 API 動作的 SCP。AWS Security Token Service (AWS STS) 為全域服務,必須包含在全域服務排除清單中。請確認沒有任何來自 IAM 政策的明確拒絕,因為「拒絕」陳述式的地位高於「允許」陳述式。

如需更多資訊,請參閲根據請求的 AWS 區域拒絕存取 AWS

確認 AWS 帳戶 ID 和 IAM 角色名稱

在切換角色頁面上確認帳戶 ID 和 IAM 角色名稱是否正確。帳戶 ID 為 12 位的識別符,IAM 角色名稱是您想要擔任的角色的名稱。

如需詳細資訊,請參閲在主控台中切換角色的重要須知

需要外部 ID 才能切換到 IAM 角色

管理員可以使用外部 ID 授予第三方存取 AWS 資源。您不能在 AWS 管理主控台中將 IAM 角色切換到需要 ExternalId 條件鍵值的角色。您只能藉由呼叫支援 ExternalId 索引鍵的 AssumeRole 動作來切換到 IAM 角色。

如需詳細資訊,請參閱向第三方授予對您的 AWS 資源的存取權限時如何使用外部 ID

IAM 角色信任政策上的有效條件

確認您是否滿足 IAM 角色的信任政策中指定的所有條件。條件可以指定過期日期、外部 ID 或請求必須僅來自特定 IP 地址。在以下範例政策中,如果當前日期為指定日期之後的任何時間,則條件為 false。政策無法授予擔任 IAM 角色的許可。

"Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume"
    "Condition": {
        "DateLessThan" : {
            "aws:CurrentTime" : "2016-05-01T12:00:00Z"
        }
    }