首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

KMS和S3桶
EN

Stack Overflow用户
提问于 2020-07-26 12:37:23
回答 2查看 4.7K关注 0票数 1
  1. 我有一个有文件的桶

  1. I通过桶策略

授予了对test-user1 1(在IAM中有AdministratorAccess策略的用户)的完全访问权。

代码语言:javascript
复制
    "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"
        }
    ]
}

  1. Bucket使用AWS-KMS (CMK加密)作为存储桶,并且test- uses 1不在сustomer托管密钥

的密钥用户列表中。

  1. 关键策略如下:

代码语言:javascript
复制
{
    "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可以从桶中下载并读取文件吗?如果是的话,他为什么会这么做?

EN

回答 2

Stack Overflow用户

发布于 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之前,您必须自己对文件进行加密。

票数 5
EN

Stack Overflow用户

发布于 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

下面是我默认的密钥策略的一部分,正如我前面提到的:

代码语言:javascript
复制
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxx:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        }

因此,如果允许我的用户通过IAM策略使用密钥解密,他可以获得文件。

我的用户是具有以下AdministratorAccess策略的管理员:

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

因此,除其他行动外,他还含蓄地采取了这一行动:

代码语言:javascript
复制
{
    "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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63100235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档