使用CloudFormation在AWS资源之间授予权限

时间:2017-11-08 19:18:36

标签: amazon-web-services amazon-iam

我想让CloudFormation模板创建一个EC2实例,并让该实例访问S3存储桶。

一种方法是让模板创建具有适当权限的IAM用户,并使用其访问密钥授予访问权限。

但是如果我不想让该用户访问IAM服务怎么办? 有没有办法让该用户在没有IAM的情况下部署此模板?

更新:

我希望能够共享该模板,所以我想知道是否有可能不依赖于预先存在的IAM资源(角色,策略等)

2 个答案:

答案 0 :(得分:0)

为实例授予权限的常用方法是Instance Profiles。您创建具有所有必需权限的角色,将该角色分配给实例配置文件,然后将配置文件分配给您需要的任何实例。

你可以do this with CloudFormation

{
   "AWSTemplateFormatVersion": "2010-09-09",
   "Resources": {
      "myEC2Instance": {
         "Type": "AWS::EC2::Instance",
         "Version": "2009-05-15",
         "Properties": {
            "ImageId": "ami-205fba49",
            "InstanceType": "t2.micro",
            "IamInstanceProfile": {
               "Ref": "RootInstanceProfile"
            }
         }
      },
      "MyRole": {
         "Type": "AWS::IAM::Role",
         "Properties": {
            "AssumeRolePolicyDocument": {
               "Version" : "2012-10-17",
               "Statement": [ {
                  "Effect": "Allow",
                  "Principal": {
                     "Service": [ "ec2.amazonaws.com" ]
                  },
                  "Action": [ "sts:AssumeRole" ]
               } ]
            },
            "Path": "/"
         }
      },
      "RolePolicies": {
         "Type": "AWS::IAM::Policy",
         "Properties": {
            "PolicyName": "s3",
            "PolicyDocument": {
               "Version" : "2012-10-17",
               "Statement": [ {
                  "Effect": "Allow",
                  "Action":["s3:PutObject","s3:PutObjectAcl"],
                  "Resource":["arn:aws:s3:::examplebucket/*"],
               } ]
            },
            "Roles": [ { "Ref": "MyRole" } ]
         }
      },
      "RootInstanceProfile": {
         "Type": "AWS::IAM::InstanceProfile",
         "Properties": {
            "Path": "/",
            "Roles": [ { "Ref": "MyRole" } ]
         }
      }
   }
}

如果要避免让用户部署此模板IAM访问权限,可以在部署模板之前创建实例配置文件,并在模板中指定现有的实例配置文件。我还没有尝试过,但似乎应该只需要ec2:AssociateIamInstanceProfile,你应该能够仅仅限制那个特定的配置文件。

答案 1 :(得分:0)

取决于您对IAM服务的意思。

您可以创建IAM用户访问密钥,为特定AWS服务提供权限,而不创建其他用户访问密钥。访问密钥不允许IAM控制台访问(这需要登录凭据或联合)。

对于您的用例,您的用户至少需要:

  • 使用CloudFormation执行模板的权限。
  • 创建EC2实例的权限。

这些权限在您添加到AWS管理控制台中的IAM用户的策略中定义。您可以创建无法登录控制台的用户。然后生成用户将在其应用程序,AWS CLI等中使用的访问密钥

Overview of IAM Policies