亚马逊AWS官方博客

IAM Access Analyzer 更新:查找未使用的访问权限,在部署之前检查策略



今天,我们将为 AWS Identity and Access Management(IAM)访问权限分析器推出两项新功能:

未使用的访问权限分析器 – 一款新推出的分析器,可持续监控角色和用户,以寻找已授予但未实际使用的权限。中央安全团队可以利用控制面板视图,以帮助他们找到最能从审查未使用的权限、角色和 IAM 用户这一行为受益的账户。

自定义策略检查 – 验证新制定的策略未授予额外(可能是意外的)权限。通过为 CI/CD 管道和自定义策略工具添加自动化策略审查,您可以对 IAM 策略实施更严格的控制,并加快将 AWS 应用程序从开发环境转移到生产环境的过程。

我们来看一下今天发布的内容!

未使用的访问权限分析器
您已经可以创建用来监视外部访问权限的分析器。在今天的发布中,您可以创建一个分析器,以寻找过于宽松或已被废弃的访问权限。这包括未使用的 IAM 角色、IAM 用户未使用的访问密钥、IAM 用户未使用的密码以及活跃 IAM 角色和用户未使用的服务和操作。

查看面向整个组织或特定于账户的分析器生成的调查结果之后,您可以通过移除不需要的权限来采取行动。您可以从 AWS 管理控制台、CLI 或 API 创建分析器并分析调查结果。让我们从 IAM 控制台开始。我单击左侧导航栏中的分析器和设置

我可以看到我当前的分析器(在此示例中没有任何分析器)。我单击创建分析器以继续:

我指定未使用的访问权限分析,保留 90 天的默认跟踪周期,并选择检查我的账户而不是我的组织,然后单击创建分析器

我的分析器已经创建好了,稍后我再回来看看它发现了什么。在一分钟之内就得出了我的调查结果,但这些结果不尽相同。下面是一些调查结果:

如您所见,我有很多未使用的 IAM 角色和权限(很明显,我不是一个好榜样)。我可以单击“调查结果”,以了解更多信息:

如果这是我需要的角色,我可以单击归档,以便将其从有效调查结果列表中移除。我也可以创建归档规则,以便对类似的调查结果执行同样的操作:

外部访问权限分析器以类似的方式工作,如果您不熟悉访问权限分析器但准备查找和移除额外的权限,此分析器将是一个理想的起点:

控制面板为我提供了所有有效调查结果的概览:

如果我创建一个分析器并将我的组织指定为信任区,我还可以查看一个列表,其中会显示拥有最多有效调查结果的账户:

也可以从命令行中使用此功能。我可以通过如下方式创建一个新的分析器:

$ aws access-analyzer create-analyzer --type ACCOUNT_UNUSED_ACCESS \
  --analyzer-name OneWeek \
  --configuration '{"unusedAccess" : {"unusedAccessAge" : 90}}'
----------------------------------------------------------------------------
|                              CreateAnalyzer                              |
+-----+--------------------------------------------------------------------+
|  arn|  arn:aws:access-analyzer:us-east-1:348414629041:analyzer/OneWeek   |
+-----+--------------------------------------------------------------------+

我可以列出调查结果,或许我想要的只是要启动的实际资源 ID:

$  aws access-analyzer list-findings-v2 \
  --analyzer-arn  arn:aws:access-analyzer:us-east-1:123456789012:analyzer/OneWeek 
  --output json |
 jq -r '.findings[] | .resource'

arn:aws:iam::123456789012:role/MobileHub_Service_Role
arn:aws:iam::123456789012:role/EKSClusterRole
arn:aws:iam::123456789012:role/service-role/AWSDataSyncS3BucketAccess-jbarr-data
arn:aws:iam::123456789012:role/rds-monitoring-role
arn:aws:iam::123456789012:role/IsengardRoleForDependencyAssuranceIamAnalyzer
arn:aws:iam::123456789012:role/service-role/s3crr_role_for_rep-src_to_rep-dest
arn:aws:iam::123456789012:role/service-role/AWSDeepRacerServiceRole
...

我可以按 ID 将调查结果归档:

$ aws access-analyzer update-findings  \
  --analyzer-arn arn:aws:access-analyzer:us-east-1:123456789012:analyzer/OneWeek 
  --status ARCHIVED --ids "f0492061-8638-48ac-b91a-f0583cc839bf"

我可以使用 IAM 访问权限分析器 API 执行相同的操作。

此功能根据每月分析的 IAM 角色数量定价,并且已在所有提供 IAM 的 AWS 区域提供。

自定义策略检查
现在,您可以在部署之前验证 IAM 策略符合您的安全标准,并主动检测对策略进行的不符合要求的更新。这样可以帮助您更快地进行创新、更高效地将应用程序从开发环境转移到生产环境,并确信您所做的任何更改都代表了您的意图。

让我们从我的 allow-all-ssm 策略开始:

出于说明目的,我对它进行了编辑,以添加 S3 访问权限:

随后,我单击检查新访问权限,以确认我知道将收取费用,然后单击检查策略

自动推理将验证策略,并表明我确实启用了新的访问权限。如果这是我的意图,我会单击下一步以继续,否则我会重新考虑我对策略进行的更改:

这是一个非常简单的假设示例,但我相信您会发现它对您的安全工作有多么有用和有价值。您也可以从 CLI(check-no-new-access)和 API(CheckNoNewAccess)访问此示例。

在您的 CI/CD 管道、AWS CloudFormation Hooks 和自定义策略工具中,还可以使用另一个命令和函数。check-access-not-grantedCheckAccessNotGranted 接受策略文档和权限(例如 s3:Get*),并检查以确保策略未授予权限。例如,您可以使用它确保无法部署一个指定应当禁用 Security Hub 的策略。这样可以帮助您从开发环境转移到生产环境,并确信您的策略符合组织的安全标准。

此功能根据每月执行的检查次数定价,并且已在所有 AWS 商业区域和 AWS GovCloud 区域提供。

了解详情
AWS Identity and Access Management(IAM)访问权限分析器

Jeff