

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

 **Description** 

 `AWSSupport-TroubleshootS3PublicRead` Runbook 會診斷從您在 `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 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 的使用者許可。
+ CloudWatchLogGroupName

  類型：字串

  描述：（選用） 您要傳送自動化輸出的 Amazon CloudWatch Logs 日誌群組。如果找不到符合您指定值的日誌群組，自動化將會使用此參數值建立日誌群組。此自動化所建立之日誌群組的保留期間為 14 天。
+ CloudWatchLogStreamName

  類型：字串

   描述：（選用） 您要傳送自動化輸出的 CloudWatch Logs 日誌串流。如果找不到符合您指定值的日誌串流，自動化將會使用此參數值建立日誌串流。如果您未指定此參數的值，自動化將使用 `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 儲存貯體中要分析的物件數量。
+ S3BucketName

  類型：字串

  描述：（必要） 要故障診斷的 S3 儲存貯體名稱。
+ S3PrefixName

  類型：字串

   描述：（選用） 您要在 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` 參數需要下列動作才能成功使用 Runbook。

 只有在您希望自動化將日誌資料傳送至 CloudWatch Logs 時，才需要 `logs:CreateLogGroup` `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` - 確認 `GetObject` API 動作的 S3 儲存貯體政策中是否有明確拒絕。
+  `aws:executeAwsApi` - 傳回 S3 儲存貯體的存取控制清單 (ACL)。
+  `aws:executeScript` - 如果您指定 `CloudWatchLogGroupName` 參數的值，則建立 CloudWatch Logs 日誌群組和日誌串流。
+  `aws:executeScript` - 根據您在 Runbook 輸入參數中指定的值， 會評估自動化期間收集的任何 S3 儲存貯體設定是否阻止公有存取物件。此指令碼會執行下列函數：
  + 評估公有存取區塊設定
  +  根據您在 、 `S3PrefixName` 和 `StartAfter` 參數中指定的值，從 S3 `MaxObjects` 儲存貯體傳回物件。
  + 傳回 S3 儲存貯體政策，以模擬從 S3 儲存貯體傳回之物件的自訂 IAM 政策。
  +  如果 `HttpGet` 參數設定為 ，則對傳回的物件執行部分 HTTP `true` 請求。使用 Range HTTP 標頭只會傳回物件的第一個位元組。
  + 檢查傳回物件的金鑰名稱，以確認其結尾是一或兩個句點。無法從 Amazon S3 主控台下載以句點結尾的物件金鑰名稱。
  + 檢查傳回物件的擁有者是否與 S3 儲存貯體的擁有者相符。
  +  檢查物件的 ACL 是否授予匿名使用者`READ`或`FULL_CONTROL`許可。
  + 傳回與物件相關聯的標籤。
  +  使用模擬的 IAM 政策來確認 `GetObject` API 動作的 S3 儲存貯體政策中是否明確拒絕此物件。
  + 傳回物件的中繼資料，以確認支援儲存體方案。
  + 檢查物件的伺服器端加密設定，以確認是否使用 a AWS Key Management Service (AWS KMS) 客戶受管金鑰來加密物件。

 **輸出** 

AnalyzeObjects.bucket

AnalyzeObjects.object