授予了对test-user1 1(在IAM中有AdministratorAccess策略的用户)的完全访问权。
"Version": "2012-10-17",
"Id": "Policy1595762326470",
"Statement": [
{
"Sid": "Stmt1595762736524",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxx:user/test-user1"
},
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::test-user1-bucket"
}
]
}的密钥用户列表中。
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxx:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow access for Key Administrators",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxx:user/kolyaiks_iam"
},
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:TagResource",
"kms:UntagResource",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxx:user/kolyaiks_iam"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow attachment of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxx:user/kolyaiks_iam"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}test-user1 1可以从桶中下载并读取文件吗?如果是的话,他为什么会这么做?
发布于 2020-07-26 14:38:38
当指示S3在静止时使用KMS加密对象时,S3将自动利用S3在存储对象时加密对象,并在访问对象时解密对象。如果KMS的资源策略允许帐户中的所有IAM用户使用密钥,那么任何访问S3桶的IAM用户都可以从S3下载对象,并且接收到的内容将是未加密的。如果您锁定了对CMK的访问权限,那么只有具有使用CMK进行解密的权限的用户(除了访问S3桶的权限之外)才能从S3下载该对象。如果用户没有对对象加密的KMS密钥的访问权限,那么他们实际上将得到一个拒绝访问的错误,而不是像您预期的那样从S3接收加密的对象。
您最初的假设是,用户可以从S3下载对象,但他们会收到该对象的加密版本,这是不正确的,因为解密发生在S3中的服务器端。如果您希望用户能够从S3下载加密版本的文件,那么在上传到S3之前,您必须自己对文件进行加密。
发布于 2020-07-26 20:18:50
在密钥创建向导中没有提到这一点,但是在两个显式设置的用户类型(密钥管理和键的常规用户)中,有默认的密钥策略,使IAM策略能够允许访问CMK,对它的描述如下:https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-root-enable-iam。
下面是我默认的密钥策略的一部分,正如我前面提到的:
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxx:root"
},
"Action": "kms:*",
"Resource": "*"
}因此,如果允许我的用户通过IAM策略使用密钥解密,他可以获得文件。
我的用户是具有以下AdministratorAccess策略的管理员:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}因此,除其他行动外,他还含蓄地采取了这一行动:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1595791311072",
"Action": [
"kms:Decrypt"
],
"Effect": "Allow",
"Resource": "arn:aws:kms:us-east-1:xxx:key/eacb823d-79a5-4247-8751-e0e14c0b1d67"
}
]
}当我将用户从Admin组中删除时,他失去了使用密钥的特权。因此,在IAM策略中向用户显式地添加“kms:解密”操作(使用用于加密S3中的文件的特定密钥)解决了问题,并且用户能够再次获得该文件。
更多信息在这里:https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html
https://stackoverflow.com/questions/63100235
复制相似问题