設定績效詳情的存取政策 - Amazon Aurora

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

設定績效詳情的存取政策

若要存取 Performance Insights,主體必須具有 AWS Identity and Access Management (IAM) 的適當許可。您可透過以下方式授予存取權:

  • AmazonRDSPerformanceInsightsReadOnly 受管政策附加至許可設定或角色,以存取 Performance Insights API 的僅供讀取操作。

  • AmazonRDSPerformanceInsightsFullAccess 受管政策附加至許可設定或角色,以存取 Performance Insights API 的所有操作。

  • 建立自訂 IAM 政策,並將其連接至許可集或角色。

如果您在開啟 Performance Insights 時指定了客戶管理金鑰,請確定您帳戶中的使用者擁有kms:Decryptkms:GenerateDataKey權限 AWS KMS key

將政AmazonRDSPerformanceInsightsReadOnly策附加到 IAM 主體

AmazonRDSPerformanceInsightsReadOnly這是一項 AWS 受管政策,可授予對 Amazon RDS Performance Insights API 所有唯讀操作的存取權。

若您將 AmazonRDSPerformanceInsightsReadOnly 連接至許可集或角色,收件人可使用績效詳情搭配其他主控台功能。

如需詳細資訊,請參閱 AWS 管理策略:亞馬遜 PerformanceInsightsReadOnly

將政AmazonRDSPerformanceInsightsFullAccess策附加到 IAM 主體

AmazonRDSPerformanceInsightsFullAccess這是一項 AWS 受管政策,可授予對 Amazon RDS Performance Insights API 所有操作的存取權。

若您將 AmazonRDSPerformanceInsightsFullAccess 連接至許可集或角色,收件人可使用績效詳情搭配其他主控台功能。

如需詳細資訊,請參閱 AWS 管理策略:亞馬遜 PerformanceInsightsFullAccess

建立績效詳情的自訂 IAM 政策

對於沒有或AmazonRDSPerformanceInsightsFullAccess政策的使用者,您可以透過建立AmazonRDSPerformanceInsightsReadOnly或修改使用者管理的 IAM 政策來授與 Performance Insights 的存取權。在將該政策連接至許可集或角色時,收件人可以使用績效詳情。

建立自訂政策
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

  2. 在導覽窗格中,選擇政策

  3. 選擇 Create policy (建立政策)。

  4. 在 [建立原則] 頁面上,選擇 [JSON] 選項。

  5. 複製並貼上「AWS 受管理策略參考指南」AmazonRDSPerformanceInsightsReadOnlyAmazonRDSPerformanceInsightsFullAccess政策中「JSON 政策文件」區段中提供的文字。

  6. 選擇 Review policy (檢閱政策)。

  7. 為政策提供名稱並選擇性輸入描述,然後選擇 Create policy (建立政策)

現在您可以將政策連接到許可集或角色。以下程序假設您已有基於此用途使用的使用者。

將政策連接至使用者
  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇 Users (使用者)。

  3. 從清單中選擇現有的使用者。

    重要

    若要使用績效詳情,除了自訂政策以外,請務必確認您還擁有存取 Amazon RDS 的權限。例如,AmazonRDSPerformanceInsightsReadOnly 預先定義政策提供對 Amazon RDS 的唯讀存取。如需更多詳細資訊,請參閱 使用政策管理存取權

  4. Summary (摘要) 頁面上,選擇 Add permissions (新增許可)。

  5. 選擇 Attach existing policies directly (直接連接現有政策)。對於搜尋,請輸入原則名稱的前幾個字元,如下圖所示。

    選擇一個政策
  6. 選擇您的政策,然後選擇 Next: Review (下一步:檢閱)

  7. 選擇 Add permissions (新增許可)。

設定績效詳情的 AWS KMS 政策

Performance Insights 使用 AWS KMS key 加密機密資料。當您透過 API 或主控台啟用績效詳情時,可以執行下列任一操作:

  • 選擇預設值 AWS 受管金鑰。

    Amazon RDS 會 AWS 受管金鑰 針對您的新資料庫執行個體使用。Amazon RDS 會為您的 AWS 帳戶建立 AWS 受管金鑰 。你 AWS 帳戶 有一個不同 AWS 受管金鑰 的 Amazon RDS 為每個 AWS 區域。

  • 選擇客戶受管金鑰。

    如果您指定客戶受管金鑰,則您帳戶中呼叫績效詳情 API 的使用者需要 KMS 金鑰的 kms:Decryptkms:GenerateDataKey 許可。您可以透過 IAM 政策設定這些許可。不過,我們建議您透過 KMS 金鑰政策來管理這些許可。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的在 AWS KMS中使用金鑰政策

下列範例說明如何將陳述式新增至 KMS 金鑰政策。這些陳述式允許存取績效詳情。視您使用 KMS 金鑰的方式而定,您可能想要變更某些限制。在將陳述式新增至您的政策之前,請先移除所有註解。

{ "Version" : "2012-10-17", "Id" : "your-policy", "Statement" : [ { //This represents a statement that currently exists in your policy. } ...., //Starting here, add new statement to your policy for Performance Insights. //We recommend that you add one new statement for every RDS instance { "Sid" : "Allow viewing RDS Performance Insights", "Effect": "Allow", "Principal": { "AWS": [ //One or more principals allowed to access Performance Insights "arn:aws:iam::444455556666:role/Role1" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition" : { "StringEquals" : { //Restrict access to only RDS APIs (including Performance Insights). //Replace region with your AWS Region. //For example, specify us-west-2. "kms:ViaService" : "rds.region.amazonaws.com" }, "ForAnyValue:StringEquals": { //Restrict access to only data encrypted by Performance Insights. "kms:EncryptionContext:aws:pi:service": "rds", "kms:EncryptionContext:service": "pi", //Restrict access to a specific RDS instance. //The value is a DbiResourceId. "kms:EncryptionContext:aws:rds:db-id": "db-AAAAABBBBBCCCCDDDDDEEEEE" } } }

Performance Insights 如何使用 AWS KMS 客戶管理的金鑰

Performance Insights 使用客戶壽館金鑰來加密敏感資料。當您開啟 Performance Insights 時,可以透過 API 提供 AWS KMS 金鑰。Performance Insights 會在此金鑰上建立 KMS 許可。它會使用金鑰並執行必要的操作來處理敏感資料。敏感資料包括使用者、資料庫、應用程式及 SQL 查詢文字等欄位。Performance Insights 可確保靜態資料和傳輸中資料保持加密狀態。

Performance Insights IAM 如何搭配使用 AWS KMS

IAM 會提供許可給特定 API。Performance Insights 具有下列公有 API,您可以使用 IAM 政策來限制這些 API:

  • DescribeDimensionKeys

  • GetDimensionKeyDetails

  • GetResourceMetadata

  • GetResourceMetrics

  • ListAvailableResourceDimensions

  • ListAvailableResourceMetrics

您可以使用下列 API 請求來取得敏感資料。

  • DescribeDimensionKeys

  • GetDimensionKeyDetails

  • GetResourceMetrics

當您使用 API 取得敏感資料時,Performance Insights 會利用呼叫者的憑證。此檢查可確保敏感資料的存取權限於可存取 KMS 金鑰的人。

呼叫這些 API 時,您需要許可才能透過 IAM 政策和許可呼叫 API,以透過 AWS KMS 金鑰政策叫用kms:decrypt動作。

GetResourceMetrics API 可能會同時傳回敏感和非敏感資料。請求參數會決定回應是否應包含敏感資料。當請求的 filter 或 group-by 參數中包含敏感維度時,API 會傳回敏感資料。

如需可搭配 GetResourceMetrics API 使用之維度的詳細資訊,請參閱〈〉DimensionGroup

範例

以下範例會請求 db.user 群組的敏感資料:

POST / HTTP/1.1 Host: <Hostname> Accept-Encoding: identity X-Amz-Target: PerformanceInsightsv20180227.GetResourceMetrics Content-Type: application/x-amz-json-1.1 User-Agent: <UserAgentString> X-Amz-Date: <Date> Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature> Content-Length: <PayloadSizeBytes> { "ServiceType": "RDS", "Identifier": "db-ABC1DEFGHIJKL2MNOPQRSTUV3W", "MetricQueries": [ { "Metric": "db.load.avg", "GroupBy": { "Group": "db.user", "Limit": 2 } } ], "StartTime": 1693872000, "EndTime": 1694044800, "PeriodInSeconds": 86400 }

以下範例會請求 db.load.avg 指標的非敏感資料:

POST / HTTP/1.1 Host: <Hostname> Accept-Encoding: identity X-Amz-Target: PerformanceInsightsv20180227.GetResourceMetrics Content-Type: application/x-amz-json-1.1 User-Agent: <UserAgentString> X-Amz-Date: <Date> Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature> Content-Length: <PayloadSizeBytes> { "ServiceType": "RDS", "Identifier": "db-ABC1DEFGHIJKL2MNOPQRSTUV3W", "MetricQueries": [ { "Metric": "db.load.avg" } ], "StartTime": 1693872000, "EndTime": 1694044800, "PeriodInSeconds": 86400 }

授予 Performance Insights 的細微存取權

精細的存取控制提供了控制 Performance Insights 存取的其他方式。此存取控制可允許或拒絕存取GetResourceMetricsDescribeDimensionKeys和「Perfor GetDimensionKeyDetails mance Insights」動作的個別維度。若要使用精細的存取權,請使用條件金鑰在 IAM 政策中指定維度。存取權的評估遵循 IAM 政策評估邏輯。如需詳細資訊,請參閱《IAM 使用者指南》中的政策評估邏輯。如果 IAM 政策陳述式未指定任何維度,則陳述式會控制指定動作所有維度的存取權。如需可用維度的清單,請參閱DimensionGroup

若要找出您的認證有權存取的維度,請使用中的AuthorizedActions參數ListAvailableResourceDimensions並指定動作。允許的值AuthorizedActions如下所示:

  • GetResourceMetrics

  • DescribeDimensionKeys

  • GetDimensionKeyDetails

例如,如果您指GetResourceMetricsAuthorizedActions參數,則會ListAvailableResourceDimensions傳回GetResourceMetrics動作授權存取的維度清單。如果您在AuthorizedActions參數中指定多個動作,則會ListAvailableResourceDimensions傳回授權存取這些動作的維度交集。

下列範例提供對於和DescribeDimensionKeys動作之指定維度GetResourceMetrics的存取權。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowToDiscoverDimensions", "Effect": "Allow", "Action": [ "pi:ListAvailableResourceDimensions" ], "Resource": [ "arn:aws:pi:us-east-1:123456789012:metrics/rds/db-ABC1DEFGHIJKL2MNOPQRSTUV3W" ] }, { "Sid": "SingleAllow", "Effect": "Allow", "Action": [ "pi:GetResourceMetrics", "pi:DescribeDimensionKeys" ], "Resource": [ "arn:aws:pi:us-east-1:123456789012:metrics/rds/db-ABC1DEFGHIJKL2MNOPQRSTUV3W" ], "Condition": { "ForAllValues:StringEquals": { // only these dimensions are allowed. Dimensions not included in // a policy with "Allow" effect will be denied "pi:Dimensions": [ "db.sql_tokenized.id", "db.sql_tokenized.statement" ] } } } ] }

以下是要求維度的回應:

// ListAvailableResourceDimensions API // Request { "ServiceType": "RDS", "Identifier": "db-ABC1DEFGHIJKL2MNOPQRSTUV3W", "Metrics": [ "db.load" ], "AuthorizedActions": ["DescribeDimensionKeys"] } // Response { "MetricDimensions": [ { "Metric": "db.load", "Groups": [ { "Group": "db.sql_tokenized", "Dimensions": [ { "Identifier": "db.sql_tokenized.id" }, // { "Identifier": "db.sql_tokenized.db_id" }, // not included because not allows in the IAM Policy { "Identifier": "db.sql_tokenized.statement" } ] } ] } ] }

下列範例會為維度指定一個允許和兩個拒絕存取權。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowToDiscoverDimensions", "Effect": "Allow", "Action": [ "pi:ListAvailableResourceDimensions" ], "Resource": [ "arn:aws:pi:us-east-1:123456789012:metrics/rds/db-ABC1DEFGHIJKL2MNOPQRSTUV3W" ] }, { "Sid": "O01AllowAllWithoutSpecifyingDimensions", "Effect": "Allow", "Action": [ "pi:GetResourceMetrics", "pi:DescribeDimensionKeys" ], "Resource": [ "arn:aws:pi:us-east-1:123456789012:metrics/rds/db-ABC1DEFGHIJKL2MNOPQRSTUV3W" ] }, { "Sid": "O01DenyAppDimensionForAll", "Effect": "Deny", "Action": [ "pi:GetResourceMetrics", "pi:DescribeDimensionKeys" ], "Resource": [ "arn:aws:pi:us-east-1:123456789012:metrics/rds/db-ABC1DEFGHIJKL2MNOPQRSTUV3W" ], "Condition": { "ForAnyValue:StringEquals": { "pi:Dimensions": [ "db.application.name" ] } } }, { "Sid": "O01DenySQLForGetResourceMetrics", "Effect": "Deny", "Action": [ "pi:GetResourceMetrics" ], "Resource": [ "arn:aws:pi:us-east-1:123456789012:metrics/rds/db-ABC1DEFGHIJKL2MNOPQRSTUV3W" ], "Condition": { "ForAnyValue:StringEquals": { "pi:Dimensions": [ "db.sql_tokenized.statement" ] } } } ] }

以下是要求維度的回應:

// ListAvailableResourceDimensions API // Request { "ServiceType": "RDS", "Identifier": "db-ABC1DEFGHIJKL2MNOPQRSTUV3W", "Metrics": [ "db.load" ], "AuthorizedActions": ["GetResourceMetrics"] } // Response { "MetricDimensions": [ { "Metric": "db.load", "Groups": [ { "Group": "db.application", "Dimensions": [ // removed from response because denied by the IAM Policy // { "Identifier": "db.application.name" } ] }, { "Group": "db.sql_tokenized", "Dimensions": [ { "Identifier": "db.sql_tokenized.id" }, { "Identifier": "db.sql_tokenized.db_id" }, // removed from response because denied by the IAM Policy // { "Identifier": "db.sql_tokenized.statement" } ] }, ... ] } ] }
// ListAvailableResourceDimensions API // Request { "ServiceType": "RDS", "Identifier": "db-ABC1DEFGHIJKL2MNOPQRSTUV3W", "Metrics": [ "db.load" ], "AuthorizedActions": ["DescribeDimensionKeys"] } // Response { "MetricDimensions": [ { "Metric": "db.load", "Groups": [ { "Group": "db.application", "Dimensions": [ // removed from response because denied by the IAM Policy // { "Identifier": "db.application.name" } ] }, { "Group": "db.sql_tokenized", "Dimensions": [ { "Identifier": "db.sql_tokenized.id" }, { "Identifier": "db.sql_tokenized.db_id" }, // allowed for DescribeDimensionKeys because our IAM Policy // denies it only for GetResourceMetrics { "Identifier": "db.sql_tokenized.statement" } ] }, ... ] } ] }