亚马逊AWS官方博客

IAM Access Analyzer 更新:扩展自定义策略检查和引导式撤销

我们将使 IAM Access Analyzer 变得更加强大,扩展自定义策略检查范围,并添加易于访问的指导来帮助您优化 IAM 策略。这两个新功能都建立在 re:Invent 2023 上推出的自定义策略检查和未使用访问分析的基础上。我们推出的成果如下:

新的自定义策略检查:新的检查利用自动推理的能力,帮助您检测向特定关键 AWS 资源授予访问权限或授予任何类型公共访问权限的策略。这两项检查专门用于部署之前,可能作为 CI/CD 管道的一部分,它们将帮助您主动检测不符合组织安全实践和策略的更新。

引导式撤销:IAM Access Analyzer 现在为您提供指导信息,您可以与开发人员共享这些指导信息,以便他们可以在某些权限授予了实际上不需要的访问权限时,撤销这些权限。这包括未使用的角色、具有未使用权限的角色、IAM 用户未使用的访问密钥,以及 IAM 用户未使用的密码。该指导信息包括移除多余项或用限制更高的项替换这些项所需的步骤。

新的自定义策略检查
新的策略检查可以从命令行调用,也可以通过调用 API 函数来调用。这些检查将检查作为请求的一部分提供的策略文档,并返回 PASSFAIL 值。在这两种情况下,PASS 表示策略文档正确地禁止了给定访问权限,FAIL 表示策略可能允许部分或全部权限。新的检查如下所示:

检查无公共访问权限:此检查对资源策略执行,它检查策略是否为指定资源类型授予了公共访问权限。例如,您可以通过指定 AWS::S3::Bucket 资源类型来检查策略是否允许对 S3 存储桶的公共访问。有效的资源类型包括 DynamoDB 表和流、EFS 文件系统、OpenSearch 域、Kinesis 流和流使用者、KMS 密钥、Lambda 函数、S3 存储桶和接入点、S3 Express 目录存储桶、S3 Outposts 存储桶和接入点、Glacier、Secrets Manager 密钥、SNS 主题和队列以及担任角色的 IAM 策略文档。有效资源类型的列表将随着时间的推移不断增大,可以在 CheckNoPublicAccess 文档中找到该列表,

假设我有一条策略意外地向 Amazon Simple Queue Service(Amazon SQS)队列授予了公共访问权限。下面是我的检查方法:

$ aws accessanalyzer check-no-public-access --policy-document file://resource.json \
  --resource-type AWS::SQS::Queue --output json

结果如下:

{
    "result": "FAIL",
    "message": "The resource policy grants public access for the given resource type.",
    "reasons": [
        {
            "description": "Public access granted in the following statement with sid: SqsResourcePolicy.",
            "statementIndex": 0,
            "statementId": "SqsResourcePolicy"
        }
    ]
}

我编辑策略以删除访问权限授予并重试操作,这次检查通过了:

{
    "result": "PASS",
    "message": "The resource policy does not grant public access for the given resource type."
}

检查访问权限未授予:此检查对资源策略或身份策略执行,一次检查一个策略。它还接受操作和资源的列表,均以可接受的形式提供,作为 IAM 策略的一部分。该检查可查看策略是否通过列出的操作对列表中的任何资源授予了意料之外的访问权限。例如,此检查可用于确保策略不允许删除关键 CloudTrail 跟踪:

$ aws accessanalyzer check-access-not-granted --policy-document file://ct.json \
  --access resources="arn:aws:cloudtrail:us-east-1:123456789012:trail/MySensitiveTrail" \
  --policy-type IDENTITY_POLICY --output json

IAM Access Analyzer 指示检查失败:

{
    "result": "FAIL",
    "message": "The policy document grants access to perform one or more of the listed actions or resources.",
    "reasons": [
        {
            "description": "One or more of the listed actions or resources in the statement with index: 0.",
            "statementIndex": 0
        }
    ]
}

我修复了策略并重试,这次检查通过了,这表明该策略未授予所列资源的访问权限:

{
    "result": "PASS",
    "message": "The policy document does not grant access to perform the listed actions or resources."
}

引导式撤销
在我之前的文章中,我向您展示了 IAM Access Analyzer 如何发现并列出授予实际不需要的访问权限的 IAM 项。在今天的发布中,您可以获得指导以帮助您(或您的开发团队)解决这些调查发现。下面是我的 AWS 账户的最新调查发现:

其中一些内容是我提前体验某项服务时留下的,提前体验是为了获取一些素材,然后写博客来介绍;另一些内容则是我在做云管理员期间,因为能力不够而得到的经验! 不管怎样,我需要把它们全部解决。让我们开始第二步,未使用的访问密钥。我点击该项,可以在底部看到新的推荐部分:

我可以按照步骤删除访问密钥,也可以单击归档将调查发现从有效调查发现列表中移除,并将其添加到已归档结果列表中。我也可以创建归档规则,通过该规则可在将来对类似的调查发现执行同样的操作。对于未使用的 IAM 用户、IAM 角色和密码,也提供了类似的建议。

现在让我们来看看未使用权限的调查发现:

建议用新策略取代现有政策。我可以将新策略与现有策略并排放置以进行预览:

就像第一个例子一样,我可以按照步骤进行操作,也可以归档调查发现。

也可以从命令行获取调查发现和推荐。我通过指定分析器生成了推荐,并从该推荐生成了调查发现:

$ aws accessanalyzer generate-finding-recommendation \
  --analyzer-arn arn:aws:access-analyzer-beta:us-west-2:123456789012:analyzer/MyAnalyzer \
  --id 67110f3e-05a1-4562-b6c2-4b009e67c38e

然后我检索了推荐。在此示例中,我对输出进行了筛选以仅显示步骤,因为整个 JSON 输出的内容相当丰富:

$ aws accessanalyzer get-finding-recommendation \
  --analyzer-arn arn:aws:access-analyzer-beta:us-west-2:123456789012:analyzer/MyAnalyzer \
  --id 67110f3e-05a1-4562-b6c2-4b009e67c38e --output json | \
  jq .recommendedSteps[].unusedPermissionsRecommendedStep.recommendedAction
"CREATE_POLICY"
"DETACH_POLICY"

您可以使用这些命令(或等效的 API 调用)将推荐集成到自己的工具和系统中。

现已推出
新的检查和解决步骤现已推出,您已经可以在所有公共 AWS 区域中使用它们了!

Jeff