AWS ARN中的变量

时间:2018-07-04 06:29:33

标签: amazon-web-services amazon-iam

我目前正在为AWS lambda尝试无服务器,并且我目前停留在策略方面,以便能够无服务器地进行部署。我搜索了所需的必要政策,并找到了该特定政策

{
    "Effect": "Allow",
    "Action": [
        "cloudformation:CreateStack",
        "cloudformation:UpdateStack",
        "cloudformation:DeleteStack"
    ],
    "Resource": "arn:aws:cloudformation:*:*:stack/${project}*"
}

我对AWS政策并不陌生,并且对$(project)部分感到好奇。我认为那将是一个变量。我的问题是该变量在哪里定义?

1 个答案:

答案 0 :(得分:0)

在您的示例中, $ {project} 用作占位符,代表您需要通过硬编码静态堆栈名称或硬编码堆栈来提供的特定CloudFormation堆栈名称。名称加上通配符。

"Resource": "arn:aws:cloudformation:*:*:stack/foo"

"Resource": "arn:aws:cloudformation:*:*:stack/foo*"

第一个示例只是一个名为 foo 的静态堆栈名称,并且只会授予您具有确切名称 的CloudFormation堆栈的Lambda权限。

第二个示例表示任何以 foo 开头并可选以其他名称结尾的堆栈名称,例如 foo-05 foobar foo-tastic 或简单的 foo 。通配符为Lambda提供了更大的灵活性,使其具有许可的Cloudformation堆栈。

IAM策略支持预定义的变量,例如 $ {aws:username} $ {aws:CurrentTime} $ {aws:SourceIp} ,但它们不会自定义变量,例如 $(project} 。谁写的示例策略应该将堆栈名称表示为 或其他名称,以避免混淆这样。

一些额外的信息:

如果您想深入研究,实际上可以使用自定义变量对IAM策略进行参数化设置,但这需要您使用AWS CloudFormation或第三方工具(如Ansible)部署IAM策略。这些方法要复杂得多,如果您希望自动化部署,则必不可少。

参考:https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse