本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
最低權限許可
由於您的KMS金鑰會保護敏感資訊,因此我們建議您遵循最低權限存取原則。當您定義金鑰政策時,委派執行任務所需的最低許可。只有在您計劃進一步限制其他政策的許可時,才允許KMS金鑰IAM政策上的所有動作 (kms:*
)。如果您計劃使用IAM政策管理許可,請限制誰能夠建立IAM政策並將其連接至IAM主體,並監控政策變更。
如果您同時允許金鑰政策和IAM政策中的所有動作 (kms:*
),則主體對KMS金鑰具有管理和使用許可。作為安全最佳實務,我們建議僅將這些許可委派給特定的委託人。您可以在金鑰政策中明確命名主體,或限制附加IAM政策的主體,藉此達成此目的。您也可以使用條件金鑰來限制許可。例如,如果API撥打電話的委託人有條件規則中指定的標籤,您可以使用 aws:PrincipalTag
來允許所有動作。
如需了解如何在 中評估政策陳述式的協助 AWS,請參閱 IAM 使用者指南 中的政策評估邏輯。我們建議您在撰寫政策之前檢閱此主題,以減少政策產生意外影響的機會,例如提供存取權給不應存取的主體。
提示
在非生產環境中測試應用程式時,請使用 IAM Access Analyzer
如果您使用IAM使用者而非IAM角色,強烈建議啟用 AWS 多重要素身分驗證 (MFA),以減輕長期憑證的漏洞。您可以使用 MFA執行下列動作:
-
要求使用者在執行權限動作MFA之前驗證其憑證,例如排程金鑰刪除。
-
在個人之間分割管理員帳戶密碼和MFA裝置的擁有權,以實作分割授權。
進一步了解
實作最低權限的許可
當您授予 AWS 服務使用KMS金鑰的許可時,請確定該許可僅適用於服務必須代表您存取的資源。此最低權限策略有助於防止在 AWS 服務之間傳遞請求時,未經授權使用KMS金鑰。
若要實作最低權限策略,建議您使用 AWS KMS 加密內容條件金鑰和全域來源ARN或來源帳戶條件金鑰。
使用加密內容條件金鑰
在使用 AWS KMS 資源時實作最低權限許可的最有效方法是包含 kms:EncryptionContext:context-key 或 kms:EncryptionContextKeys 政策中的條件索引鍵,允許主體呼叫 AWS KMS 密碼編譯操作。這些條件金鑰特別有效,因為它們會將許可與在資源加密時繫結至加密文字的加密內容建立關聯。
只有在政策陳述式中的動作為 CreateGrant或採用 EncryptionContext
參數的 AWS KMS 對稱密碼編譯操作,例如 GenerateDataKey或 Decrypt 等操作時,才能使用加密內容條件金鑰。(如需支援操作的清單,請參閱 kms:EncryptionContext:context-key 或 kms:EncryptionContextKeys。) 如果您使用這些條件金鑰來允許其他操作,例如 DescribeKey,則許可將被拒絕。
將值設定為服務在加密資源時使用的加密內容。此資訊通常可在服務文件的「安全」一章中取得。例如,AWS Proton 的加密內容會識別 AWS Proton 資源及其相關聯的範本。AWS Secrets Manager 加密內容會識別秘密及其版本。Amazon Location 的加密內容會識別追蹤器或收集。
下列範例金鑰政策陳述式允許 Amazon Location Service 代表授權使用者建立授予。此政策陳述式使用 kms:ViaService、 kms:CallerAccount 和 kms:EncryptionContext:context-key
條件索引鍵將許可與特定追蹤器資源綁定,以限制許可。
{ "Sid": "Allow Amazon Location to create grants on behalf of authorized users", "Effect": "Allow", "Principal": { "AWS": "
arn:aws:iam::111122223333:role/LocationTeam
" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "geo.us-west-2.amazonaws.com", "kms:CallerAccount": "111122223333
", "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker
" } } }
使用 aws:SourceArn
或 aws:SourceAccount
條件金鑰
當金鑰政策陳述式中的主體是AWS 服務主體 時,強烈建議您使用 aws:SourceArn 或 aws:SourceAccount 全域條件索引鍵,以及kms:EncryptionContext:context-key
條件索引鍵。只有在 AWS KMS 請求來自其他服務時, ARN和 帳戶值才會包含在授權內容中 AWS 。這個條件組合會實作最低權限許可,並避免潛在的混淆代理人案例。服務主體通常不會在金鑰政策中用作主體,但某些 AWS 服務需要它 AWS CloudTrail,例如 。
若要使用 aws:SourceArn
或 aws:SourceAccount
全域條件金鑰,請將 值設定為正在加密之資源的 Amazon Resource Name (ARN) 或 帳戶。例如,在授予加密追蹤 AWS CloudTrail 許可的金鑰政策陳述式中,將 的值設定為追蹤ARN的 aws:SourceArn
。盡可能使用 aws:SourceArn
,這更為具體。將 值設定為具有萬用字元的 ARN或 ARN 模式。如果您不知道 資源ARN的 ,請aws:SourceAccount
改用 。
注意
如果資源ARN包含 AWS KMS 金鑰政策中不允許的字元,則您無法在aws:SourceArn
條件金鑰的值ARN中使用該資源。請改用 aws:SourceAccount
條件金鑰。如需有關金鑰政策文件規則的詳細資訊,請參閱金鑰政策格式。
在下列範例金鑰政策中,取得許可的主體是 AWS CloudTrail 服務主體 cloudtrail.amazonaws.com
。為了實作最低權限,此政策會使用 aws:SourceArn
和 kms:EncryptionContext:context-key
條件金鑰。政策陳述式允許 CloudTrail 使用 KMS金鑰來產生用於加密追蹤的資料金鑰。獨立評估 aws:SourceArn
和 kms:EncryptionContext:context-key
條件。任何為指定操作使用 KMS金鑰的請求都必須滿足這兩個條件。
若要限制服務對範例帳戶 (111122223333) 和us-west-2
區域中finance
線索的許可,此政策陳述式會將aws:SourceArn
條件索引鍵設定為特定線索ARN的 。條件陳述式使用ArnEquals運算子,以確保 中的每個元素在比對時ARN都會獨立評估。此範例也會使用 kms:EncryptionContext:context-key
條件金鑰來限制特定帳戶和區域中追蹤的許可。
在使用此金鑰政策之前,請將範例帳戶 ID、區域和追蹤名稱取代為您帳戶的有效值。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CloudTrail to encrypt logs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cloudtrail:
us-west-2
:111122223333
:trail/finance
" ] }, "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:111122223333
:trail/*" ] } } } ] }