如何使用 IAM 角色將來自特定 IP 地址的 API 呼叫限制到 AWS 管理主控台?

2 分的閱讀內容
0

我想限制 AWS API 呼叫特定 IP 地址的存取權。如何使用 AWS 身分和存取管理 (IAM) 角色限制從 API 呼叫 AWS 管理主控台的存取權?

簡短描述

您可以在 IAM 政策的條件元素中使用 aws:SourceIp 全域條件键來限制來自特定 IP 地址的 API 呼叫。不過,這會拒絕存取代表您撥打電話的 AWS 服務 (例如 AWS CloudFormation),除非您同時使用 aws:ViaAWSService 全域條件。如需詳細資訊,請參閱 AWS: 根據來源 IP 拒絕存取 AWS

例如,假設您有一個 AWS 服務角色可讓 AWS CloudFormation 呼叫 Amazon Elastic Compute Cloud (Amazon EC2) 來停止執行個體。因為目標服務 (Amazon EC2) 會看到呼叫服務 (AWS CloudFormation) 而非原始使用者的 IP 地址,因此請求遭到拒絕。您無法透過呼叫服務將原始 IP 地址傳遞至目標服務以在 IAM 政策中進行評估。

解決方法

建立 IAM 角色,並將附加到此角色的同一組權限作為附加到 IAM 使用者的 IAM 政策。這會提供 IAM 使用者權限,只有當請求來自指定的 IP 地址時,才能承擔角色sts:AssumeRole API。這是因為當使用者嘗試承擔角色時** aws:SourceIp** 限制檢查。當使用者承擔 IAM 角色時,他們會取得附加到該角色的 IAM 政策權限。由於附加至該角色的 IAM 政策不使用 aws:SourceIp 條件鍵,因此允許存取 AWS 服務。

建立下列 IAM 政策,然後將此政策附加到具有程式設計存取權的 IAM 使用者。此 IAM 政策允許 IAM 使用者承擔角色名稱為 Bob 的角色。Bob 不需要額外的權限。當 IAM 使用者成功承擔 Bob 角色時,會取得所有其他必要的權限。

注意:

IAM 使用者政策範例

此範例政策具有對帳戶中的資源執行 API 呼叫的權限。

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::EXAMPLEIAMACCOUNTID:role/Bob"
  }
}

建立 IAM 角色 Bob 以將權限委派給 IAM 使用者。依照建立 IAM 角色 (主控台) 的指示進行。您也可以使用 AWS CLI 或 API。

注意:

  • 使用主控台建立角色時,請修改Bob 信任政策範例類似的角色信任政策。透過使用 AWS CLI create-role 或 API CreateRole,您可以將信任關係政策文件作為 update-assume-role-policy 文件參數值傳遞。
  • 此請求必須來自指定的 IP 地址範圍 103.15.250.0/24 或 12.148.72.0/23。否則,IAM 使用者將無法承擔該角色並進行 API 呼叫。

IAM 角色信任政策範例

如果請求來自 IP 地址範圍 103.15.250.0/24 或 12.148.72.0/23,則此範例信任政策允許使用者承擔該角色。

**注意:**使用您的 IAM 使用者名稱替換 YOURIAMUSERNAME

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "103.15.250.0/24",
            "12.148.72.0/23"
          ]
        }
      }
    }
  ]
}

**注意:**此因應措施會中斷 AWS CloudTrail 日誌,因為動作是由使用者承擔的 IAM 角色執行,而不是由 IAM 使用者執行。IAM 使用者執行的 assumeRole API 呼叫會記錄在 IAM 使用者下的 CloudTrail 日誌中。由 IAM 角色執行的任何其他 API 呼叫都會記錄在角色名稱下的 CloudTrail 日誌中。


相關資訊

AWS 全域條件內容鍵