在今天的更新中,我们对 IAM Access Analyzer 进行了增强,扩展了自定义策略检查功能,并提供了更易于访问的指导,帮助您优化 IAM 策略。此次推出的两个新功能基于在 reInvent 2023 上发布的 自定义策略检查和未使用访问分析。以下是我们的新发布内容:
新的策略检查利用自动推理的能力,帮助您发现授予特定关键 AWS 资源访问权限的策略,或授予任何类型公共访问的策略。这两个检查旨在在部署前使用,可能作为 CI/CD 管道的一部分,帮助您主动发现不符合组织安全标准和政策的更新。
IAM Access Analyzer 现在为您提供指导,以便您可以与开发人员分享这些信息,以撤销那些不再需要的访问权限。这包括未使用的角色、未使用权限的角色、未使用的 IAM 用户访问密钥以及未使用的 IAM 用户密码。这些指导包括删除多余项目或用更严格的项目替换它们所需的步骤。
新的策略检查可以通过命令行或调用 API 功能来触发。这些检查会检查在请求中提供的策略文档,并返回 PASS 或 FAIL 值。在这两种情况下,PASS 表示策略文档正确拒绝了给定访问权限,而 FAIL 则表示该策略可能允许某些或所有权限。以下是新的检查内容:
检查无公共访问此检查适用于资源策略,检查该策略是否授予特定资源类型的公共访问权限。例如,您可以检查一个政策,查看它是否允许对 S3 存储桶的公共访问,方法是指定资源类型 AWSS3Bucket。有效的资源类型包括 DynamoDB 表和流、EFS 文件系统、OpenSearch 域、Kinesis 流及其流消费者、KMS 密钥、Lambda 函数、S3 存储桶和访问点、 Glacier、Secrets Manager 秘密、SNS 主题和队列,以及假设角色的 IAM 策略文档。有效资源类型的列表将随着时间的推移而扩展,详细信息可以在 CheckNoPublicAccess 文档中找到。
假设我有一个策略意外地赋予了公共访问权限给一个 Amazon Simple Queue Service (Amazon SQS) 队列。我会这样检查:
飞机专用加速器免费版bash aws accessanalyzer checknopublicaccess policydocument file//resourcejson resourcetype AWSSQSQueue output json
返回结果如下:
json{ result FAIL message 资源策略对给定资源类型授予了公共访问权限。 reasons [ { description 在以下语句中授予公共访问权限,sid SqsResourcePolicy。 statementIndex 0 statementId SqsResourcePolicy } ]}
我编辑策略以删除访问授权并再次尝试,这次检查通过:
json{ result PASS message 资源策略不对给定资源类型授予公共访问权限。}
检查未授予访问权限此检查一次操作一个资源策略或身份策略。它还接受可被视作 IAM 策略的一部分的操作和资源列表。此检查查看策略是否对列表中任何资源批准了不应有的访问权限。例如,可以使用此检查确保某策略不允许删除关键的 CloudTrail 路径:
bash aws accessanalyzer checkaccessnotgranted policydocument file//ctjson access resources=arnawscloudtrailuseast1123456789012trail/MySensitiveTrail policytype IDENTITYPOLICY output json
IAM Access Analyzer 表明检查失败:
json{ result FAIL message 策略文档授予对一个或多个列出的动作或资源的访问权限。 reasons [ { description 在索引为 0 的语句中列出的一个或多个动作或资源。 statementIndex 0 } ]}

我修复了策略并再次尝试,这次检查通过,表明策略没有对列出的资源授予访问权限:
json{ result PASS message 策略文档不会授予对列出的动作或资源的访问权限。}
在我之前的帖子中,我向您展示了 IAM Access Analyzer 如何发现并列出授予不必要访问权限的 IAM 项目。今天的发布使您现在可以获得帮助,以帮助您或您的开发团队解决这些发现。以下是我 AWS 帐户中的最新发现:
其中一些是我在获得访问某项服务的早期权限时留下的,方便我使用并进行博客更新;而其他则是由我作为云管理员的一般无能造成的!无论如何,我需要清理这些。让我们从第二项开始,未使用的访问密钥。我点击该项目,可以看到底部的新 推荐 部分:
我可以按照步骤删除访问密钥,或者我可以点击 存档 来将此发现从活动发现列表中移除,并加入存档列表。我还可以创建存档规则,以便在将来对类似发现进行相同处理。类似的推荐也适用于未使用的 IAM 用户、IAM 角色和密码。
现在,让我们查看一下 未使用的权限 的发现:
推荐的措施是用新策略替换现有策略。我可以并排预览新策略与现有策略:
如同第一个示例,我可以按照步骤操作或者将发现归档。
这些发现和推荐也可以通过命令行访问。我通过指定分析器和其中的发现来生成推荐:
bash aws accessanalyzer generatefindingrecommendation analyzerarn arnawsaccessanalyzerbetauswest2123456789012analyzer/MyAnalyzer id 67110f3e05a14562b6c24b009e67c38e
然后我获取推荐。在这个示例中,我滤除了输出,只显示步骤,因为整个 JSON 输出非常丰富:
bash aws accessanalyzer getfindingrecommendation analyzerarn arnawsaccessanalyzerbetauswest2123456789012analyzer/MyAnalyzer id 67110f3e05a14562b6c24b009e67c38e output json jq recommendedSteps[]unusedPermissionsRecommendedSteprecommendedActionCREATEPOLICYDETACHPOLICY
您可以使用这些命令或等效的 API 调用将推荐集成到您自己的工具和系统中。
新的检查和解决步骤现在已在所有公共 AWS 区域上线,您可以立即开始使用!
Jeff
Jeff Barr 是 AWS 的首席布道者。他自2004年开始写这个博客,并几乎不间断地发布文章。