我想让CloudFormation模板创建一个EC2实例,并让该实例访问S3存储桶。
一种方法是让模板创建具有适当权限的IAM用户,并使用其访问密钥授予访问权限。
但是如果我不想让该用户访问IAM服务怎么办? 有没有办法让该用户在没有IAM的情况下部署此模板?
更新:
我希望能够共享该模板,所以我想知道是否有可能不依赖于预先存在的IAM资源(角色,策略等)
答案 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控制台访问(这需要登录凭据或联合)。
对于您的用例,您的用户至少需要:
这些权限在您添加到AWS管理控制台中的IAM用户的策略中定义。您可以创建无法登录控制台的用户。然后生成用户将在其应用程序,AWS CLI等中使用的访问密钥