如何使用 Visual Studio Code 和 IAM 访问分析器实现 IAM 策略检查 安全博

在 Visual Studio Code 中使用 IAM Access Analyzer 实施 IAM 策略检查

重点要点

介绍如何在 Visual Studio Code 中集成 IAM Access Analyzer 自定义策略检查。使用这些检查来识别过于宽松的 IAM 策略,确保在开发早期调整访问控制。提高安全合规性,缩短开发时间,避免权限过度授予。

在之前的博文中,我们介绍了 IAM Access Analyzer 自定义策略检查功能,该功能可以让您根据自定义规则验证策略。现在,我们更进一步,将这些策略检查直接集成到您的开发环境中,通过使用 AWS Toolkit for Visual Studio Code (VS Code)。

本文展示了如何将 IAM Access Analyzer 自定义策略检查功能集成到 VS Code 中,以便在开发过程中识别过于宽松的 IAM 策略并调整访问控制。这种主动的安全合规做法有助于确保您的 IAM 策略在部署前得到验证,从而降低配置错误或授予意外访问的风险。它还通过在开发者编写不符合组织标准的策略时提供快速反馈,从而节省了开发者的时间。

现存问题

虽然安全团队监管组织的整体安全态势,但开发人员仍需创建需要特定权限的应用程序。为了让开发人员在保持高安全标准的同时高效工作,组织通常寻找安全授权开发人员编写 AWS 身份和访问管理 (IAM) 策略的方式。许多 AWS 客户在将开发人员编写的 IAM 策略部署到生产环境之前,会手动进行审核,以帮助防止 授予过多或意外权限。然而,根据策略的数量和复杂性,这些手动审查可能会消耗大量时间,导致开发延误和潜在的应用程序和服务部署瓶颈。组织需要在安全访问管理与快速应用开发和部署所需的敏捷性之间取得平衡。

如何在 VS Code 中使用 IAM Access Analyzer 自定义策略检查

自定义策略检查是 IAM Access Analyzer 的一项功能,旨在帮助安全团队主动识别和分析 IAM 策略中的关键权限。本节提供了在 VS Code 中直接使用自定义策略检查的逐步说明。

先决条件

要完成我们的演示示例,您首先需要进行以下操作:

安装 Python 36 或更高版本。假设您已经在使用 VS Code 集成开发环境 (IDE),搜索并安装 AWS Toolkit 扩展。配置您的 AWS 角色凭据,以 将工具包连接到 AWS。安装 AWS CloudFormation 的 IAM 策略验证器,可以在 GitHub 上找到。如果您在组织中使用 Terraform 作为基础设施即代码,也可以从 GitHub 安装 Terraform 的 IAM 策略验证器。为了在 VS Code 编辑器中打开 IAM Access Analyzer 策略检查,请按 CtrlShiftP 打开 VS Code 命令面板,搜索 IAM Policy Checks,然后选择 AWS Open IAM Policy Checks,如图 1 所示。

使用 VS Code 中的 IAM 策略检查选项,您可以执行四种类型的检查:

ValidatePolicyCheckNoPublicAccessCheckAccessNotGrantedCheckNoNewAccess

接下来将逐一介绍这些检查的示例。

示例 1 ValidatePolicy

在此示例中,我们使用 IAM 策略检查插件提供的 ValidatePolicy 选项来验证 IAM 策略是否符合 IAM 策略语法 和 AWS 最佳实践。运行此检查时,您可以查看策略验证检查结果,包括安全警告、错误、一般警告和策略建议。这些可操作的建议帮助您编写符合 AWS 最佳实践的策略。

运行 ValidatePolicy 检查的步骤

为了说明,我们可以使用以下 IAM 策略。您可以看到在第一条语句中使用了资源 通配符,表示允许 iamPassRole 操作适用于所有资源。

json{ Version 20121017 Statement [ { Effect Allow Action iamPassRole Resource } { Effect Allow Action [s3GetObject s3PutObject] Resource arnawss3amzns3demobucket/ } ]}

在 VS Code 编辑器中,导航至 IAM Policy Checks 窗格。选择文档类型 JSON Policy Language 和策略类型 Identity。然后选择 Run Policy Validation。

可以看到,Access Analyzer 检测到一个问题,显示在 PROBLEMS 窗格中。

如图 3 所示的安全警告指出,资源中的 iamPassRole 操作使用了通配符,可能过于宽松,因为它允许在该账户中传递任何 IAM 角色。

如何使用 Visual Studio Code 和 IAM 访问分析器实现 IAM 策略检查 安全博

现在,通过用特定角色的 Amazon 资源名称 (ARN) 替换通配符,来修改 IAM 策略。

json{ Version 20121017 Statement [ { Effect Allow Action iamPassRole Resource arnawsiam111122223333role/samplerole } { Effect Allow Action [s3GetObject s3PutObject] Resource arnawss3amzns3demobucket/ } ]}

再次运行 ValidatePolicy 检查,以确保更新 IAM 策略后不再产生任何发现结果。

示例 2 CheckNoPublicAccess

使用 CheckNoPublicAccess 选项,您可以验证您的资源策略是否为 受支持的资源类型 授予公共访问权限。

运行 CheckNoPublicAccess 检查的步骤

为了测试策略不允许公共访问,可以使用 CloudFormation 模板创建一个新桶,并附加资源策略,允许任何主体查看该桶中的对象。

警告: 此示例桶策略不应在生产环境中使用。 在桶策略的主体元素中使用通配符将允许任何 IAM 主体查看桶的内容。

yamlResources  MyBucket    Type AWSS3Bucket    Properties      BucketName amzns3demobucket  MyBucketPolicy    Type AWSS3BucketPolicy    Properties      Bucket        Ref MyBucket      PolicyDocument        Version 20121017        Statement           Effect Allow            Principal             Action s3GetObject            Resource              FnJoin                                   arnawss3                   Ref MyBucket                   /
选择文档类型 CloudFormation template,然后选择 Run Custom Policy Check,以查看此资源策略是否通过了 CheckNoPublicAccess 检查。

加速器免费版永久版下载

政策检查返回失败结果,因为该桶确实允许公共访问。

接下来,修复此策略,使其仅允许来自同一账户的角色访问,通过将策略限制为特定角色 ARN。

yamlResources MyBucket Type AWSS3Bucket Properties BucketName amzns3demobucket

MyBucketPolicy Type AWSS3BucketPolicy Properties Bucket Ref MyBucket PolicyDocument Version 20121017 Statement Effect Allow Principal AWS arnawsiam111122223333role/samplerole Action s3GetObject Resource FnJoin arnawss3 Ref MyBucket /

重新运行 CheckNoPublicAccess 检查。资源策略不再授予公共访问,检查结果为 PASS。

示例 3 CheckAccessNotGranted

CheckAccessNotGranted 选项允许您检查策略是否允许对一组 IAM 操作和资源 ARN 的访问。您可以使用此检查快速反馈某些权限或对特定资源的访问没有被允许。

运行 CheckAccessNotGranted 检查的步骤

确定敏感操作和资源。

在 VS Code 编辑器中,在 Custom Policy Checks 选项下,选择检查类型 CheckAccessNotGranted。使用逗号分隔的列表,创建一个您不希望在 IAM 策略中允许的操作和资源 ARN 列表。您还可以使用如下所示的语法创建 JSON 文件,列举您的操作和资源。在本示例中,将 s3PutBucketPolicy 和 dynamodbDeleteTable IAM 操作设置为 不允许。

创建一个包含附加到 IAM 角色的 IAM 策略的示例 CloudFormation 模板,如下所示。该策略授予对您在图 7 中标记为敏感的某些操作的访问权。

yamlResources CreateTagsLambdaRole Type AWSIAMRole Properties AssumeRolePolicyDocument Version 20121017 Statement Effect Allow Principal Service lambdaamazonawscom Action stsAssumeRole Policies PolicyName myapplicationaccess PolicyDocument Version 20121017 Statement Effect Allow Action ec2DescribeInstances Resource Effect Allow Action s3GetObject s3PutBucketPolicy dynamodbDeleteTable Resource RoleName samplerole

在 VS Code 编辑器中,选择 Run Custom Policy Check,以确定 IAM 策略中是否允许某个敏感操作或资源。该策略检查返回 FAIL,因为策略包含 s3PutBucketPolicy 和 dynamodbDeleteTable 操作,您已标记为不希望开发人员授予权限的操作。从策略中删除受限操作,然后再次运行检查以查看策略检查是否返回 PASS 结果。

示例 4 CheckNoNewAccess

CheckNoNewAccess 选项是一个自定义策略检查,用于验证您的策略是否与参考策略相比授予新访问权限。

您使用参考策略来检查候选策略是否允许的访问超出参考策略。换句话说,如果候选策略是参考策略的子集,则检查通过。参考策略通常一开始就允许所有访问,随后添加一个或多个语句来拒绝所要检查的访问。有关参考策略的更多详细信息和示例,请参见 iamaccessanalyzercustompolicychecksamples 存储库。

使用参考策略的能力使您能够在 IAM 策略中查找几乎任何内容。这在您有组织特定要求时尤为有用,因为这些要求可能无法通过其他一些自定义策略检查来满足。

运行 CheckNoNewAccess 检查的步骤

创建参考策略:在您的项目中创建一个新的 JSON 策略文档,以作为您的参考策略。

以下参考策略检查 IAM 角色信任策略仅允许访问允许列表中的 AWS 服务。这样可以允许开发人员创建角色,但将使用这些角色的权限限制在指定的 AWS 服务集合内。

在此参考策略中,仅允许指定的 AWS 服务主体 ec2amazonawscom、lambdaamazonawscom 和 ecstasksamazonawscom 假定该角色。

json{  Version 20121017  Statement [    {      Sid AllowThisSetOfServicePrincipals      Effect Allow      Principal {        Service [          ec2amazonawscom          lambdaamazonawscom          ecstasksamazonawscom        ]      }      Action stsAssumeRole    }    {      Sid AllowOtherSTSActions      Effect Allow      Principal       NotAction stsAssumeRole    }  ]}
在 VS Code 编辑器中输入参考策略。在 IAM Policy Checks 窗格中,选择检查类型 CheckNoNewAccess。然后将参考策略类型设置为 Resource,因为这是定义哪些主体可以假定角色的信任策略。此外,提供您在步骤 1 中创建的参考策略的路径。您还可以直接按 JSON 策略文档输入参考策略,如图 8 所示。

创建如下所示的 CloudFormation 模板。此模板创建一个 IAM 角色,允许 AWS 服务主体 lambdaamazonawscom 和 glueamazonawscom 假定 sampleapplicationrole IAM 角色。

yamlResources SampleApplicationRole Type AWSIAMRole Properties AssumeRolePolicyDocument Version 20121017 Statement Effect Allow Principal Service lambdaamazonawscom glueamazonawscom Action stsAssumeRole Policies PolicyName myapplicationaccess PolicyDocument Version 20121017 Statement Effect Allow Action s3GetObject Resource arnawss3111122223333amzns3demobucket/ RoleName sampleapplicationrole

在 VS Code 编辑器中,选择 Run Custom Policy Check