本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWSSupport-TroubleshootS3PublicRead
Description
AWSSupport-TroubleshootS3PublicRead
Runbook 診斷從您在 S3BucketName
參數中指定的公有 Amazon Simple Storage Service (Amazon S3) 儲存貯體讀取物件時發生問題。也會分析 S3 儲存貯體中物件的設定子集。
限制
-
此自動化不會檢查允許公開存取物件的存取點。
-
此自動化不會評估 S3 儲存貯體政策中的條件索引鍵。
-
如果您使用的是 AWS Organizations,則此自動化不會評估服務控制政策,以確認允許存取 Amazon S3。
文件類型
自動化
擁有者
Amazon
平台
Linux、macOS, Windows
參數
-
AutomationAssumeRole
類型:字串
說明:(選用) 允許 Systems Manager Automation 代表您執行動作ARN的 () 角色的 AWS Identity and Access Management Amazon Resource Name (IAM)。如果未指定角色,Systems Manager Automation 會使用啟動此 Runbook 的使用者許可。
-
CloudWatchLogGroupName
類型:字串
說明:(選用) 您要傳送自動化輸出的 Amazon CloudWatch Logs 日誌群組。如果找不到符合您指定值的日誌群組,自動化將會使用此參數值建立日誌群組。此自動化所建立之日誌群組的保留期間為 14 天。
-
CloudWatchLogStreamName
類型:字串
說明:(選用) 您要傳送自動化輸出的 CloudWatch Logs 日誌串流。如果找不到符合您指定值的日誌串流,自動化將會使用此參數值建立日誌串流。如果您未為此參數指定值,自動化將使用
ExecutionId
作為日誌串流的名稱。 -
HttpGet
類型:布林值
有效值:true | false
預設:true
描述:(選用) 如果此參數設定為
true
,自動化會對S3BucketName
指定的物件提出部分HTTP請求。只會使用範圍HTTP標頭傳回物件的第一個位元組。 -
IgnoreBlockPublicAccess
類型:布林值
有效值:true | false
預設:false
說明:(選用) 如果此參數設定為
true
,自動化會忽略您在S3BucketName
參數中指定的 S3 儲存貯體的公有存取區塊設定。不建議從預設值變更此參數。 -
MaxObjects
類型:整數
有效值:1-25
預設:5
描述:(選用) 您在
S3BucketName
參數中指定的 S3 儲存貯體中要分析的物件數量。 -
S3BucketName
類型:字串
描述:(必要) 要進行故障診斷的 S3 儲存貯體名稱。
-
S3PrefixName
類型:字串
說明:(選用) 您要在 S3 儲存貯體中分析的物件的金鑰名稱字首。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南 中的物件金鑰。
-
StartAfter
類型:字串
描述:(選用) 您希望自動化開始分析 S3 儲存貯體中物件的物件金鑰名稱。
-
ResourcePartition
類型:字串
有效值:
aws
|aws-us-gov
|aws-cn
預設:
aws
描述:(必要) S3 儲存貯體所在的分割區。
-
詳細資訊
類型:布林值
有效值:true | false
預設:false
說明:(選用) 若要在自動化期間傳回更多詳細資訊,請將此參數設定為
true
。如果參數設定為false
,則只會傳回警告和錯誤訊息。
必要IAM許可
AutomationAssumeRole
參數需要下列動作才能成功使用 Runbook。
只有在您希望自動化將日誌資料傳送至 CloudWatch 日誌時,才需要 logs:CreateLogGroup
logs:CreateLogStream
、 和 logs:PutLogEvents
許可。
{ "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 使用者指南 中的「公」意義。 -
aws:executeAwsApi
- 傳回 S3 儲存貯體政策。 -
aws:executeAwsApi
- 傳回 S3 儲存貯體政策中找到的所有內容索引鍵。 -
aws:assertAwsResourceProperty
- 確認GetObject
API動作的 S3 儲存貯體政策中是否有明確拒絕。 -
aws:executeAwsApi
- 傳回 S3 儲存貯體的存取控制清單 (ACL)。 -
aws:executeScript
- 如果您指定CloudWatchLogGroupName
參數的值,則建立 CloudWatch 日誌日誌群組和日誌串流。 -
aws:executeScript
- 根據您在 Runbook 輸入參數中指定的值, 會評估自動化期間收集的任何 S3 儲存貯體設定是否阻止大眾存取物件。此指令碼會執行下列函數:-
評估公有存取區塊設定
-
根據您在 、
S3PrefixName
和StartAfter
參數中指定的值,從 S3MaxObjects
儲存貯體傳回物件。 -
傳回 S3 儲存貯體政策,以模擬從 S3 儲存貯體傳回之物件的自訂IAM政策。
-
如果
HttpGet
參數設定為true
,則對傳回的物件執行部分HTTP請求。只會使用範圍HTTP標頭傳回物件的第一個位元組。 -
檢查傳回物件的金鑰名稱,以確認其結尾是一或兩個句點。無法從 Amazon S3 主控台下載以期間結尾的物件金鑰名稱。
-
檢查傳回物件的擁有者是否與 S3 儲存貯體的擁有者相符。
-
檢查物件是否ACL授予匿名使用者
READ
或FULL_CONTROL
許可。 -
傳回與物件相關聯的標籤。
-
使用模擬IAM政策來確認
GetObject
API動作的 S3 儲存貯體政策中是否有此物件的明確拒絕。 -
傳回物件的中繼資料,以確認支援儲存體類別。
-
檢查物件的伺服器端加密設定,以確認物件是否使用 AWS Key Management Service (AWS KMS) 客戶受管金鑰加密。
-
輸出
AnalyzeObjects.bucket
AnalyzeObjects.object