gpt4 book ai didi

amazon-web-services - ECS 容器无法使用 AWS KMS key ,因为访问被拒绝

转载 作者:行者123 更新时间:2023-12-03 07:21:12 25 4
gpt4 key购买 nike

初始状态:我想使用 ECS 容器内的 KMS key 解密值。为此,TaskDefinitionExecutionRoleArn,它引用以下角色 RoleECSTaskContainer。角色和 KMS key 的设置如下所示:

    KMSKeyEncryption:
Type: AWS::KMS::Key
Properties:
Enabled: true
EnableKeyRotation: false
KeyPolicy:
Version: 2012-10-17
Statement:
- Principal:
AWS:arn of the users/roles who are allowed to manage this key
Effect: Allow
Action:
- kms:Create*
- kms:Describe*
- kms:Enable*
- kms:List*
- kms:Put*
- kms:Update*
- kms:Revoke*
- kms:Disable*
- kms:Get*
- kms:Delete*
- kms:ScheduleKeyDeletion
- kms:CancelKeyDeletion
- kms:Encrypt*
- kms:Decrypt*
Resource: "*"
- Principal:
AWS: ecs-tasks.amazonaws.com
Effect: Allow
Action:
- kms:Decrypt*
Resource: "*"
PolicyDecryptKms:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName: DecryptKmsPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Sid: AllowDecryptValues
Effect: Allow
Action:
- kms:Decrypt*
Resource: !GetAtt KMSKeyEncryption.Arn
RoleECSTaskContainer:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2008-10-17
Statement:
- Effect: Allow
Principal:
Service: ecs-tasks.amazonaws.com
Action: sts:AssumeRole
RoleName: ECSTaskContainerRole
ManagedPolicyArns:
- !Ref PolicyDecryptKms

当容器尝试使用 KMS key 解密值时,会出现以下异常:

User: arn:aws:sts::123123123:assumed-role/ECSTaskContainerRole/bc9a5782-9sf8-312a-8z76-0ef29a6e5631 is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:eu-west-1:123123123:key/8c9h2f44-bjvb-4l2d-fkj11-fjdahjEr564182

经过一番调查,我发现如果我稍微更改一下 key 策略以允许所有主体解密,它就会开始工作,如下所示:

Principal: "*"
Effect: Allow
Action:
- kms:Decrypt*
Resource: "*"

但这不是定义 key 策略的安全方法,因为我允许每个人使用此 KMS key 解密值。

我认为我使用 ecs-tasks.amazonaws.com 作为主体是错误的。它是否正确?如果是这样,在这种情况下我应该使用哪种服务?

最佳答案

有两种方法可以控制对 KMS key 的访问:

  1. 通过使用 key 策略 - 您可以在单个策略中定义访问控制。
  2. 通过将 IAM 策略与 key 策略结合使用 - 通过这种方式控制访问,您可以在 IAM 中管理您的 IAM 身份的所有权限。

您可以单独使用 key 策略来控制访问。但是,IAM 策略本身不足以允许访问 CMK。您必须向 AWS 账户授予对 CMK 的完全访问权限才能启用 IAM 策略。

{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:root"},
"Action": "kms:*",
"Resource": "*"
}

因此,这取决于您希望如何管理您的政策。为了简单起见,我通常更喜欢 KMS key 策略。因此,我只需设置 key 策略以向该角色授予 kms:decrypt 权限,并删除托管 IAM 策略。

KMSKeyEncryption:
Type: AWS::KMS::Key
Properties:
KeyPolicy:
Version: 2012-10-17
Statement:
...
- Principal:
AWS: !GetAtt RoleECSTaskContainer.Arn
Effect: Allow
Action:
- kms:Decrypt*
Resource: "*"

RoleECSTaskContainer:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2008-10-17
Statement:
- Effect: Allow
Principal:
Service: ecs-tasks.amazonaws.com
Action: sts:AssumeRole
RoleName: ECSTaskContainerRole

关于amazon-web-services - ECS 容器无法使用 AWS KMS key ,因为访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58605696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com