本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊IAM政策示例 EBS
默认情况下,用户和角色无权创建或修改 Amazon EBS 资源。他们也无法使用 Amazon Web Services Management Console、 Amazon Command Line Interface (Amazon CLI) 或来执行任务 Amazon API。要授予用户对其所需资源执行操作的权限,IAM管理员可以创建IAM策略。然后,管理员可以将IAM策略添加到角色中,用户可以代入这些角色。
要了解如何使用这些示例策略文档创建IAM基于身份的JSON策略,请参阅IAM用户指南中的创建IAM策略(控制台)。
有关亚马逊定义的操作和资源类型(包括每种资源类型的格式)的详细信息EBS,请参阅《ARNs服务授权参考》中的 Amazon Elastic Block Store 的操作、资源和条件密钥。
策略最佳实践
基于身份的策略决定了是否有人可以在您的账户中创建、访问或删除亚马逊EBS资源。这些操作可能会使 Amazon Web Services 账户产生成本。创建或编辑基于身份的策略时,请遵循以下指南和建议:
-
开始使用 Amazon 托管策略并转向最低权限权限 — 要开始向用户和工作负载授予权限,请使用为许多常见用例授予权限的Amazon 托管策略。它们在你的版本中可用 Amazon Web Services 账户。我们建议您通过定义针对您的用例的 Amazon 客户托管策略来进一步减少权限。有关更多信息,请参阅《IAM用户指南》中的Amazon 托Amazon 管策略或工作职能托管策略。
-
应用最低权限权限-使用IAM策略设置权限时,仅授予执行任务所需的权限。为此,您可以定义在特定条件下可以对特定资源执行的操作,也称为最低权限许可。有关使用应用权限IAM的更多信息,请参阅IAM用户指南IAM中的策略和权限。
-
使用IAM策略中的条件进一步限制访问权限-您可以在策略中添加条件以限制对操作和资源的访问权限。例如,您可以编写一个策略条件来指定所有请求都必须使用发送SSL。如果服务操作是通过特定的方式使用的,则也可以使用条件来授予对服务操作的访问权限 Amazon Web Services 服务,例如 Amazon CloudFormation。有关更多信息,请参阅《IAM用户指南》中的IAMJSON策略元素:条件。
-
使用 A IAM ccess Analyzer 验证您的IAM策略以确保权限的安全性和功能性 — A IAM ccess Analyzer 会验证新的和现有的策略,以便策略符合IAM策略语言 (JSON) 和IAM最佳实践。IAMAccess Analyzer 提供了 100 多项策略检查和可行的建议,可帮助您制定安全和实用的策略。有关更多信息,请参阅IAM用户指南中的使用 A IAMccess Analyzer 验证策略。
-
需要多重身份验证 (MFA)-如果您的场景需要IAM用户或 root 用户 Amazon Web Services 账户,请打开MFA以提高安全性。要要求MFA何时调用API操作,请在策略中添加MFA条件。有关更多信息,请参阅《IAM用户指南》MFA中的使用进行安全API访问。
有关中最佳做法的更多信息IAM,请参阅《IAM用户指南》IAM中的安全最佳实践。
允许用户使用 Amazon EBS 控制台
要访问 Amazon Elastic Block Store 控制台,您必须具有一组最低权限。这些权限必须允许您列出和查看有关您的 Amazon EBS 资源的详细信息 Amazon Web Services 账户。如果创建比必需的最低权限更为严格的基于身份的策略,对于附加了该策略的实体(用户或角色),控制台将无法按预期正常运行。
您无需为仅拨打 Amazon CLI 或的用户设置最低控制台权限 Amazon API。相反,只允许访问与他们尝试执行的API操作相匹配的操作。
为确保用户和角色仍然可以使用亚马逊EBS控制台,还需要将亚马逊EBS
或ConsoleAccess
Amazon 托管策略附加到实体。有关更多信息,请参阅《用户指南》中的向IAM用户添加权限。ReadOnly
允许用户查看他们自己的权限
此示例说明如何创建允许IAM用户查看附加到其用户身份的内联和托管策略的策略。此策略包括在控制台上或使用或以编程方式完成此操作的 Amazon CLI 权限。 Amazon API
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }
允许用户使用卷
示例:附加和分离卷
当API操作要求调用者指定多个资源时,您必须创建允许用户访问所有必需资源的策略声明。如果使用 Condition
元素时需要其中一种或多种资源,则必须创建多个语句,如本示例所示。
以下策略允许用户将带有 “volume_user
= iam-user-name” 标签的卷连接到带有 department=dev
“” 标签的实例,并将这些卷与这些实例分离。如果您将此策略附加到某个IAM组,则该aws:username
策略变量允许组中的每个用户使用名为的标签将其用户名作为值volume_user
的实例连接或分离卷。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:
account-id
:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:account-id
:volume/*", "Condition": { "StringEquals": { "aws:ResourceTag/volume_user": "${aws:username}" } } } ] }
示例:创建卷
以下策略允许用户使用该CreateVolumeAPI操作。系统只允许用户创建加密且大小不足 20 GiB 的卷。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVolume" ], "Resource": "arn:aws:ec2:us-east-1:
account-id
:volume/*", "Condition":{ "NumericLessThan": { "ec2:VolumeSize" : "20" }, "Bool":{ "ec2:Encrypted" : "true" } } } ] }
示例:创建带有标签的卷
下面的策略包含 aws:RequestTag
条件键,该条件键要求用户标记其使用标签 costcenter=115
和 stack=prod
创建的任何卷。如果用户不传递这些特定标签,或者根本不指定任何标签,则请求失败。
对于应用标签的资源创建操作,用户还必须具有使用 CreateTags
操作的权限。第二个语句使用 ec2:CreateAction
条件键使用户只能在 CreateVolume
上下文中创建标签。用户无法标记现有卷或任何其他资源。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateTaggedVolumes", "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:us-east-1:
account-id
:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/costcenter": "115", "aws:RequestTag/stack": "prod" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:account-id
:volume/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "CreateVolume" } } } ] }
下面的策略允许用户创建卷而无需指定标签。仅当用户在 CreateTags
请求中指定了标签时,系统才会评估 CreateVolume
操作。如果用户指定了标签,则标签必须为 purpose=test
。请求中不允许使用任何其他标签。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:
account-id
:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "CreateVolume" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }
示例:使用 Amazon EC2 控制台处理卷
以下策略向用户授予使用 Amazon EC2 控制台查看和创建卷以及将卷附加和分离到特定实例的权限。
用户可以将任何卷附加到具有标签“purpose=test
”的实例,也可以从这些实例分离卷。要使用 Amazon EC2 控制台连接卷,用户拥有使用该ec2:DescribeInstances
操作的权限会很有帮助,因为这允许他们从 “连接卷” 对话框中预先填充的列表中选择一个实例。但是,这也会允许用户在控制台的 Instances 页面上查看所有实例,因此,您可以省略此操作。
在第一条语句中,需要 ec2:DescribeAvailabilityZones
操作以确保用户可以在创建卷时选择可用区。
用户无法标记其创建的卷 (卷创建期间或之后)。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "ec2:DescribeAvailabilityZones", "ec2:CreateVolume", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:region:111122223333:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "test" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:region:111122223333:volume/*" } ] }
允许用户使用快照
以下是(卷point-in-time快照)和 CreateSnapshot
CreateSnapshots
(多EBS卷快照)的策略示例。
示例:创建快照
以下政策允许客户使用该CreateSnapshotAPI操作。仅当卷已加密并且卷大小不超过 20 GiB 时,客户才能创建快照。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" }, { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:
account-id
:volume/*", "Condition":{ "NumericLessThan":{ "ec2:VolumeSize":"20" }, "Bool":{ "ec2:Encrypted":"true" } } } ] }
示例:创建快照
以下政策允许客户使用该CreateSnapshotsAPI操作。只有当实例上的所有卷均为类型时,客户才能创建快照GP2。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":[ "arn:aws:ec2:us-east-1::snapshot/*", "arn:aws:ec2:*:*:instance/*" ] }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:*:volume/*", "Condition":{ "StringLikeIfExists":{ "ec2:VolumeType":"gp2" } } } ] }
示例:创建具有标签的快照
下面的策略包含 aws:RequestTag
条件键,该条件键要求客户将标签 costcenter=115
和 stack=prod
应用于任何新快照。如果用户不传递这些特定标签,或者根本不指定任何标签,则请求失败。
对于应用标签的资源创建操作,客户还必须具有使用 CreateTags
操作的权限。第三个语句使用 ec2:CreateAction
条件键使客户只能在 CreateSnapshot
上下文中创建标签。客户无法标记现有卷或任何其他资源。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:
account-id
:volume/*" }, { "Sid":"AllowCreateTaggedSnapshots", "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/costcenter":"115", "aws:RequestTag/stack":"prod" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "ec2:CreateAction":"CreateSnapshot" } } } ] }
示例:创建带有标签的多卷快照
下面的策略包含 aws:RequestTag
条件键,该条件键要求客户在创建多卷快照集时应用标签 costcenter=115
和 stack=prod
。如果用户不传递这些特定标签,或者根本不指定任何标签,则请求失败。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":[ "arn:aws:ec2:us-east-1::snapshot/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ] }, { "Sid":"AllowCreateTaggedSnapshots", "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/costcenter":"115", "aws:RequestTag/stack":"prod" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "ec2:CreateAction":"CreateSnapshots" } } } ] }
下面的策略允许客户创建快照而无需指定标签。仅在 CreateTags
或 CreateSnapshot
请求中指定标签的情况下,系统才会评估 CreateSnapshots
操作。可以在请求中省略标签。如果指定一个标签,则该标签必须是 purpose=test
。请求中不允许使用任何其他标签。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/purpose":"test", "ec2:CreateAction":"CreateSnapshot" }, "ForAllValues:StringEquals":{ "aws:TagKeys":"purpose" } } } ] }
下面的策略允许客户创建多卷快照集而无需指定标签。仅在 CreateTags
或 CreateSnapshot
请求中指定标签的情况下,系统才会评估 CreateSnapshots
操作。可以在请求中省略标签。如果指定一个标签,则该标签必须是 purpose=test
。请求中不允许使用任何其他标签。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/purpose":"test", "ec2:CreateAction":"CreateSnapshots" }, "ForAllValues:StringEquals":{ "aws:TagKeys":"purpose" } } } ] }
以下策略仅允许在以下情况下创建快照:源卷已使用客户的 User:username
进行标记,并且快照本身已使用 Environment:Dev
和 User:username
进行标记。客户可向快照添加其他标签。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:
account-id
:volume/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/Environment":"Dev", "aws:RequestTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" } ] }
CreateSnapshots
的以下策略仅允许在以下情况下创建快照:源卷已使用客户的 User:username
进行标记,并且快照本身已使用 Environment:Dev
和 User:username
进行标记。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:*:instance/*", }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:
account-id
:volume/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/Environment":"Dev", "aws:RequestTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" } ] }
以下策略仅允许在以下情况下删除快照:快照已使用客户的 User:username 进行标记。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:DeleteSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/User":"${aws:username}" } } } ] }
以下策略允许客户创建快照,但在要创建的快照具有标签键 value=stack
时拒绝操作。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshot", "ec2:CreateTags" ], "Resource":"*" }, { "Effect":"Deny", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "ForAnyValue:StringEquals":{ "aws:TagKeys":"stack" } } } ] }
以下策略允许客户创建快照,但在要创建的快照具有标签键 value=stack
时拒绝操作。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshots", "ec2:CreateTags" ], "Resource":"*" }, { "Effect":"Deny", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "ForAnyValue:StringEquals":{ "aws:TagKeys":"stack" } } } ] }
以下策略允许您将多个操作整合到单个策略中。您只能在快照在区域 us-east-1
中创建时创建快照(在 CreateSnapshots
的上下文稿中)。您只能在快照正在区域 CreateSnapshots
中创建时且实例类型为 us-east-1
时创建快照(在 t2*
的上下文中)。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshots", "ec2:CreateSnapshot", "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:snapshot/*", "arn:aws:ec2:*:*:volume/*" ], "Condition":{ "StringEqualsIgnoreCase": { "ec2:Region": "us-east-1" }, "StringLikeIfExists": { "ec2:InstanceType": ["t2.*"] } } } ] }
示例:复制快照
为CopySnapshot操作指定的资源级权限仅适用于新快照。无法为源快照指定资源级权限。
只有在使用标签键 purpose
和标签值 production
(purpose=production
) 创建新快照时,以下示例策略才允许委托人复制快照。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCopySnapshotWithTags", "Effect": "Allow", "Action": "ec2:CopySnapshot", "Resource": "arn:aws:ec2:*:
account-id
:snapshot/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "production" } } } ] }
示例:修改快照的权限设置
以下策略仅允许在快照标有(其中)的情况下修改快照 User:
username
username
是客户的 Amazon 账户用户名。如果未满足此条件,则请求将失败。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:ModifySnapshotAttribute", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/user-name":"${aws:
username
}" } } } ] }