使用上次存取資訊的範例案例 - AWS Identity and Access Management

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

使用上次存取資訊的範例案例

您可以使用上次存取資訊,以決定您授予 IAM 實體或 AWS Organizations 實體的許可。如需詳細資訊,請參閱 使用上次存取的資訊精簡 AWS 的許可

注意

在檢視 IAM 或 AWS Organizations 中存取實體或政策資訊之前,請確定您了解報告期間、報告的實體,以及您資料的評估政策類型。如需詳細資訊,請參閱 關於上次存取資訊的注意事項

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

使用資訊減少 IAM 群組的許可

您可以使用上次存取資訊以減少 IAM 群組許可,使其僅包含您的使用者所需要的服務。此方法在服務等級的授予最低權限中是一個重要的步驟。

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

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

注意

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

{ "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 決定在他檢視上次存取資訊前等待 90 天,然後讓 Development 群組使用 AWS Management Console。他檢視群組成員曾經存取的服務清單。他發現使用者在上一週存取過五種服務:AWS CloudTrail、 Amazon CloudWatch Logs、Amazon EC2、AWS KMS 與 Amazon S3。他們在剛開始評估 AWS 時曾存取過其他幾個服務,但之後就不曾存取這些服務。

Paulo 決定減少政策許可,使其僅包含這五種服務和必要的 IAM 與 Organizations 動作。他使用以下 JSON 文字編輯 ExampleDevelopment 政策。

注意

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

{ "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 事件

使用資訊減少 IAM 使用者的許可

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

例如,IT 管理員 Martha Rivera 負責確保她公司的人員不會擁有過多的 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 主控台,依序選擇 Users (使用者)、名稱 nikhilj,然後選擇 Access Advisor (存取顧問) 標籤。

Martha 檢閱 Last Accessed (前次存取) 欄位,發現 Nikhil 最近沒有存取 IAM、CloudTrail、Route 53、Amazon Elastic Transcoder 和許多其他 AWS 服務。Nikhil 已經存取 Amazon S3。Martha 從服務清單中選擇 S3,並得知 Nikhil 在過去兩週內執行了一些 S3 List 動作。Martha 確認 Nikhil 在她的公司中不再需要存取 IAM 與 CloudTrail,因為他不再是內部安全團隊的成員。

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

Martha 選擇 Permissions (許可) 標籤,她檢視哪些政策直接連接至 nikhilj,以及從群組連接的政策。她展開每個政策並檢視政策摘要,以了解哪個政策允許 Nikhil 存取他沒有在使用的服務:

  • IAM –IAMFullAccess AWS 受管政策直接連接至 nikhilj 並連接至 security-team 群組。

  • CloudTrail – AWSCloudTrailReadOnlyAccess 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 資源前使用資訊

您可以在刪除 IAM 資源之前使用上次存取資訊,以確保在最後一次有人使用該資源之後已經過一段特定的時間。這適用於使用者、群組、角色及政策。若要進一步了解這些動作的詳細資訊,請參閱下列主題:

編輯 IAM 政策前使用資訊

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

例如,Arnav Desai 是 Example Corp. 的開發人員和 AWS 管理員。當他的團隊開始使用 AWS,他們為所有開發人員提供進階使用者存取權限,允許開發人員完整存取除了 IAM 和 Organizations 以外的所有服務。做為授予最低權限的第一步,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 欄位傳回 COMPLETEDFAILED 值。如果任務失敗,他將會擷取錯誤。

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 案例

有關 IAM 資源 (使用者、群組、角色或政策) 上次嘗試存取服務時間的資訊,可在您完成下列任一項任務時提供協助:

使用資訊來調整組織單位的許可

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

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

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

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

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