

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

# `AWSSupport-TroubleshootS3PublicRead`
<a name="automation-awssupport-troubleshoots3publicread"></a>

 **描述** 

 `AWSSupport-TroubleshootS3PublicRead` 运行手册将诊断从您在 `S3BucketName` 参数中指定的公有 Amazon Simple Storage Service (Amazon S3) 存储桶读取对象时遇到的问题。还会分析 S3 存储桶中对象的设置子集。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootS3PublicRead) 

 **限制** 
+ 此自动化不会检查是否存在允许对对象进行公共访问的接入点。
+ 此自动化不会评估 S3 存储桶策略中的条件密钥。
+ 如果您使用的是 AWS Organizations，此自动化不会评估服务控制策略以确认是否允许访问 Amazon S3。

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ CloudWatchLogGroupName

  类型：字符串

  描述：（可选）您要向其中发送自动化输出的 Amazon CloudWatch 日志组。如果找不到与您指定的值匹配的日志组，此自动化将使用该参数值创建一个日志组。此自动化创建的日志组的保留期为 14 天。
+ CloudWatchLogStreamName

  类型：字符串

   描述：（可选）您要将自动化输出发送到的 CloudWatch 日志日志流。如果找不到与您指定的值匹配的日志流，此自动化将使用该参数值创建一个日志流。如果您未为该参数指定一个值，此自动化将使用 `ExecutionId` 作为日志流的名称。
+ HttpGet

  类型：布尔值

  有效值：true \$1 false

  默认：True

   描述：（可选）如果此参数设置为 `true`，此自动化将对您在 `S3BucketName` 中指定的对象发出部分 HTTP 请求。使用 Range HTTP 标头仅返回对象的第一个字节。
+ IgnoreBlockPublicAccess

  类型：布尔值

  有效值：true \$1 false

  默认值：false

   描述：（可选）如果此参数设置为 `true`，则此自动化将忽略您在 `S3BucketName` 参数中指定的 S3 存储桶的公共访问屏蔽设置。不建议更改该参数的默认值。
+ MaxObjects

  类型：整数

  有效值：1-25

  默认：5

   描述：（可选）您在 `S3BucketName` 参数中指定的 S3 存储桶中要分析的对象数量。
+ S3 BucketName

  类型：字符串

  描述：（必需）要排查问题的 S3 存储桶的名称。
+ S3 PrefixName

  类型：字符串

   描述：（可选）要在 S3 存储桶中分析的对象的密钥名称前缀。有关更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的[对象密钥](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#object-keys)。
+ StartAfter

  类型：字符串

  描述：（可选）您希望此自动化开始分析 S3 存储桶中对象的对象密钥名称。
+ ResourcePartition

  类型：字符串

   有效值：`aws` \$1`aws-us-gov` \$1`aws-cn` 

   默认值：`aws`

  描述：（必需）您的 S3 存储桶所在的分区。
+ 详细

  类型：布尔值

  有效值：true \$1 false

  默认值：false

   描述：（可选）要在自动化期间返回更多详细信息，请将此参数设置为 `true`。如果将此参数设置为 `false`，则只会返回警告和错误消息。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。

 仅当您希望自动化将`logs:CreateLogGroup`日志数据发送到 Log CloudWatch s 时，才需要`logs:CreateLogStream`、和`logs:PutLogEvents`权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iam:SimulateCustomPolicy",
                "iam:GetContextKeysForCustomPolicy",
                "s3:ListAllMyBuckets",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:PutRetentionPolicy",
                "s3:GetAccountPublicAccessBlock"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketRequestPayment",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketPolicy",
                "s3:GetBucketAcl"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1",
            "Effect": "Allow"
        }
    ]
}
```

------

 **文档步骤** 
+  `aws:assertAwsResourceProperty` - 确认 S3 存储桶存在并且可以访问。
+  `aws:executeScript` - 返回 S3 存储桶位置和您的规范用户 ID。
+  `aws:executeScript` - 返回对您的账户和 S3 存储桶的公共访问屏蔽设置。
+  `aws:assertAwsResourceProperty` - 确认 S3 存储桶付款方被设置为 `BucketOwner`。如果在 S3 存储桶上启用 `Requester Pays`，此自动化将结束。
+  `aws:executeScript` - 返回 S3 存储桶策略状态并确定其是否被视为公开。有关公有 S3 存储桶的更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中[“公有”的含义](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html#access-control-block-public-access-policy-status)。
+  `aws:executeAwsApi` - 返回 S3 存储桶策略。
+  `aws:executeAwsApi` - 返回在 S3 存储桶策略中找到的所有上下文键。
+  `aws:assertAwsResourceProperty` - 确认 S3 存储桶策略中是否有对 `GetObject` API 操作的明确拒绝。
+  `aws:executeAwsApi` - 返回 S3 桶的访问控制列表 (ACL)。
+  `aws:executeScript`-如果您为`CloudWatchLogGroupName`参数指定值，则创建 CloudWatch 日志组和日志流。
+  `aws:executeScript` - 根据您在运行手册输入参数中指定的值，评估自动化期间收集的任何 S3 存储桶设置是否阻止对象被公众访问。此脚本执行以下功能：
  + 评估公共访问屏蔽设置
  +  根据您在 `MaxObjects`、`S3PrefixName` 和 `StartAfter` 参数中指定的值返回 S3 存储桶中的对象。
  + 返回 S3 存储桶策略，以模拟从 S3 存储桶返回的对象的自定义 IAM policy。
  +  如果 `HttpGet` 参数设置为 `true`，则对返回的对象执行部分 HTTP 请求。使用 Range HTTP 标头仅返回对象的第一个字节。
  + 检查返回的对象的键名以确认它是以一个还是两个句点结尾。无法从 Amazon S3 控制台下载以句点结尾的对象键名。
  + 检查返回的对象的所有者是否匹配 S3 存储桶的所有者。
  +  检查对象的 ACL 是否向匿名用户授予 `READ` 或 `FULL_CONTROL` 权限。
  + 返回与对象关联的标签。
  +  使用模拟的 IAM policy 确认 `GetObject` API 操作的 S3 存储桶策略中是否明确拒绝此对象。
  + 返回对象的元数据以确认是否支持该存储类别。
  + 检查对象的服务器端加密设置，以确认是否使用 AWS Key Management Service (AWS KMS) 客户管理的密钥对对象进行加密。

 **输出** 

AnalyzeObjects.buck

AnalyzeObjects.object