本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EBS 的 IAM 政策範例
根據預設,使用者和角色沒有建立或修改 Amazon EBS 資源的許可。他們也無法使用 AWS Management Console、 AWS Command Line Interface (AWS CLI) 或 AWS API 來執行任務。若要授予使用者對其所需資源執行動作的許可,IAM 管理員可以建立 IAM 政策。然後,管理員可以將 IAM 政策新增至角色,使用者便能擔任這些角色。
若要了解如何使用這些範例 JSON 政策文件建立 IAM 身分型政策,請參閱《IAM 使用者指南》中的建立 IAM 政策。
政策最佳實務
身分型政策會判斷您帳戶中的某個人員是否可以建立、存取或刪除 Amazon EBS 資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時,請遵循下列準則及建議事項:
-
開始使用 AWS 受管政策並轉向最低權限許可 – 若要開始將許可授予您的使用者和工作負載,請使用將許可授予許多常見使用案例的 AWS 受管政策。它們可在您的 中使用 AWS 帳戶。我們建議您定義特定於使用案例 AWS 的客戶受管政策,以進一步減少許可。如需更多資訊,請參閱 IAM 使用者指南中的 AWS 受管政策或任務職能的AWS 受管政策。
-
套用最低權限許可 – 設定 IAM 政策的許可時,請僅授予執行任務所需的許可。為實現此目的,您可以定義在特定條件下可以對特定資源採取的動作,這也稱為最低權限許可。如需使用 IAM 套用許可的更多相關資訊,請參閱 IAM 使用者指南中的 IAM 中的政策和許可。
-
使用 IAM 政策中的條件進一步限制存取權 – 您可以將條件新增至政策,以限制動作和資源的存取。例如,您可以撰寫政策條件,指定必須使用 SSL 傳送所有請求。如果透過特定 例如 使用服務動作 AWS 服務,您也可以使用條件來授予其存取權 AWS CloudFormation。如需詳細資訊,請參閱 IAM 使用者指南中的 IAM JSON 政策元素:條件。
-
使用 IAM Access Analyzer 驗證 IAM 政策,確保許可安全且可正常運作 – IAM Access Analyzer 驗證新政策和現有政策,確保這些政策遵從 IAM 政策語言 (JSON) 和 IAM 最佳實務。IAM Access Analyzer 提供 100 多項政策檢查及切實可行的建議,可協助您撰寫安全且實用的政策。如需詳細資訊,請參閱《IAM 使用者指南》中的使用 IAM Access Analyzer 驗證政策。
-
需要多重要素驗證 (MFA) – 如果您的案例需要 IAM 使用者或 中的根使用者 AWS 帳戶,請開啟 MFA 以提高安全性。如需在呼叫 API 操作時請求 MFA,請將 MFA 條件新增至您的政策。如需詳細資訊,請參閱《IAM 使用者指南》https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html中的透過 MFA 的安全 API 存取。
如需 IAM 中最佳實務的相關資訊,請參閱 IAM 使用者指南中的 IAM 安全最佳實務。
允許使用者使用 Amazon EBS 主控台
若要存取 Amazon Elastic Block Store 主控台,您必須擁有一組最低許可。這些許可必須允許您列出和檢視 中 Amazon EBS 資源的詳細資訊 AWS 帳戶。如果您建立比最基本必要許可更嚴格的身分型政策,則對於具有該政策的實體 (使用者或角色) 而言,主控台就無法如預期運作。
對於僅呼叫 AWS CLI 或 AWS API 的使用者,您不需要允許最低主控台許可。反之,只需允許存取符合他們嘗試執行之 API 操作的動作就可以了。
為了確保使用者和角色仍然可以使用 Amazon EBS 主控台,也請將 Amazon EBS ConsoleAccess
或ReadOnly
AWS 受管政策連接到實體。如需詳細資訊,請參閱《IAM 使用者指南》中的新增許可到使用者。
允許使用者檢視他們自己的許可
此範例會示範如何建立政策,允許 IAM 使用者檢視附加到他們使用者身分的內嵌及受管政策。此政策包含在主控台或使用 或 AWS CLI AWS 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
(使用者名稱作為值) 的執行個體中連接或分離磁碟區。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "arn:aws:ec2:us-east-1:111122223333
:instance/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "dev"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "arn:aws:ec2:us-east-1:111122223333
:volume/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/volume_user": "${aws:username}"
}
}
}
]
}
範例:建立磁碟區
下列政策允許使用者使用 CreateVolume API 動作。使用者只有在磁碟區已加密且磁碟區大小小於 20 GiB 時,才可建立磁碟區。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateVolume"
],
"Resource": "arn:aws:ec2:us-east-1:111122223333
:volume/*",
"Condition": {
"NumericLessThan": {
"ec2:VolumeSize": "20"
},
"Bool": {
"ec2:Encrypted": "true"
}
}
}
]
}
下列政策包含 aws:RequestTag
條件鍵,需要使用者為其建立的所有磁碟區套用標籤 costcenter=115
和 stack=prod
。如果使用者未傳遞這些特定標籤,或完全未指定標籤,請求會失敗。
針對套用標籤的資源建立動作,使用者也必須具有使用 CreateTags
動作的許可。第二個陳述式使用 ec2:CreateAction
條件鍵限制使用者在 CreateVolume
的條件下才可建立標籤。使用者無法為現有磁碟區或任何其他資源套用標籤。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateTaggedVolumes",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:us-east-1:111122223333
:volume/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/costcenter": "115",
"aws:RequestTag/stack": "prod"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1:111122223333
:volume/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction": "CreateVolume"
}
}
}
]
}
下列政策允許使用者建立磁碟區,但不需指定標籤。只有在 CreateTags
請求中指定了標籤時,才評估 CreateVolume
動作。如果使用者未指定標籤,標籤必須是 purpose=test
。不允許在請求中指定其他標籤。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1:111122223333
: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
動作的許可,會很有幫助,因為此動作可讓使用者從 Attach Volume (連接磁碟區) 對話方塊中預先填入的清單,來選取執行個體。不過,此動作也會讓使用者在主控台中檢視 Instances (執行個體) 頁面上的所有執行個體,因此您可以略過這項動作。
在第一個陳述式中,必須包含 ec2:DescribeAvailabilityZones
動作,以確保使用者能夠在建立磁碟區時選取可用區域。
使用者不能標記自己所建立的磁碟區 (無論是在建立磁碟區時或之後)。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowDescribeOperations",
"Effect": "Allow",
"Action": [
"ec2:DescribeVolumes",
"ec2:DescribeAvailabilityZones",
"ec2:CreateVolume",
"ec2:DescribeInstances"
],
"Resource": [
"arn:aws:ec2:*::volume/*",
"arn:aws:ec2:*::instance/*",
"arn:aws:ec2:*::availability-zone/*"
]
},
{
"Sid": "AllowVolumeAttachDetachWithCondition",
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "arn:aws:ec2:*:111122223333
:instance/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/purpose": "test"
}
}
},
{
"Sid": "AllowVolumeAttachDetach",
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "arn:aws:ec2:*:111122223333
:volume/*"
}
]
}
允許使用者使用快照
下列是 CreateSnapshot
(EBS 磁碟區的時間點快照) 與 CreateSnapshots
(多磁碟區快照) 的範例政策。
範例:建立快照
下列政策允許客戶使用 CreateSnapshot API 動作。只有在磁碟區已加密且磁碟區大小小於 20 GiB 時,客戶才可建立快照。
- JSON
-
-
{
"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:111122223333
:volume/*",
"Condition": {
"NumericLessThan": {
"ec2:VolumeSize": "20"
},
"Bool": {
"ec2:Encrypted": "true"
}
}
}
]
}
範例:建立快照
下列政策允許客戶使用 CreateSnapshot API 動作。只有當執行個體上的所有磁碟區都是 GP2 類型時,客戶才可以建立快照。
- JSON
-
-
{
"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
的條件下才可建立標籤。客戶無法為現有磁碟區或任何其他資源套用標籤。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:CreateSnapshot",
"Resource": "arn:aws:ec2:us-east-1:111122223333
: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
。如果使用者未傳遞這些特定標籤,或完全未指定標籤,請求會失敗。
- JSON
-
-
{
"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
或 CreateSnapshots
請求中指定了標籤時,才評估 CreateSnapshot
動作。請求中可以省略標籤。如果指定標籤,標籤必須是 purpose=test
。不允許在請求中指定其他標籤。
- JSON
-
-
{
"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
或 CreateSnapshots
請求中指定了標籤時,才評估 CreateSnapshot
動作。請求中可以省略標籤。如果指定標籤,標籤必須是 purpose=test
。不允許在請求中指定其他標籤。
- JSON
-
-
{
"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
標籤時,才允許建立快照。客戶可以新增其他標籤至快照。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateSnapshotWithUserTag",
"Effect": "Allow",
"Action": "ec2:CreateSnapshot",
"Resource": "arn:aws:ec2:*:account-id
:volume/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/User": "${aws:john_doe}"
}
}
},
{
"Sid": "AllowCreateSnapshotWithTags",
"Effect": "Allow",
"Action": "ec2:CreateSnapshot",
"Resource": "arn:aws:ec2:*::snapshot/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/Environment": "Dev",
"aws:RequestTag/User": "${aws:john_doe}"
}
}
},
{
"Sid": "AllowCreateTagsOnSnapshots",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "arn:aws:ec2:*::snapshot/*"
}
]
}
下列關於 CreateSnapshots
的政策只有在來源磁碟區具有客戶的 User:username
標籤,而且快照本身也具有 Environment:Dev
和 User:username
標籤時,才允許建立快照。
- JSON
-
-
{
"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:111122223333
: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 標籤時,才允許刪除快照。
- JSON
-
-
{
"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
,則會拒絕此動作。
- JSON
-
-
{
"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
,則會拒絕此動作。
- JSON
-
-
{
"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
的情況下)。只有在區域 us-east-1
中建立快照且執行個體類型是 t2*
時,您才可以建立快照 (在 CreateSnapshots
的情況下)。
- JSON
-
-
{
"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
) 時才適用。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCopySnapshotWithTags",
"Effect": "Allow",
"Action": "ec2:CopySnapshot",
"Resource": "arn:aws:ec2:*:111122223333
:snapshot/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/purpose": "production"
}
}
}
]
}
下列範例政策允許主體僅在來源快照為 AWS 帳戶 所擁有時複製快照123456789012
。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCopySnapshotByOwner",
"Effect": "Allow",
"Action": "ec2:CopySnapshot",
"Resource": "arn:aws:ec2:*:account-id
:snapshot/*",
"Condition": {
"StringEquals": {
"ec2:Owner": "123456789012"
}
}
}
]
}
下列範例政策允許主體僅在使用 的標籤索引鍵建立來源快照時複製快照CSISnapshotName
。
{
"Effect": "Allow",
"Action": "ec2:CopySnapshot",
"Resource": "arn:aws:ec2:*::snapshot/${*}",
"Condition": {
"StringLike": {
"aws:RequestTag/CSISnapshotName": "*"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:CopySnapshot",
"Resource": "arn:aws:ec2:*::snapshot/snap-*"
}
下列政策只有在快照加上 標記時,才允許修改快照User:username
,其中使用者名稱
是客戶的 AWS 帳戶使用者名稱。如果未符合此條件,請求會失敗。
- JSON
-
-
{
"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
}"
}
}
}
]
}