基于身份的策略示例AWS Config - AWS Config

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

基于身份的策略示例AWS Config

默认情况下,用户和角色没有创建或修改AWS Config资源的权限。要授予用户对所需资源执行操作的权限,IAM 管理员可以创建 IAM 策略。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略,请参阅《IAM 用户指南》中的创建 IAM 策略(控制台)

有关由AWS Config定义的操作和资源类型(包括每种资源类型的格式)的详细信息,请参阅《服务授权参考》AWS Config中的操作、资源和条件密钥。 ARNs

策略最佳实践

基于身份的策略决定了某人是否可以在您的账户中创建、访问或删除AWS Config资源。这些操作可能会使AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下指南和建议:

  • 开始使用AWS托管策略并转向最低权限权限 — 要开始向用户和工作负载授予权限,请使用为许多常见用例授予权限的AWS托管策略。它们在你的版本中可用AWS 账户。我们建议您通过定义针对您的用例的AWS客户托管策略来进一步减少权限。有关更多信息,请参阅《IAM 用户指南》中的 AWS托管策略工作职能的AWS托管策略

  • 应用最低权限:在使用 IAM 策略设置权限时,请仅授予执行任务所需的权限。为此,您可以定义在特定条件下可以对特定资源执行的操作,也称为最低权限许可。有关使用 IAM 应用权限的更多信息,请参阅《IAM 用户指南》中的 IAM 中的策略和权限

  • 使用 IAM 策略中的条件进一步限制访问权限:您可以向策略添加条件来限制对操作和资源的访问。例如,您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果服务操作是通过特定的方式使用的,则也可以使用条件来授予对服务操作的访问权限AWS 服务,例如CloudFormation。有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:条件

  • 使用 IAM Access Analyzer 验证您的 IAM 策略,以确保权限的安全性和功能性:IAM Access Analyzer 会验证新策略和现有策略,以确保策略符合 IAM 策略语言(JSON)和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议,以帮助您制定安全且功能性强的策略。有关更多信息,请参阅《IAM 用户指南》中的使用 IAM Access Analyzer 验证策略

  • 需要多重身份验证 (MFA)-如果AWS 账户您的场景需要 IAM 用户或根用户,请启用 MFA 以提高安全性。若要在调用 API 操作时需要 MFA,请将 MFA 条件添加到您的策略中。有关更多信息,请参阅《IAM 用户指南》中的使用 MFA 保护 API 访问

有关 IAM 中的最佳实操的更多信息,请参阅《IAM 用户指南》中的 IAM 中的安全最佳实践

注册获取AWS 账户

如果您没有AWS 账户,请完成以下步骤来创建一个。

要注册AWS 账户
  1. 打开https://portal.aws.amazon.com/billing/注册。

  2. 按照屏幕上的说明操作。

    在注册时,将接到电话或收到短信,要求使用电话键盘输入一个验证码。

    当您注册时AWS 账户,就会创建AWS 账户根用户一个。根用户有权访问该账户中的所有AWS 服务和资源。作为最佳安全实践,请为用户分配管理访问权限,并且只使用根用户来执行需要根用户访问权限的任务

AWS注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 https://aws.amazon.com/并选择 “我的账户”,查看您当前的账户活动并管理您的账户

创建具有管理访问权限的用户

注册后,请保护您的安全AWS 账户AWS 账户根用户AWS IAM Identity Center,启用并创建管理用户,这样您就不会使用 root 用户执行日常任务。

保护你的AWS 账户根用户
  1. 选择 Root 用户并输入您的AWS 账户电子邮件地址,以账户所有者的身份登录。AWS 管理控制台在下一页上,输入您的密码。

    要获取使用根用户登录方面的帮助,请参阅《AWS 登录用户指南》中的 Signing in as the root user

  2. 为您的根用户启用多重身份验证(MFA)。

    有关说明,请参阅 I A M 用户指南中的为AWS 账户根用户启用虚拟 MFA 设备(控制台)

创建具有管理访问权限的用户
  1. 启用 IAM Identity Center。

    有关说明,请参阅《AWS IAM Identity Center用户指南》中的 Enabling。AWS IAM Identity Center

  2. 在 IAM Identity Center 中,为用户授予管理访问权限。

    有关使用IAM Identity Center 目录作为身份源的教程,请参阅《用户指南》IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center用户访问权限

以具有管理访问权限的用户身份登录
将访问权限分配给其他用户
  1. 在 IAM Identity Center 中,创建一个权限集,该权限集遵循应用最低权限的最佳做法。

    有关说明,请参阅《AWS IAM Identity Center用户指南》中的 Create a permission set

  2. 将用户分配到一个组,然后为该组分配单点登录访问权限。

    有关说明,请参阅《AWS IAM Identity Center用户指南》中的 Add groups

使用AWS Config控制台

要访问AWS Config控制台,您必须拥有一组最低权限。这些权限必须允许您列出和查看有关您的AWS Config资源的详细信息AWS 账户。如果创建比必需的最低权限更为严格的基于身份的策略,对于附加了该策略的实体(用户或角色),控制台将无法按预期正常运行。

对于仅调用AWS CLI或AWS API 的用户,您无需为其设置最低控制台权限。相反,只允许访问与其尝试执行的 API 操作相匹配的操作。

为确保用户和角色仍然可以使用AWS Config控制台,还要将AWS ConfigAWSConfigUserAccessAWS托管策略附加到实体。有关更多信息,请参阅《IAM 用户指南》中的为用户添加权限

您必须向用户授予与之交互的权限AWS Config。对于需要完全访问托管权限的用户AWS Config,请使用对AWS Config托管的完全访问权限策略。

要提供访问权限,请为您的用户、组或角色添加权限:

允许用户查看他们自己的权限

该示例说明了您如何创建策略,以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上或使用AWS CLI或AWS API 以编程方式完成此操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

只读访问权限AWS Config

以下示例显示了一个AWS托管策略,AWSConfigUserAccess该策略授予对的只读访问权限AWS Config。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "config:Get*", "config:Describe*", "config:Deliver*", "config:List*", "config:Select*", "tag:GetResources", "tag:GetTagKeys", "cloudtrail:DescribeTrails", "cloudtrail:GetTrailStatus", "cloudtrail:LookupEvents" ], "Resource": "*" } ] }

在这些策略语句中,Effect 元素指定是允许还是拒绝操作。Action 元素列出了允许用户执行的特定操作。Resource元素列出了允许用户对其执行这些操作的AWS资源。对于控制AWS Config操作访问权限的策略,Resource元素始终设置为*,通配符表示 “所有资源”。

Action元素中的值对应 APIs 于服务支持的值。动作前面有表示它们指的是AWS Config动作。config:您可以在 * 元素中使用 Action 通配符,如以下示例所示:

  • "Action": ["config:*ConfigurationRecorder"]

    这允许所有以 “ConfigurationRecorder”(StartConfigurationRecorderStopConfigurationRecorder)结尾的AWS Config操作。

  • "Action": ["config:*"]

    这允许所有AWS Config操作,但不允许对其他AWS服务执行操作。

  • "Action": ["*"]

    这允许所有AWS操作。此权限适用于担任您账户AWS管理员的用户。

只读策略不对用户授予执行、StartConfigurationRecorderStopConfigurationRecorderDeleteConfigurationRecorder 操作的权限。不允许使用此策略的用户启动配置记录器、停止配置记录器或删除配置记录器。有关AWS Config操作列表,请参阅 AWS Config API 参考

完全访问权限AWS Config

以下示例显示了授予完全访问权限的策略AWS Config。它授予用户执行所有AWS Config操作的权限。它还允许用户管理 Amazon S3 存储桶中的文件,以及管理与用户关联的账户中的 Amazon SNS 主题。

重要

此策略授予广泛的权限。在授予完全访问权限之前,请考虑从最低权限集开始,并根据需要授予其他权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说是更好的做法。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:AddPermission", "sns:CreateTopic", "sns:DeleteTopic", "sns:GetTopicAttributes", "sns:ListPlatformApplications", "sns:ListTopics", "sns:SetTopicAttributes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetBucketAcl", "s3:GetBucketLocation", "s3:GetBucketNotification", "s3:GetBucketPolicy", "s3:GetBucketRequestPayment", "s3:GetBucketVersioning", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListBucketVersions", "s3:PutBucketPolicy" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:GetRole", "iam:GetRolePolicy", "iam:ListRolePolicies", "iam:ListRoles", "iam:PutRolePolicy", "iam:AttachRolePolicy", "iam:CreatePolicy", "iam:CreatePolicyVersion", "iam:DeletePolicyVersion", "iam:CreateServiceLinkedRole" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": [ "config.amazonaws.com", "ssm.amazonaws.com" ] } } }, { "Effect": "Allow", "Action": [ "cloudtrail:DescribeTrails", "cloudtrail:GetTrailStatus", "cloudtrail:LookupEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "config:*", "tag:Get*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:DescribeDocument", "ssm:GetDocument", "ssm:DescribeAutomationExecutions", "ssm:GetAutomationExecution", "ssm:ListDocuments", "ssm:StartAutomationExecution" ], "Resource": "*" } ] }

AWS Config规则 API 操作支持的资源级权限

资源级权限是指能够指定允许用户对哪些资源执行操作。AWS Config支持某些AWS Config规则 API 操作的资源级权限。这意味着,对于某些AWS Config规则操作,您可以控制何时允许用户使用这些操作的条件。这些条件可以是必须满足的操作,也可以是允许用户使用的特定资源。

下表描述了当前支持资源级权限的AWS Config规则 API 操作。它还描述了每个操作支持的资源及其 ARNs对应的资源。指定 ARN 时,可以在路径中使用* 通配符;例如,当您无法或不想指定确切的资源时。 IDs

重要

如果此表中未列出AWS Config规则 API 操作,则该操作不支持资源级权限。如果AWS Config规则操作不支持资源级权限,则可以向用户授予使用该操作的权限,但必须为策略语句的资源元素指定*。

API 操作 资源

DeleteConfigRule

Config 规则

arn: aws: config:: config-rule/config-rule region:accountID ID

DeleteEvaluationResults

Config 规则

arn: aws: config:: config-rule/config-rule region:accountID ID

DescribeComplianceByConfigRule

Config 规则

arn: aws: config:: config-rule/config-rule region:accountID ID

DescribeConfigRuleEvaluationStatus

Config 规则

arn: aws: config:: config-rule/config-rule region:accountID ID

GetComplianceDetailsByConfigRule

Config 规则

arn: aws: config:: config-rule/config-rule region:accountID ID

PutConfigRule

Config 规则

arn: aws: config:: config-rule/config-rule region:accountID ID

StartConfigRulesEvaluation

Config 规则

arn: aws: config:: config-rule/config-rule region:accountID ID

PutRemediationConfigurations

修复配置

arn: aws: config:: 修正配置/ region:accountId config rule name/remediation configuration id

DescribeRemediationConfigurations

修复配置

arn: aws: config:: 修正配置/ region:accountId config rule name/remediation configuration id

DeleteRemediationConfiguration

修复配置

arn: aws: config:: 修正配置/ region:accountId config rule name/remediation configuration id

PutRemediationExceptions

修复配置

arn: aws: config:: 修正配置/ region:accountId config rule name/remediation configuration id

DescribeRemediationExceptions

修复配置

arn: aws: config:: 修正配置/ region:accountId config rule name/remediation configuration id

DeleteRemediationExceptions

修复配置

arn: aws: config:: 修正配置/ region:accountId config rule name/remediation configuration id

例如,您希望允许特定用户对特定规则进行的读访问,但拒绝特定用户对特定规则进行的写访问。

在第一个策略中,您可以允许AWS Config规则读取操作,例如DescribeConfigRuleEvaluationStatus对指定规则的读取操作。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "config:StartConfigRulesEvaluation", "config:DescribeComplianceByConfigRule", "config:DescribeConfigRuleEvaluationStatus", "config:GetComplianceDetailsByConfigRule" ], "Resource": [ "arn:aws:config:us-east-1:123456789012:config-rule/config-rule-ID", "arn:aws:config:us-east-1:123456789012:config-rule/config-rule-ID" ] } ] }

在第二个策略中,您拒绝对特定AWS Config规则执行规则写入操作。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "config:PutConfigRule", "config:DeleteConfigRule", "config:DeleteEvaluationResults" ], "Resource": "arn:aws:config:us-east-1:123456789012:config-rule/config-rule-ID" } ] }

使用资源级权限,您可以允许读取权限和拒绝写入权限,以便对AWS Config规则 API 操作执行特定操作。

支持多账户多区域数据聚合的资源级别权限

您可以使用资源级权限控制用户对多账户多区域数据聚合执行特定操作的能力。以下AWS ConfigAggregator APIs 支持资源级别权限:

例如,您可以通过创建两个聚合器 AccessibleAggregator 和,InAccessibleAggregator并附加允许访问 AccessibleAggregator 但拒绝访问 InAccessibleAggregator 的 IAM 策略来限制特定用户对资源数据的访问。

适用于 IAM 的政策 AccessibleAggregator

在此策略中,您允许访问您指定的AWS Config Amazon 资源名称(ARN)支持的聚合器操作。在此示例中,AWS Config ARN 是。arn:aws:config:ap-northeast-1:AccountID:config-aggregator/config-aggregator-mocpsqhs

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ConfigAllow", "Effect": "Allow", "Action": [ "config:BatchGetAggregateResourceConfig", "config:DeleteConfigurationAggregator", "config:DescribeAggregateComplianceByConfigRules", "config:DescribeAggregateComplianceByConformancePacks", "config:DescribeConfigurationAggregatorSourcesStatus", "config:GetAggregateComplianceDetailsByConfigRule", "config:GetAggregateConfigRuleComplianceSummary", "config:GetAggregateConformancePackComplianceSummary", "config:GetAggregateDiscoveredResourceCounts", "config:GetAggregateResourceConfig", "config:ListAggregateDiscoveredResources", "config:PutConfigurationAggregator", "config:SelectAggregateResourceConfig" ], "Resource": "arn:aws:config:ap-northeast-1:111122223333:config-aggregator/config-aggregator-mocpsqhs" } ] }

适用于 IAM 的政策 InAccessibleAggregator

在此策略中,您允许访问您指定的AWS Config ARN 支持的聚合器操作。在此示例中,AWS Config ARN 是。arn:aws:config:ap-northeast-1:AccountID:config-aggregator/config-aggregator-pokxzldx

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ConfigDeny", "Effect": "Deny", "Action": [ "config:BatchGetAggregateResourceConfig", "config:DeleteConfigurationAggregator", "config:DescribeAggregateComplianceByConfigRules", "config:DescribeAggregateComplianceByConformancePacks", "config:DescribeConfigurationAggregatorSourcesStatus", "config:GetAggregateComplianceDetailsByConfigRule", "config:GetAggregateConfigRuleComplianceSummary", "config:GetAggregateConformancePackComplianceSummary", "config:GetAggregateDiscoveredResourceCounts", "config:GetAggregateResourceConfig", "config:ListAggregateDiscoveredResources", "config:PutConfigurationAggregator", "config:SelectAggregateResourceConfig" ], "Resource": "arn:aws:config:ap-northeast-1:111122223333:config-aggregator/config-aggregator-pokxzldx" } ] }

如果开发者组的用户尝试对您指定的AWS Config ARN 执行任何此类操作,该用户将收到拒绝访问异常。

检查用户访问权限

要显示您创建的聚合器,请运行以下AWS CLI命令:

aws configservice describe-configuration-aggregators

命令成功完成后,您将能够看到与您的账户关联的所有聚合器的详细信息。在此示例中,这些聚合器是 AccessibleAggregatorInAccessibleAggregator

{ "ConfigurationAggregators": [ { "ConfigurationAggregatorArn": "arn:aws:config:ap-northeast-1:AccountID:config-aggregator/config-aggregator-mocpsqhs", "CreationTime": 1517942461.442, "ConfigurationAggregatorName": "AccessibleAggregator", "AccountAggregationSources": [ { "AllAwsRegions": true, "AccountIds": [ "AccountID1", "AccountID2", "AccountID3" ] } ], "LastUpdatedTime": 1517942461.455 }, { "ConfigurationAggregatorArn": "arn:aws:config:ap-northeast-1:AccountID:config-aggregator/config-aggregator-pokxzldx", "CreationTime": 1517942461.442, "ConfigurationAggregatorName": "InAccessibleAggregator", "AccountAggregationSources": [ { "AllAwsRegions": true, "AccountIds": [ "AccountID1", "AccountID2", "AccountID3" ] } ], "LastUpdatedTime": 1517942461.455 } ] }
注意

account-aggregation-sources此,请输入要为其汇总AWS数据的帐户 IDs 的逗号分隔列表。将账户 IDs 用方括号括起来,并确保对引号进行转义(例如,"[{\"AccountIds\": [\"AccountID1\",\"AccountID2\",\"AccountID3\"],\"AllAwsRegions\": true}]")。

附加以下 IAM 策略以拒绝访问 InAccessibleAggregator 或您要拒绝访问的聚合器。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ConfigDeny", "Effect": "Deny", "Action": [ "config:BatchGetAggregateResourceConfig", "config:DeleteConfigurationAggregator", "config:DescribeAggregateComplianceByConfigRules", "config:DescribeAggregateComplianceByConformancePacks", "config:DescribeConfigurationAggregatorSourcesStatus", "config:GetAggregateComplianceDetailsByConfigRule", "config:GetAggregateConfigRuleComplianceSummary", "config:GetAggregateConformancePackComplianceSummary", "config:GetAggregateDiscoveredResourceCounts", "config:GetAggregateResourceConfig", "config:ListAggregateDiscoveredResources", "config:PutConfigurationAggregator", "config:SelectAggregateResourceConfig" ], "Resource": "arn:aws:config:ap-northeast-1:111122223333:config-aggregator/config-aggregator-pokxzldx" } ] }

接下来,您可以确认 IAM 策略是否适用于限制对特定聚合器规则的访问:

aws configservice get-aggregate-compliance-details-by-config-rule --configuration-aggregator-name InAccessibleAggregator --config-rule-name rule name --account-id AccountID --aws-region AwsRegion

此命令应返回拒绝访问异常:

An error occurred (AccessDeniedException) when calling the GetAggregateComplianceDetailsByConfigRule operation: User: arn:aws:iam::AccountID:user/ is not authorized to perform: config:GetAggregateComplianceDetailsByConfigRule on resource: arn:aws:config:AwsRegion-1:AccountID:config-aggregator/config-aggregator-pokxzldx