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



我希望让 CloudFormation 模板创建一个 EC2 实例,并授予该实例对 S3 存储桶的访问权限。

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

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

更新:

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

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

您可以使用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,你应该能够将其限制在一个特定的配置文件中。

取决于您所说的 IAM 服务的含义。

您可以创建 IAM 用户访问密钥,以授予对特定 AWS 服务的权限,而不授予对其他服务的权限。访问密钥不允许 IAM 控制台访问(这需要登录凭证或联合身份验证)。

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

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

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

IAM 策略概述

相关内容

  • 没有找到相关文章

最新更新