Key policies đóng vai trò quan trọng trong việc kiểm soát Ai được phép Làm gì với CMK của bạn.
Hiện tại IAM role KMSWorkshop-InstanceInitRole cho phép Instance thực hiện nhiều tác vụ với AWS KMS. Tuy nhiên theo best practice Least Privilege và Separation of Duties, nhằm đảm bảo bảo mật Instance chỉ nên có quyền upload file lên S3 với Server Side Encryption, và không nên có quyền decrypt và download file từ S3. Quyền Decrypt và Download file nên được gán cho một Instance khác với những quy định về bảo mật chặt chẽ hơn. Để đáp ứng các yêu cầu này chúng ta dựa vào 2 yếu tố chính đó là:
Mỗi khóa CMK được khởi tạo bởi AWS KMS đều có một policy khởi tạo ban đầu. Chạy lệnh dưới đây để để kiểm tra policy khởi tạo ban đầu gán cho CMK có alias ImportedCMK
aws kms get-key-policy --key-id <key ID of the CMK whose alias is ImportedCMK> --policy-name default
Mặc định, policy khởi tạo ban đầu của CMK chỉ cho phép chủ sở hữu là AWS account (root user) có quyền full access đối với CMK. Có 2 lợi ích từ chính sách khởi tạo ban đầu này đó là:
Decrypt
vào ô tìm kiếmsudo python WebAppEncSSE.py 80
Với Role hiện tại, Instance có thể Encrypt dữ liệu tải lên S3 nhưng không thể Decrypt dữ liệu tải xuống. Để bảo mật hơn nữa, ta áp dụng chính sách khóa Key policy để giới hạn khả năng encrypt, chỉ cấp quyền thực hiện cho chính account của chúng ta mà không cho phép bất cứ Cross-Account Role nào có quyền thực hiện.
{
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<your acount id>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow for Use only within our Account",
"Effect": "Allow",
"Principal": {
"AWS": "<the ARN we copied in the step 11>"
},
"Action": "kms:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:CallerAccount": "<your acount id>"
}
}
}
]
}
Đây là một trong những kiểu chính sách khóa phổ biến hay được áp dụng, đảm bảo chỉ những Instance được gán với Role đã được chỉ định mới có khả năng sử dụng khóa.
{
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<your acount id>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow for Use only within our Account",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [ "arn:aws:iam::<your acount id>:role/KMSWorkshop-InstanceInitRole", "arn:aws:iam::<your acount id>:root"]
},
"Action": "kms:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:CallerAccount": "<your acount id>"
}
}
}
]
}
Bạn có thể thêm các điều kiện đối vào nội dung của Chính sách Khóa, giúp tinh chỉnh quyền sử dụng Khóa và sự liên kết đến một số tham số khác.
{
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<your acount id>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow for Use only within our Account",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<your acount id>:user/userA"
]
},
"Action": [
"kms:DeleteAlias",
"kms:DeleteImportedKeyMaterial",
"kms:PutKeyPolicy",
"kms:ScheduleKeyDeletion"
],
"Resource": "*",
"Condition": {
"NumericLessThan": {
"aws: MultiFactorAuthAge": "300"
}
}
}
]
}