部署公有子網路的預防性屬性型存取控制 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

部署公有子網路的預防性屬性型存取控制

Joel Alfredo Nunez Gonzalez 和 Samuel Ortega Sancho,Amazon Web Services

Summary

在集中式網路架構中,檢查和邊緣虛擬私有雲端 (VPCs) 會集中所有傳入和傳出流量,例如往返網際網路的流量。不過,這可能會產生瓶頸,或導致達到 AWS 服務配額的限制。與更常見、集中的方法相比,在其 VPCs中的工作負載中部署網路邊緣安全性可提供前所未有的可擴展性。這稱為分散式邊緣架構。

雖然在工作負載帳戶中部署公有子網路可以帶來好處,但它也會帶來新的安全風險,因為它會增加攻擊面。我們建議您僅在這些 VPCs 的公有子網路中部署 Elastic Load Balancing (ELB) 資源,例如 Application Load Balancer 或 NAT 閘道。在專用公有子網路中使用負載平衡器和 NAT 閘道,可協助您針對傳入和傳出流量實作精細的控制。

屬性型存取控制 (ABAC) 是根據使用者屬性建立精細許可的做法,例如部門、任務角色和團隊名稱。如需詳細資訊,請參閱 ABAC for AWS。ABAC 可以為工作負載帳戶中的公有子網路提供防護機制。這有助於應用程式團隊保持敏捷,而不會影響基礎設施的安全性。

此模式說明如何透過 AWS Organizations 中的服務控制政策 (SCP) 和 AWS Identity and Access Management (IAM) 中的政策來實作 ABAC,以協助保護公有子網路的安全。 AWS Organizations 您可以將 SCP 套用到組織的成員帳戶或組織單位 (OU)。這些 ABAC 政策允許使用者在目標子網路中部署 NAT 閘道,並防止他們部署其他 Amazon Elastic Compute Cloud (Amazon EC2) 資源,例如 EC2 執行個體和彈性網路介面。  

先決條件和限制

先決條件

  • AWS Organizations 中的組織

  • AWS Organizations 根帳戶的管理存取權

  • 在組織中,用於測試 SCP 的作用中成員帳戶或 OU

限制

  • 此解決方案中的 SCP 不會阻止使用服務連結角色的 AWS 服務在目標子網路中部署資源。這些服務的範例包括 Elastic Load Balancing (ELB)、Amazon Elastic Container Service (Amazon ECS) 和 Amazon Relational Database Service (Amazon RDS)。如需詳細資訊,請參閱 AWS Organizations 文件中的 SCP 對許可的影響。實作安全控制以偵測這些例外狀況。

架構

目標技術堆疊

  • 套用至 AWS Organizations 中 AWS 帳戶或 OU 的 SCP

  • 下列 IAM 角色:

    • AutomationAdminRole – 用於修改子網路標籤,並在實作 SCP 後建立 VPC 資源

    • TestAdminRole – 用來測試 SCP 是否阻止其他 IAM 主體執行為 預留的動作,包括具有管理存取權的主體 AutomationAdminRole

目標架構

這些標籤可防止使用者在公有子網路中部署 NAT 閘道以外的資源
  1. 您可以在目標帳戶中建立 AutomationAdminRole IAM 角色。此角色具有管理聯網資源的許可。請注意此角色獨有的下列許可:

    • 此角色可以建立 VPCs和公有子網路。

    • 此角色可以修改目標子網路的標籤指派。

    • 此角色可以管理自己的許可。

  2. 在 AWS Organizations 中,您將 SCP 套用到目標 AWS 帳戶或 OU。如需範例政策,請參閱此模式中的其他資訊

  3. CI/CD 管道中的使用者或工具可以擔任AutomationAdminRole角色,將SubnetType標籤套用至目標子網路。

  4. 透過擔任其他 IAM 角色,組織中的授權 IAM 主體可以管理目標子網路中的 NAT 閘道,以及 AWS 帳戶中其他允許的聯網資源,例如路由表。使用 IAM 政策授予這些許可。如需詳細資訊,請參閱 Amazon VPC 的身分和存取管理

自動化和擴展

為了協助保護公有子網路,必須套用對應的 AWS 標籤。套用 SCP 後,NAT 閘道是授權使用者可在具有 SubnetType:IFA標籤的子網路中建立的唯一 Amazon EC2 資源類型。(IFA 表示面向網際網路的資產。) SCP 可防止建立其他 Amazon EC2 資源,例如執行個體和彈性網路介面。我們建議您使用擔任該AutomationAdminRole角色的 CI/CD 管道來建立 VPC 資源,以便將這些標籤正確套用至公有子網路。

工具

AWS 服務

  • AWS Identity and Access Management (IAM) 可透過控制已驗證並獲授權使用的人員,協助您安全地管理對 AWS 資源的存取。

  • AWS Organizations 是一種帳戶管理服務,可協助您將多個 AWS 帳戶合併到您建立並集中管理的組織。在 AWS Organizations 中,您可以實作服務控制政策 (SCPs),這是一種可用來管理組織中許可的政策類型。

  • Amazon Virtual Private Cloud (Amazon VPC) 可協助您在已定義的虛擬網路中啟動 AWS 資源。這個虛擬網路類似於您在自己的資料中心內操作的傳統網路,具有使用可擴展的 AWS 基礎設施的優勢。

史詩

任務描述所需的技能

建立測試管理員角色。

在目標 AWS 帳戶中建立名為 TestAdminRole的 IAM 角色。將 AdministratorAccess AWS 受管 IAM 政策連接至新角色。如需說明,請參閱《IAM 文件》中的建立角色以將許可委派給 IAM 使用者

AWS 管理員

建立自動化管理員角色。

  1. 在目標 AWS 帳戶中建立名為 AutomationAdminRole的 IAM 角色。

  2. AdministratorAccess AWS 受管 IAM 政策連接至新角色。

以下是您可以用來從111122223333帳戶測試角色的信任政策範例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }
AWS 管理員

建立並連接 SCP。

  1. 使用其他資訊區段中提供的範例程式碼,建立安全控制政策。如需說明,請參閱 AWS Organizations 文件中的建立 SCP

  2. 將 SCP 連接至目標 AWS 帳戶或 OU。如需說明,請參閱 AWS Organizations 文件中的連接和分離服務控制政策

AWS 管理員
任務描述所需的技能

建立 VPC 或子網路。

  1. 擔任目標 AWS 帳戶中TestAdminRole的角色。

  2. 嘗試在現有 VPC 中建立 VPC 或新的公有子網路。如需說明,請參閱 Amazon VPC 文件中的建立 VPC、子網路和其他 VPC 資源。您不應該能夠建立這些資源。

  3. 擔任AutomationAdminRole角色,然後重試上一個步驟。現在,您應該能夠建立聯網資源。

AWS 管理員

管理標籤。

  1. 擔任目標 AWS 帳戶中TestAdminRole的角色。

  2. SubnetType:IFA標籤新增至可用的公有子網路。您應該可以新增此標籤。如需如何透過 AWS Command Line Interface (AWS CLI) 新增標籤的說明,請參閱 AWS CLI 命令參考中的 create-tags

  3. 在不變更您的登入資料的情況下,嘗試修改指派給此子網路的SubnetType:IFA標籤。您不應該能夠修改此標籤。

  4. 擔任AutomationAdminRole角色,然後重試先前的步驟。此角色應該能夠新增和修改此標籤。

AWS 管理員

在目標子網路中部署資源。

  1. 擔任TestAdminRole角色。

  2. 對於具有 SubnetType:IFA標籤的公有子網路,請嘗試建立 EC2 執行個體。如需說明,請參閱 Amazon EC2 文件中的啟動執行個體。在此子網路中,您不應該建立、修改或刪除 NAT 閘道以外的任何 Amazon EC2 資源。

  3. 在相同的子網路中,建立 NAT 閘道。如需說明,請參閱 Amazon VPC 文件中的建立 NAT 閘道。您應該能夠建立、修改或刪除此子網路中的 NAT 閘道。

AWS 管理員

管理 AutomationAdminRole 角色。

  1. 擔任TestAdminRole角色。

  2. 嘗試修改AutomationAdminRole角色。如需說明,請參閱 IAM 文件中的修改角色。您不應該能夠修改此角色。

  3. 擔任AutomationAdminRole角色,然後重試上一個步驟。現在,您應該能夠修改角色。

AWS 管理員
任務描述所需的技能

清除已部署的資源。

  1. 從 AWS 帳戶或 OU 分離 SCP。如需說明,請參閱 AWS Organizations 文件中的分離 SCP

  2. 刪除 SCP。如需說明,請參閱刪除 SCP (AWS Organizations 文件)。

  3. 刪除 AutomationAdminRole角色和 TestAdminRole角色。如需說明,請參閱 IAM 文件中的刪除角色

  4. 刪除您為此解決方案建立的所有聯網資源,例如 VPCs 和子網路。

AWS 管理員

相關資源

AWS 文件

其他 AWS 參考

其他資訊

下列服務控制政策是您可以用來在組織中測試此方法的範例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyVPCActions", "Effect": "Deny", "Action": [ "ec2:CreateVPC", "ec2:CreateRoute", "ec2:CreateSubnet", "ec2:CreateInternetGateway", "ec2:DeleteVPC", "ec2:DeleteRoute", "ec2:DeleteSubnet", "ec2:DeleteInternetGateway" ], "Resource": [ "arn:aws:ec2:*:*:*" ], "Condition": { "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } }, { "Sid": "AllowNATGWOnIFASubnet", "Effect": "Deny", "NotAction": [ "ec2:CreateNatGateway", "ec2:DeleteNatGateway" ], "Resource": [ "arn:aws:ec2:*:*:subnet/*" ], "Condition": { "ForAnyValue:StringEqualsIfExists": { "aws:ResourceTag/SubnetType": "IFA" }, "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } }, { "Sid": "DenyChangesToAdminRole", "Effect": "Deny", "NotAction": [ "iam:GetContextKeysForPrincipalPolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListInstanceProfilesForRole", "iam:ListRolePolicies", "iam:ListRoleTags" ], "Resource": [ "arn:aws:iam::*:role/AutomationAdminRole" ], "Condition": { "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } } ] }