【问题标题】:How to assign a policy to adhoc user?如何为临时用户分配策略?
【发布时间】:2019-12-12 01:45:31
【问题描述】:

背景:

使用跨账户角色someaccountrole,我可以访问aws 账户xyz


案例 1

要在帐户xyz 中创建堆栈,我们通过控制台上传 Cloudformation 文件。

Events 选项卡中创建堆栈时,我们看到了第一个事件,如下所示:


案例 2

我们在xyz 帐户中创建EC2 实例。

使用sam deploy,其中sam deployaws cloudformation deploy 的包装器,我们从EC2 运行以下命令来创建堆栈:

aws cloudformation deploy --template-file cfntemplate.yml --stack-name somestack-test --region us-east-1

在堆栈创建过程中,我们看到创建了类似的事件(如下所示):


在案例 2 中,用户是:arn:aws:sts::${AccountId}:assumed-role/Autodeploy/i-0000000cc4,我们在其中创建了 Autodeploy 角色并分配给 EC2。该用户在堆栈创建完成后消失。


但在case 2中,user(i-0000000cc4) 需要权限才能执行以下操作,这与case 1不同:

     {
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:CreateChangeSet",
                "cloudformation:CreateUploadBucket",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:DeleteStack",
                "cloudformation:Describe*",
                "cloudformation:UpdateStack"
            ],
            "Resource": [
                "arn:aws:cloudformation:us-east-1:${AccountId}:stack/somestack*”
            ],
            "Effect": "Allow"
        }

否则,Events 选项卡会在情况 2 中给出以下错误:

User: arn:aws:sts::${AccountId}:assumed-role/Autodeploy/i-0000000cc4 
is not authorized to perform: cloudformation:CreateChangeSet on resource:
arn:aws:cloudformation:us-east-1:${AccountId}:stack/somestack-test

1) 在情况 1 中,权限为 someaccountrole 以创建堆栈。但是在案例 2 中,为什么通过 AWS CLI 创建堆栈需要堆栈创建权限?

2)如何将内联策略(短期)分配给此类临时会话资源(i-0000000cc4)而不是 EC2??

【问题讨论】:

  • 我无法在 Internet 上找到有关 Autodeploy 角色的任何信息。有人知道它是在哪里创建的吗?

标签: amazon-web-services security amazon-cloudformation amazon-iam aws-sam


【解决方案1】:

1) 在第 1 种情况下,权限以 someaccountrole 的形式提供,用于创建堆栈。但是在案例 2 中,为什么通过 AWS CLI 创建堆栈需要堆栈创建权限?

情况 1 中的堆栈由您使用 Permissions 堆栈选项指定的角色创建,请参阅 [1]。此AWS Identity and Access Management (IAM) 服务角色通常具有您上面列出的所需cloudformation:... 权限。

2)如何将内联策略(短期)分配给此类临时会话资源(i-0000000cc4)而不是 EC2??

将策略分配给 EC2 实例的实例配置文件是正确的!

如果您想从 EC2 实例运行 AWS CLI 命令并且您想使用实例元数据服务来验证您的 CLI 会话,您必须附加所需的权限作为附加到您的 EC2 的角色的内联策略通过实例配置文件实例。

有关实例元数据服务的更多信息,请参阅 [2][3]。有关很好地解释这些概念的非官方但详尽的博客文章,请参阅 [4]。

参考文献

[1]https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html
[2]https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-metadata.html
[3]https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#instance-metadata-security-credentials
[4]https://blog.gruntwork.io/authenticating-to-aws-with-instance-metadata-b6d812a86b40

【讨论】:

  • 对于您的观点:“EC2 实例的实例配置文件的策略是正确的!”我正在阻止 EC2 仅运行该特定任务 (aws cloudformation deploy)。相反,我正在考虑将策略应用于用户。
  • 还有其他方法可以运行sam deploy 命令吗?除了从 EC2 运行......从 SAM 模板分配资源。
  • 我不明白您从 EC2 实例中需要什么,而您无法从本地机器获得。你能详细说明一下吗?
  • 我需要您提到的链接中提到的管理员权限:“第 2 步:创建具有管理员权限的 IAM 用户”这是不切实际的。必须遵循一些策略规则才能在帐户中工作。SAM模板是 NodeJS、Java、Python 开发人员编写的,不是我写的。我们不能像那样给他们管理员权限。我们获取他们生成的模板文件,然后在 EC2 中运行...
猜你喜欢
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 2020-10-22
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多