gpt4 book ai didi

python - 使用 AWS CDK 创建受 MFA 保护的角色会绕过 MFA 条件

转载 作者:行者123 更新时间:2023-12-04 12:59:51 33 4
gpt4 key购买 nike

我正在尝试创建一个受 MFA 保护的角色,授予 AdministratorAccess 可由另一个用户承担。我可以用它来定义角色的用户和权限策略。但是,当我定义 MFA 要求时,主体和允许的操作在权限策略中重复,这使得 MFA 要求条件无用。

我的 CDK 代码如下所示:

from aws_cdk import (
aws_iam as iam,
core,
)


class AssumeRoleStack(core.Stack):

def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)

user = iam.User(self, 'myuser')
role = iam.Role(self, 'myrole',
assumed_by=iam.ArnPrincipal(user.user_arn),
max_session_duration=core.Duration.hours(8))
role.add_managed_policy(iam.ManagedPolicy.from_aws_managed_policy_name('AdministratorAccess'))
role.assume_role_policy.add_statements(
iam.PolicyStatement(principals=[user],
actions=['sts:AssumeRole'],
conditions={'Bool': {'aws:MultiFactorAuthPresent': True}})
)
user.add_to_policy(iam.PolicyStatement(actions=['sts:AssumeRole'], resources=[role.role_arn]))

生成的角色权限策略如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::012345678910:user/assume-role-myuserZ09A543B-1ULCILBM447SF"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::012345678910:user/assume-role-myuserZ09A543B-1ULCILBM447SF"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
]
}

这不是我想要的,因为 - 如上所述 - 即使没有 MFA,用户也可以承担该角色。我想要的是以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::012345678910:user/assume-role-myuserZ09A543B-1ULCILBM447SF"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
]
}

我已经尝试在没有 assumed_by 参数的情况下定义角色并在 assume_role_policy 中添加主体,但是 iam.Role 类需要主体。类似地, iam.PolicyStatement 中的 assume_role_policy.add_statements() 不允许遗漏 principalsactions 参数。

如何创建角色的权限策略而不会造成冗余并且不会因为它们而使条件变得无用?

最佳答案

看起来没有办法更新现有的信任策略。您可以在 Github 上提出问题.

作为一种解决方法,您可以在定义角色时将 AccountRootPrincipal 设置为受信任的主体,这样用户在没有 MFA 的情况下无法承担它。

iam.Role(
assumed_by=iam.AccountRootPrincipal()
)

关于python - 使用 AWS CDK 创建受 MFA 保护的角色会绕过 MFA 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59716880/

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