關鍵原則中 AWS 服務的權限 - AWS Key Management Service

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

關鍵原則中 AWS 服務的權限

許多 AWS 服務用 AWS KMS keys 來保護其管理的資源。當服務使用 AWS 擁有的金鑰AWS 受管金鑰 時,服務會建立並維護這些 KMS 金鑰的金鑰政策。

但是,當您透過 AWS 服務使用客戶受管金鑰時,您需要設定並維護金鑰政策。該金鑰政策必須允許服務具有代表您保護資源所需的最低許可。建議您遵循最低權限原則:僅授予服務所需的許可。您可以藉由了解服務需要哪些權限並使用 AWS 全域條件金鑰AWS KMS 條件金鑰來調整許可,有效地完成這個操作。

若要尋找服務對客戶受管金鑰所需的許可,請參閱服務的加密文件。例如,如需 Amazon Elastic Block Store (Amazon EBS) 所需的許可,請參閱 Amazon EC2 使用者指南和 Amazon EC2 使用者指南中的 IAM 使用者的許可。對於 Secrets Manager 所需的許可,請參閱《AWS Secrets Manager 使用者指南》中的授權使用 KMS 金鑰

實作最低權限的許可

當您授與使用 KMS 金鑰的 AWS 服務權限時,請確定該權限僅對服務必須代表您存取的資源有效。此最低權限策略有助於防止在 AWS 服務之間傳遞要求時未經授權使用 KMS 金鑰。

若要實作最低權限策略,建議您使用 AWS KMS 加密內容條件金鑰和全域來源 ARN 或來源帳戶條件金鑰。

使用加密內容條件金鑰

使用 AWS KMS 資源時,實作最低權限的最有效方法是在允許主體呼叫 AWS KMS 密碼編譯作業的原則中包含kms:EncryptionContext:context-keykms:EncryptionContextKeys條件金鑰。這些條件金鑰特別有效,因為它們會將許可與在資源加密時繫結至加密文字的加密內容建立關聯。

只有在原則陳述式中的動作為或需要EncryptionContext參數的 AWS KMS 對稱加密作業 (例如,CreateGrant或「解密」等作業) 時,才使用加密內容條件金鑰。GenerateDataKey(如需受支援操作的清單,請參閱 kms:EncryptionContext:context-keykms:EncryptionContextKeys。) 如果您使用這些條件索引鍵來允許其他作業,例如 DescribeKey,將會拒絕權限。

將值設定為服務在加密資源時使用的加密內容。此資訊通常可在服務文件的「安全」一章中取得。例如,Proton 的加密內容可識別 AWS Pro AWS ton 資源及其相關聯的範本。AWS Secrets Manager 加密內容會識別秘密及其版本。Amazon Location 的加密內容會識別追蹤器或收集。

下列範例金鑰政策陳述式允許 Amazon Location Service 代表授權使用者建立授予。此原則陳述式會使用 kms: ViaService、kms:kms:EncryptionContext:context-key條件金鑰將權限繫結至特定追蹤器資源CallerAccount,以限制權限。

{ "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:SourceArnaws:SourceAccount 條件金鑰

當主要政策陳述式中的主體是 AWS 服務主體時,強烈建議您除了 kms:EncryptionContext:context-key 條件金鑰之外,再使用 aws:SourceArnaws:SourceAccount 全域條件金鑰。只有當請求來自另一個 AWS 服務時,ARN 和帳戶值才會包含在授權內容 AWS KMS 中。這個條件組合會實作最低權限許可,並避免潛在的混淆代理人案例。服務主體通常不會用作金鑰原則中的主參與者,但某些 AWS 服務 (例如 AWS CloudTrail) 需要它。

若要使用 aws:SourceArnaws:SourceAccount 全域條件金鑰,請將值設定為要加密之資源的 Amazon Resource Name (ARN) 或帳戶。例如,在給予 AWS CloudTrail 許可以加密追蹤的金鑰政策陳述式中,將 aws:SourceArn 的值設定為追蹤的 ARN。盡可能使用 aws:SourceArn,這更為具體。將值設定為 ARN 或具有萬用字元的 ARN 模式。如果您不知道資源的 ARN,請改為使用 aws:SourceAccount

注意

如果資源 ARN 包含 AWS KMS 金鑰原則中不允許的字元,則無法在aws:SourceArn條件索引鍵的值中使用該資源 ARN。請改用 aws:SourceAccount 條件金鑰。如需有關金鑰政策文件規則的詳細資訊,請參閱金鑰政策格式

在下列範例金鑰政策中,取得許可的主體是 AWS CloudTrail 服務主體 cloudtrail.amazonaws.com。為了實作最低權限,此政策會使用 aws:SourceArnkms:EncryptionContext:context-key 條件金鑰。原則陳述式 CloudTrail 允許使用 KMS 金鑰來產生用來加密追蹤的資料金鑰。獨立評估 aws:SourceArnkms: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/*" ] } } } ] }