

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

# `AWSSupport-TroubleshootS3AccessSameAccount`
<a name="automation-aws-troubleshoots3accesssameaccount"></a>

 **Description** 

`AWSSupport-TroubleshootS3AccessSameAccount` Runbook 透過評估授予 Amazon S3 資源上請求者 AWS Identity and Access Management (IAM) 身分 （使用者或角色） 的存取層級，協助診斷 Amazon S3) 存取遭拒的儲存貯體或物件操作問題。Runbook 會評估與 Amazon S3 資源以及輸入參數中指定的 IAM 使用者或角色相關聯的所有相關存取政策、使用者政策和資源型政策 （儲存貯體政策、儲存貯體 ACL 和物件 ACL)。

**重要**  
如果請求者與 Amazon S3 儲存貯體或物件位於相同的 AWS 帳戶中，您只能使用此 Runbook 來評估存取遭拒的問題。  
請確定您的使用者或`AutomationAssumeRole`用來執行此 Runbook 的 具有取得/列出相關資源政策和儲存貯體/金鑰中繼資料組態的必要許可。  
如果資源政策中有`NotPrincipal`元素，則 Runbook 會在步驟 中擲出錯誤`PolicyModifier`。

 **如何運作？** 

Runbook 會執行下列評估：
+ 驗證 IAM 使用者或角色的存在，並解構 ARN 以識別其關鍵元件。
+ 檢查 Amazon S3 資源 （儲存貯體或物件） 是否存在，並傳回儲存貯體和金鑰名稱。
+ 驗證使用者/角色和儲存貯體/物件是否在同一 AWS 帳戶中。
+ 如適用，擷取儲存貯體和物件 ACL 組態。
+ 擷取連接至使用者或角色的 IAM 政策。
+ 如果儲存貯體政策存在，則擷取儲存貯體政策。
+ 如果適用， 會擷取加密物件的 AWS KMS 金鑰政策。
+ 如果適用， 會擷取 VPC 端點政策。
+ 如果提供，則擷取 AWS Organizations 服務控制政策 SCPs)。
+ 同時評估所有政策，以判斷指定動作的有效許可。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootS3AccessSameAccount) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

/

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ `ec2:DescribeVpcEndpoints` （如果指定 VPC 端點）
+ `iam:GetGroupPolicy`
+ `iam:GetPolicy`
+ `iam:GetPolicyVersion`
+ `iam:GetRole`
+ `iam:GetRolePolicy`
+ `iam:GetUser`
+ `iam:GetUserPolicy`
+ `iam:ListAttachedRolePolicies`
+ `iam:ListAttachedUserPolicies`
+ `iam:ListGroupsForUser`
+ `iam:ListRolePolicies`
+ `iam:ListUserPolicies`
+ `iam:SimulatePrincipalPolicy`
+ `kms:GetKeyPolicy` （如果使用 KMS 加密）
+ `s3:GetBucketAcl`
+ `s3:GetBucketLocation`
+ `s3:GetBucketPolicy`
+ `s3:GetObjectAcl`
+ `s3:GetObjectVersion`
+ `s3:ListBucket`

IAM 政策範例：

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeVpcEndpoints",
                "iam:GetGroupPolicy",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:GetUser",
                "iam:GetUserPolicy",
                "iam:ListAttachedRolePolicies",
                "iam:ListAttachedUserPolicies",
                "iam:ListGroupsForUser",
                "iam:ListRolePolicies",
                "iam:ListUserPolicies",
                "iam:SimulatePrincipalPolicy",
                "kms:GetKeyPolicy",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetBucketPolicy",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:ListBucket"
            ],
            "Resource": "*"
        }
    ]
}
```

 **指示** 

請依照下列步驟設定自動化：

1. 在文件下的 Systems Manager [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootS3AccessSameAccount/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootS3AccessSameAccount/description)中導覽至 。

1. 選擇 Execute automation (執行自動化)。

1. 針對輸入參數，輸入下列內容：
   + **AutomationAssumeRole （選用）：**

     IAM 角色的 Amazon Resource Name (ARN)，允許 Systems Manager Automation 代表您執行動作。如果未指定角色，Systems Manager Automation 會使用您的許可。
   + **S3ResourceArn （必要）：**

     Amazon S3 資源 （儲存貯體或金鑰） 的 ARN。對於 `PutObject`或 等物件操作`GetObject`，請提供物件的 ARN。範例： `arn:aws:s3:::bucket_name`或 `arn:aws:s3:::bucket_name/key_name`。
   + **S3Action （必要）：**

     您希望 Runbook 評估存取內容的 Amazon S3 動作。請務必為特定動作提供對應的 Amazon S3 資源類型 （儲存貯體或物件）。範例包括：`GetObject`、`PutObject`、`DeleteObject`、 `GetBucketAcl`等。
   + **RequesterArn （必要）：**

     您想要在特定 Amazon S3 資源上尋找存取層級的 IAM 主體 （使用者或角色） ARN。例如：`arn:aws:iam::123456789012:user/user_name` 或 `arn:aws:iam::123456789012:role/example-role`。
   + **RequesterRoleSessionName （選用）：**

     擔任角色的工作階段名稱，以防 IAM ARN 是角色且您想要提供特定的工作階段名稱。
   + **S3ObjectVersionId （選用）：**

     如果物件有多個版本，此參數可讓您指定要評估存取內容的物件特定版本。
   + **KmsKeyArn （選用）：**

     如果 AWS KMS 金鑰 ARN 與動作相關 （例如：`CompleteMultipartUpload`、`CopyObject``CreateMultipartUpload`、、 `PutObject`等）。注意：Runbook 不支援在不同 AWS 帳戶中指定 AWS KMS 金鑰。
   + **VpcEndpointId （選用）：**

     與存取評估相關的虛擬私有雲端 (VPC) 端點 ID。Amazon S3 儲存貯體政策可以控制特定 VPC 端點對儲存貯體的存取。
   + **ContextKeyList （選用）：**

     與政策評估相關的條件索引鍵清單和對應值。例如：`[{"ContextKeyName":"aws:PrincipalArn","ContextKeyValues":["arn:aws:iam::123456789012:root"],"ContextKeyType":"string"}]`。
   + **SCPPolicy （選用）：**

     如果您希望 Runbook 根據特定 SCP 政策評估輸入，則為 AWS Organizations Service Control Policy (SCP)。當您從組織的管理帳戶執行此 Runbook 時，不需要且會予以忽略。

1. 選取執行。

1. 自動化會啟動。

1. 文件會執行下列步驟：
   + **`IAMCheckTypeset`**:

     檢查 IAM 使用者或角色是否存在，並解構 ARN 以識別其關鍵元件。
   + **`ResourceTypeCheck`**:

     檢查 Amazon S3 資源 （儲存貯體或物件） 是否存在，並傳回儲存貯體和金鑰名稱。
   + **`UaBoOoAccountCheck`**:

     驗證使用者/角色和儲存貯體/物件是否在同一 AWS 帳戶中。
   + **`KeyDetailsChecker`**:

     如果資源是 物件，則擷取 Amazon S3 物件的詳細資訊。
   + **`ACLBucketCheck`**:

     擷取儲存貯體 ACL 組態。
   + **`ConditionSetter`**:

     設定政策評估的條件金鑰。
   + **`FetchIAMPolicy`**:

     擷取連接至使用者或角色的 IAM 政策。
   + **`branchOnACLCheck`**:

     判斷是否需要檢查物件 ACL。
   + **`FetchBucketPolicy`**:

     如果儲存貯體政策存在，則擷取儲存貯體政策。
   + **`branchOnKMSCheck`**:

     決定是否需要評估 AWS KMS 金鑰政策。
   + **`FetchKMSPolicy`**:

     如適用，擷取 AWS KMS 金鑰政策。
   + **`branchOnVPCeCheck`**:

     判斷是否需要評估 VPC 端點政策。
   + **`FetchVPCePolicy`**:

     如適用，擷取 VPC 端點政策。
   + **`FetchSCPPolicy`**:

     如果提供，則擷取 AWS Organizations SCP。
   + **`PolicyModifier`**:

     修改並準備要評估的所有政策。
   + **`EvaluatePolicy`**:

     同時評估所有政策，以判斷指定動作的有效許可。

1. 完成後，請檢閱輸出區段以取得執行的詳細結果。

**參考**

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootS3AccessSameAccount/description)
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定 自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)