我有两个AWS帐户:一个保存我的机密的帐户,一个用于部署我的cloudformation堆栈的帐户。我正在使用cloudformation将我的基础结构部署为代码,并具有一个非常简单的CD管道:
作为我的堆栈一部分创建的EC2实例在启动过程中依赖于机密信息。我想将机密ARN添加到我的EC2用户数据脚本中,然后在执行用户数据脚本时使用AWS命令行检索机密值。
我的EC2实例使用的IAM服务角色也被创建为我的cloudformation脚本的一部分。因此,IAM角色ARN在启动堆栈之前是未知的。我有点陷入困境:在授予对我的机密的访问权限之前,我无法启动堆栈,但是由于资源策略中的主体不接受通配符,因此无法授予对我的机密的访问权限。
有人知道我如何能够为我的机密创建一个不需要预先知道IAM角色ARN的机密资源策略吗?也许还有其他想法?
在资源策略中指定主体的更好替代方法是使用基于属性的访问控制(ABAC,又名标记)。关于为IAM策略进行设置有相当详细的教程,可以针对资源策略进行修改。
使用这种方法,您将创建资源策略以授予对另一个帐户的访问权限,但仅适用于具有给定标签的主体。然后,当您在另一个帐户中创建角色时,可以为他们添加需要访问的秘密的标签。例如,仅当标签“ access-project”对于秘密和访问角色具有相同的值时,下面的资源策略才将GetSecretValue授予帐户123456789012:
{
"Version" : "2012-10-17",
"Statement" : [ {
"Effect" : "Allow",
"Principal": {"AWS": "123456789012" },
"Condition": {
"StringEquals": {
"aws:ResourceTag/access-project": "${aws:PrincipalTag/access-project}"
}
},
"Action" : "secretsmanager:GetSecretValue",
"Resource" : "*"
} ]
}
在将此资源策略添加到密钥后,您还应将标记“ access-project”添加到密钥和用户/角色。请注意,这仅授予GetSecretValue。让用户修改机密或机密上的标签可能是一个坏主意,但是如果您需要这样做,则还应包括所引用教程中的其他条件。当然,如果您不想在机密中添加标签,也可以在资源策略中对标签进行硬编码。
通常,此方法易于管理,因为您不必在每次添加或删除用户/角色时都不断更新资源策略。您只需在用户和/或秘密中添加或删除标签。
执行此操作的另一种方法是只向整个帐户公开机密,然后在该帐户限制内,谁可以通过IAM策略访问机密(可能仍按照本教程中的标签使用)。跨帐户访问需要资源策略授予访问权限和IAM用户/角色策略授予访问权限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句