使用该配置文件管理 EC2 实例的 AWS IAM 实例配置文件
AWS IAM Instance Profile to Administer EC2 Instances With that Profile
我有一个 IAM 用户启动了一个 CloudFormation 堆栈,其中包含一个
- EC2 实例
- 与关联的 IAM 实例配置文件
- IAM 角色
在 AWS::CloudFormation::Init 块中,EC2 实例执行一些需要它调用一些 ec2:* API 操作的操作。但是,此实例应该只能为该实例本身调用这些操作。
启动堆栈的用户有权仅附加一组预定义的策略和创建角色。像这样
"CloudFormationStackLauncher": {
"Type": "AWS::IAM::ManagedPolicy",
"Properties": {
"Description": "Allows attached entity to attach and detach required policies from roles it creates.",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:AttachRolePolicy",
"iam:DetachRolePolicy"
],
"Resource": "*",
"Condition": {
"ArnEquals": {
"iam:PolicyArn": [
"arn:aws:iam:::policy/InstanceThatCanManageItself",
]
}
}
},
{
"Effect": "Allow",
"Action": [
"iam:CreateRole"
],
"Resource": "*"
}
]
}
}
}
所以我需要定义策略 InstanceThatCanManageItself(需要由具有完全管理员权限的用户提前定义)。理想情况下,它看起来像:
{
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"${ec2:SourceInstanceARN}"
]
}
但它表示此策略无效,因为策略变量 ec2:SourceInstanceARN 不是有效 ARN 的格式。我试过在 EC2 实例上使用标签并向策略添加条件,但是当条件是动态的时它似乎不起作用,如下所示:
{
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"*"
],
"Condition": {
"StringLike": {
"ec2:ResourceTag/role" : "${aws:userid}"
}
}
}
在上面,我根据此处的描述,使用为 {aws:userid} 指定的值定义的 "RoleId:InstanceId" 格式动态添加标签到启动的 EC2 实例:http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html。这种方法有效,但不起作用...要么是因为它是动态的...要么是因为操作类型不支持 ResourceTag 上下文键可能...
有什么办法可以做到吗?
谢谢。
基于资源标签的授权仅适用于某些操作。参见,例如:EC2 Supported IAM actions。例如,不支持所有 Describe 操作,必须通过单独的策略声明获得许可。
作为支持资源标签的操作示例,attaching/detaching 卷(请参阅上面相同的 link 以了解支持的操作及其要求),因此以下策略将起作用:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/policyuser": "${aws:userid}"
}
}
}
]
}
,前提是卷和 ec2 实例都标有标签 'policyuser' 并且值等于角色 ID:ec2-实例 ID(参见 IAM User Guide Reference Policy Variables),其中角色 ID 是角色的唯一标识符,通过例如获得
aws iam get-role --role-name rolename
我有一个 IAM 用户启动了一个 CloudFormation 堆栈,其中包含一个 - EC2 实例 - 与关联的 IAM 实例配置文件 - IAM 角色
在 AWS::CloudFormation::Init 块中,EC2 实例执行一些需要它调用一些 ec2:* API 操作的操作。但是,此实例应该只能为该实例本身调用这些操作。
启动堆栈的用户有权仅附加一组预定义的策略和创建角色。像这样
"CloudFormationStackLauncher": {
"Type": "AWS::IAM::ManagedPolicy",
"Properties": {
"Description": "Allows attached entity to attach and detach required policies from roles it creates.",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:AttachRolePolicy",
"iam:DetachRolePolicy"
],
"Resource": "*",
"Condition": {
"ArnEquals": {
"iam:PolicyArn": [
"arn:aws:iam:::policy/InstanceThatCanManageItself",
]
}
}
},
{
"Effect": "Allow",
"Action": [
"iam:CreateRole"
],
"Resource": "*"
}
]
}
}
}
所以我需要定义策略 InstanceThatCanManageItself(需要由具有完全管理员权限的用户提前定义)。理想情况下,它看起来像:
{
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"${ec2:SourceInstanceARN}"
]
}
但它表示此策略无效,因为策略变量 ec2:SourceInstanceARN 不是有效 ARN 的格式。我试过在 EC2 实例上使用标签并向策略添加条件,但是当条件是动态的时它似乎不起作用,如下所示:
{
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"*"
],
"Condition": {
"StringLike": {
"ec2:ResourceTag/role" : "${aws:userid}"
}
}
}
在上面,我根据此处的描述,使用为 {aws:userid} 指定的值定义的 "RoleId:InstanceId" 格式动态添加标签到启动的 EC2 实例:http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html。这种方法有效,但不起作用...要么是因为它是动态的...要么是因为操作类型不支持 ResourceTag 上下文键可能...
有什么办法可以做到吗?
谢谢。
基于资源标签的授权仅适用于某些操作。参见,例如:EC2 Supported IAM actions。例如,不支持所有 Describe 操作,必须通过单独的策略声明获得许可。
作为支持资源标签的操作示例,attaching/detaching 卷(请参阅上面相同的 link 以了解支持的操作及其要求),因此以下策略将起作用:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/policyuser": "${aws:userid}"
}
}
}
]
}
,前提是卷和 ec2 实例都标有标签 'policyuser' 并且值等于角色 ID:ec2-实例 ID(参见 IAM User Guide Reference Policy Variables),其中角色 ID 是角色的唯一标识符,通过例如获得
aws iam get-role --role-name rolename