

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

# 使用上次存取資訊的範例案例
<a name="access_policies_last-accessed-example-scenarios"></a>

您可以使用上次存取的資訊，對您授予 IAM 實體的許可做出決策 AWS Organizations 。如需詳細資訊，請參閱[AWS 使用上次存取的資訊在 中精簡許可](access_policies_last-accessed.md)。

**注意**  
在 IAM 或 中檢視實體或政策的存取資訊之前 AWS Organizations，請確定您了解資料的報告期間、報告的實體和評估的政策類型。如需詳細資訊，請參閱 [關於上次存取資訊的注意事項](access_policies_last-accessed.md#access_policies_last-accessed-know)。

身為管理員的您，可以在可存取性與最低權限取得平衡，以符合您公司的需求。

## 使用資訊減少 IAM 群組的許可
<a name="last-accessed-sample-reduce-permissions-group"></a>

您可以使用上次存取資訊以減少 IAM 群組許可，使其僅包含您的使用者所需要的服務。此方法在服務等級的[授予最低權限](best-practices.md#grant-least-privilege)中是一個重要的步驟。

例如，Paulo Santos 是負責定義 Example Corp AWS 使用者許可的管理員。 此公司剛開始使用 AWS，軟體開發團隊尚未定義他們將使用 AWS 的服務。Paulo 打算僅提供該團隊所需服務的存取許可，但由於尚未定義相關服務，因此 Paulo 暫時提供該團隊進階使用者許可。然後，他會使用上次存取的資訊來減少群組的許可。

Paulo 使用以下 JSON 文字建立一個名為 `ExampleDevelopment` 的受管政策。然後，他將其連接至名為 `Development` 的群組，並將所有開發人員新增至該群組。

**注意**  
Paulo 的進階使用者可能需要 `iam:CreateServiceLinkedRole` 許可才能使用某些服務和功能。他了解新增此許可會允許使用者建立任何服務連結的角色。他接受其進階使用者的這種風險。

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

****  

```
{

    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "FullAccessToAllServicesExceptPeopleManagement",
            "Effect": "Allow",
            "NotAction": [
                "iam:*",
                "organizations:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "RequiredIamAndOrgsActions",
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:ListRoles",
                "organizations:DescribeOrganization"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Paulo 決定在他[檢視上次存取資訊](access_policies_last-accessed-view-data.md#access_policies_last-accessed-viewing)前等待 90 天，然後讓 `Development` 群組使用 AWS 管理主控台。他檢視群組成員曾經存取的服務清單。他得知使用者在過去一週內存取了五個服務： AWS CloudTrail Amazon CloudWatch Logs AWS KMS、Amazon EC2 和 Amazon S3。他們在第一次評估時存取了其他一些服務 AWS，但之後卻無法存取。

Paulo 決定減少政策許可，只包含這五個服務以及必要的 IAM 和 AWS Organizations 動作。他使用以下 JSON 文字編輯 `ExampleDevelopment` 政策。

**注意**  
Paulo 的進階使用者可能需要 `iam:CreateServiceLinkedRole` 許可才能使用某些服務和功能。他了解新增此許可會允許使用者建立任何服務連結的角色。他接受其進階使用者的這種風險。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "FullAccessToListedServices",
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "kms:*",
                "cloudtrail:*",
                "logs:*",
                "ec2:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "RequiredIamAndOrgsActions",
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:ListRoles",
                "organizations:DescribeOrganization"
            ],
            "Resource": "*"
        }
    ]
}
```

------

若要進一步減少許可，Paulo 可在 AWS CloudTrail **Event history (事件歷程記錄)** 中檢視帳戶的事件。他可在此檢視詳細的事件資訊，以用於減少政策的許可，使其僅包含開發人員需要的動作和資源。如需詳細資訊，請參閱《AWS CloudTrail 使用者指南》**中的[在 CloudTrail 主控台中檢視 CloudTrail 事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events-console.html)。

## 使用資訊減少 IAM 使用者的許可
<a name="access_policies_last-accessed-reduce-permissions-users"></a>

您可以使用上次存取資訊，以減少個別 IAM 使用者的許可。

例如，Martha Rivera 是 IT 管理員，負責確保其公司中的人員沒有多餘的 AWS 許可。在定期安全性檢查中，她會檢查所有 IAM 使用者的許可。在這些使用者中，有一位名為 Nikhil Jayashankar 的應用程式開發人員，過去曾經擔任安全工程師。因為任務需求的變更，Nikhil 同時是 `app-dev` 群組和 `security-team` 群組的成員。`app-dev` 群組為其新任務授予多項服務的許可，包括 Amazon EC2、Amazon EBS、Auto Scaling、Amazon S3、Route 53 和 Elastic Transcoder。他的舊任務的 `security-team` 群組授予 IAM 與 CloudTrail 的許可。

作為管理員，Martha 登入 IAM 主控台，依序選擇**使用者**、名稱 `nikhilj`，然後選擇**上次存取**索引標籤。

Martha 會檢閱**上次存取的資料**欄，並注意到 Nikhil 最近未存取 IAM、CloudTrail、Route 53、Amazon Elastic Transcoder 和許多 AWS 其他服務。Nikhil 已經存取 Amazon S3。Martha 從服務清單中選擇 **S3**，並得知 Nikhil 在過去兩週內執行了一些 Amazon S3 `List` 動作。Martha 確認 Nikhil 在她的公司中不再需要存取 IAM 與 CloudTrail，因為他不再是內部安全團隊的成員。

Martha 現在已經準備好對服務採取行動，並採取行動上次存取的資訊。不過，不同於先前範例中的群組，像是 `nikhilj` 這樣的 IAM 使用者可能會受到多個政策的約束，並且可能是多個群組的成員。Martha 必須小心處理以避免不慎中斷 `nikhilj` 或其他群組成員的存取。除了了解 Nikhil 應有哪些存取，她也必須判斷 Nikhil 應*如何*接收這些許可。

Martha 選擇 **Permissions (許可)** 標籤，她檢視哪些政策直接連接至 `nikhilj`，以及從群組連接的政策。她展開每個政策並檢視政策摘要，以了解哪個政策允許 Nikhil 存取他沒有在使用的服務：
+ IAM – `IAMFullAccess` AWS 受管政策會直接連接至 `nikhilj` 群組`security-team`。
+ CloudTrail – `AWS CloudTrailReadOnlyAccess` AWS 受管政策會連接到 `security-team`群組。
+ Route 53 – `App-Dev-Route53` 客戶受管政策連接至 `app-dev` 群組。
+ Elastic Transcoder – `App-Dev-ElasticTranscoder` 客戶受管政策連接至 `app-dev` 群組。

Martha 決定移除直接連接到 的`IAMFullAccess` AWS 受管政策`nikhilj`。她也移除 Nikhil 的 `security-team` 群組成員資格。這兩個動作移除了不必要的 IAM 與 CloudTrail 存取。

Nikhil 存取 Route 53 和 Elastic Transcoder 的許可是由 `app-dev` 群組所授予。雖然 Nikhil 沒有使用這些服務，但群組的其他成員可能會使用。Martha 會檢閱 `app-dev` 群組上次存取的資訊，並得知多位成員最近存取 Route 53 和 Amazon S3。但在去年沒有任何群組成員存取過 Elastic Transcoder。她從群組移除 `App-Dev-ElasticTranscoder` 客戶受管政策。

然後，Martha 檢閱了 `App-Dev-ElasticTranscoder` 客戶受管政策的上次存取資訊。她發現該政策未連接至任何其他 IAM 身分。她在公司內部進行調查以確定未來不需要此政策，然後將此政策刪除。

## 刪除 IAM 資源前使用資訊
<a name="last-accessed-sample-delete-resources"></a>

您可以在刪除 IAM 資源之前使用上次存取資訊，以確保在最後一次有人使用該資源之後已經過一段特定的時間。這適用於使用者、群組、角色及政策。若要進一步了解這些動作的詳細資訊，請參閱下列主題：
+ **IAM 使用者** – [移除或停用 IAM 使用者](id_users_remove.md)
+ **群組** – [刪除 IAM 群組](id_groups_manage_delete.md)
+ **角色** – [刪除角色或執行個體設定檔](id_roles_manage_delete.md)
+ **政策** – [刪除 IAM 政策 (這也會從身分中分開政策)](access_policies_manage-delete.md)

## 編輯 IAM 政策前使用資訊
<a name="last-accessed-sample-edit-policies"></a>

您可以在編輯會影響該資源的政策之前，檢閱上次存取資訊中的 IAM 身分 (使用者、群組或角色) 或 IAM 政策。這是重要的，因為您不會想要移除使用該政策者的存取權。

例如，Arnav Desai 是 Example Corp. 的開發人員和 AWS 管理員。 當他的團隊開始使用 時 AWS，他們會授予所有開發人員進階使用者存取權，讓他們能夠完整存取 IAM 和 以外的所有服務 AWS Organizations。做為[授予最低權限](best-practices.md#grant-least-privilege)的第一步，Arnav 希望使用 AWS CLI 檢閱其帳戶中的受管政策。

因此，Arnav 首先列出其帳戶中連接至身分的客戶受管許可政策，他使用下列命令：

```
aws iam list-policies --scope Local --only-attached --policy-usage-filter PermissionsPolicy
```

他從回應中擷取每個政策的 ARN。然後，Arnav 使用下列命令，為每個政策產生上次存取資訊的報告。

```
aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1
```

從回應中，他從 `JobId` 欄位擷取所產生報告的 ID。然後，Arnav 輪詢下列命令，直到 `JobStatus` 欄位傳回 `COMPLETED` 或 `FAILED` 值。如果任務失敗，他將會擷取錯誤。

```
aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9
```

當任務的狀態為 `COMPLETED` 時，Arnav 剖析 JSON 格式 `ServicesLastAccessed` 陣列的內容。

```
 "ServicesLastAccessed": [
        {
            "TotalAuthenticatedEntities": 1,
            "LastAuthenticated": 2018-11-01T21:24:33.222Z,
            "ServiceNamespace": "dynamodb",
            "LastAuthenticatedEntity": "arn:aws:iam::123456789012:user/IAMExampleUser",
            "ServiceName": "Amazon DynamoDB"
        },

        {
            "TotalAuthenticatedEntities": 0,
            "ServiceNamespace": "ec2",
            "ServiceName": "Amazon EC2"
        },

        {
            "TotalAuthenticatedEntities": 3,
            "LastAuthenticated": 2018-08-25T15:29:51.156Z,
            "ServiceNamespace": "s3",
            "LastAuthenticatedEntity": "arn:aws:iam::123456789012:role/IAMExampleRole",
            "ServiceName": "Amazon S3"
        }
    ]
```

Arnav 透過此資訊發現 `ExamplePolicy1` 政策允許存取三項服務、Amazon DynamoDB、Amazon S3 和 Amazon EC2。名為 `IAMExampleUser` 的 IAM 使用者與 11 月 1 日最後一次嘗試存取 DynamoDB，另有某人於 8 月 25 日使用了 `IAMExampleRole` 角色嘗試存取 Amazon S3。另有兩個實體在過去一年嘗試存取 Amazon S3。不過，過去一年無人嘗試存取 Amazon EC2。

這表示 Arnav 可以安全地從政策中移除 Amazon EC2 動作。Arnav 想要檢閱該政策目前的 JSON 文件。首先，他必須使用以下命令判斷政策的版本號碼。

```
aws iam list-policy-versions --policy-arn arn:aws:iam::123456789012:policy/ExamplePolicy1
```

Arnav 從回應中的 `Versions` 陣列收集到目前的預設版本號碼。然後，他使用該版本號碼 (`v2`) 以及以下命令請求 JSON 政策文件。

```
aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/ExamplePolicy1 --version-id v2
```

Arnav 將傳回的 JSON 政策文件存放於 `Document` 陣列的 `PolicyVersion` 欄位。在政策文件中，Arnav 搜尋 `ec2` 命名空間中的動作。如果政策中沒有來自其他命名空間的動作，他將會分開政策與受影響的身分 (使用者、群組和角色)。而後他會刪除政策。在這種情況下，政策並包含 Amazon DynamoDB 與 Amazon S3 服務。因此，Arnav 會從文件中移除 Amazon EC2 動作，並儲存變更。然後，他使用下列命令來更新使用新文件版本的政策，然後將該版本設定為預設的政策版本。

```
aws iam create-policy-version --policy-arn arn:aws:iam::123456789012:policy/ExamplePolicy1 --policy-document file://UpdatedPolicy.json --set-as-default
```

`ExamplePolicy1` 政策現在已更新，以移除不必要 Amazon EC2 服務的存取權。

## 其他 IAM 案例
<a name="last-accessed-scenarios-other"></a>

有關 IAM 資源 (使用者、群組、角色或政策) 上次嘗試存取服務時間的資訊，可在您完成下列任一項任務時提供協助：
+ **政策** – [編輯現有的客戶受管政策或內嵌政策以移除許可](access_policies_manage-edit.md)
+ **政策** – [將內嵌政策轉換為受管政策，然後刪除它](access_policies-convert-inline-to-managed.md)
+ **政策** – [將明確拒絕新增至現有的政策](reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay.md)
+ **政策** – [從身分 (使用者、群組或角色) 分開受管政策](access_policies_manage-attach-detach.md#detach-managed-policy-console)
+ **實體** – [設定許可界限以控制實體 (使用者或角色) 可擁有的最大許可](access_policies_manage-attach-detach.md)
+ **群組** – [從群組移除使用者](id_groups_manage_add-remove-users.md)

## 使用資訊來調整組織單位的許可
<a name="access_policies_last-accessed-reduce-permissions-orgs"></a>

您可以使用上次存取資訊，以強化 AWS Organizations中組織單位 (OU) 的許可。

例如，John Stiles 是 AWS Organizations 管理員。他負責確保公司中的人員 AWS 帳戶 沒有多餘的許可。在定期安全稽核中，他會檢查其組織的許可。他的 `Development` OU 包含帳戶，這類帳戶經常用於測試新的 AWS 服務。John 決定要定期檢查超過 180 天未存取的服務報告。然後，他的 OU 成員會移除存取那些服務的許可。

John 使用自己的管理帳戶憑證登入 IAM 主控台。在 IAM 主控台中，他找到 OU `Development` AWS Organizations 的資料。他檢閱**服務存取報告**表 AWS ，並看到兩個服務在超過他偏好的 180 天期間內未被存取。他記得新增許可，讓開發團隊存取 Amazon Lex 和 AWS Database Migration Service。John 聯絡開發團隊，並確認他們不再有測試這些服務的商業需求。

Martha 現在已經準備好對上次存取的資訊採取行動。他選擇 **Edit in AWS Organizations** (在 AWS Organizations中編輯)，而且收到提醒，表示已將 SCP 連接至多個實體。他選擇 **Continue (繼續)**。在 中 AWS Organizations，他會檢閱目標，以了解 SCP 連接到哪些 AWS Organizations 實體。所有實體都位於 `Development` OU 內。

John 決定拒絕存取 Amazon Lex 和 `NewServiceTest` SCP 中的 AWS Database Migration Service 動作。這個動作移除了不必要的服務存取。