Amazon Aurora 以身分為基礎的政策範例 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon Aurora 以身分為基礎的政策範例

根據預設,許可集和角色不具備建立或修改 Aurora 資源的許可。他們也無法使用 AWS Management Console AWS CLI、或 AWS API 執行工作。IAM 管理員必須建立 IAM 政策,授予許可集和角色在指定資源上執行特定 API 操作的所需許可。管理員接著必須將這些政策連接至需要這些許可的許可集或角色。

若要了解如何使用這些範例 JSON 政策文件建立 IAM 身分型政策,請參閱《IAM 使用者指南》中的在 JSON 標籤上建立政策

政策最佳實務

身分型政策會判斷您帳戶中的某個人員是否可以建立、存取或刪除 Amazon RDS 資源。這些動作可能會讓您的 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 使用者指南中的設定 MFA 保護的 API 存取

如需 IAM 中最佳實務的相關資訊,請參閱 IAM 使用者指南中的 IAM 安全最佳實務

使用 Aurora 主控台

若要存取 Amazon Aurora 主控台,您必須擁有最低的一組許可。這些許可必須允許您列出和檢視有關 Aurora 資源的詳細資訊 AWS 帳戶。如果您建立比最基本必要許可更嚴格的身分型政策,則對於具有該政策的實體 (使用者或角色) 而言,主控台就無法如預期運作。

您不需要為僅對 AWS CLI 或 AWS API 進行呼叫的使用者允許最低主控台權限。反之,只需允許存取符合您嘗試執行之 API 作業的動作就可以了。

為確保這些實體仍然可以使用 Aurora 主控台,請將下列 AWS 受管政策附加到實體。

AmazonRDSReadOnlyAccess

如需詳細資訊,請參閱《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": "*" } ] }

允許使用者在 AWS 帳戶中建立資料庫執行個體

以下是範例政策,允許具有 ID 123456789012 的使用者為您的 AWS 帳戶建立資料庫執行個體。此政策需要新資料庫執行個體的名稱以 test 開頭。新的資料庫執行個體也須使用 MySQL 資料庫引擎和 db.t2.micro 資料庫執行個體類別。此外,新的資料庫執行個體還須使用選項群組,以及以 default 開頭的資料庫參數群組,而且它還須使用 default 子網路群組。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateDBInstanceOnly", "Effect": "Allow", "Action": [ "rds:CreateDBInstance" ], "Resource": [ "arn:aws:rds:*:123456789012:db:test*", "arn:aws:rds:*:123456789012:og:default*", "arn:aws:rds:*:123456789012:pg:default*", "arn:aws:rds:*:123456789012:subgrp:default" ], "Condition": { "StringEquals": { "rds:DatabaseEngine": "mysql", "rds:DatabaseClass": "db.t2.micro" } } } ] }

政策包括單一陳述式,指定 使用者的下列許可:

  • 此原則可讓使用者使用 CreateDbInstance API 作業來建立資料庫執行個體 (這也適用於建 AWS CLI 的 DB 執行個體命令和)。 AWS Management Console

  • Resource 元素指定使用者可對資源或搭配資源執行動作。您可以使用 Amazon Resource Name (ARN) 來指定資源。此 ARN 包括資源所屬的服務名稱 (rds)、「 AWS 區域」(*表示此範例中的任何區域)、 AWS 帳號 (在此範例中123456789012是帳號) 以及資源類型。如需建立 ARN 的詳細資訊,請參閱在 Amazon RDS 中使用 Amazon Resource Name (ARN)

    範例中的 Resource 元素對使用者的資源指定下列政策限制:

    • 新資料庫執行個體的資料庫執行個體識別符必須以 test開頭 (例如,testCustomerData1test-region2-data)。

    • 新資料庫執行個體的選項群組必須以default 開頭。

    • 新資料庫執行個體的資料庫參數群組必須以default 開頭。

    • 新資料庫執行個體的子網路群組必須是default 子網路群組。

  • Condition 元素指定資料庫引擎必須是 MySQL,而且資料庫執行個體類別必須是 db.t2.microCondition 元素指定政策應該生效時的條件。您可以使用 Condition 元素來新增其他許可或限制。如需指定條件的詳細資訊,請參閱Aurora 的政策條件金鑰。此範例指定 rds:DatabaseEnginerds:DatabaseClass 條件。如需 rds:DatabaseEngine 有效條件值的相關資訊,請參閱 CreateDBInstance 中的 Engine 參數下的清單。如需 rds:DatabaseClass 的有效條件值的相關資訊,請參閱 資料庫執行個體類別的支援資料庫引擎

此政策不指定 Principal 元素,因為您不會在以身分為基礎的政策中,指定取得許可的主體。當您將政策連接至使用者時,這名使用者即為隱含主體。當您將許可政策連接至 IAM 角色,該角色的信任政策中所識別的主體即取得許可。

若要查看 Aurora 動作的清單,請參閱服務授權參考中的 Amazon RDS 定義的動作

使用主控台所需的許可

針對使用主控台的使用者,該使用者必須擁有一組符合最低限制的許可。這些許可允許使用者描述其 AWS 帳戶的 Amazon Aurora 資源,並提供其他相關資訊,包括 Amazon EC2 安全性和網路資訊。

如果您建立比最基本必要許可更嚴格的 IAM 政策,則對於採取該 IAM 政策的使用者而言,主控台就無法如預期運作。為確保這些使用者仍可使用主控台,也請將 AmazonRDSReadOnlyAccess 受管政策連接至使用者,如使用政策管理存取權所述。

對於僅呼叫 AWS CLI 或 Amazon RDS API 的使用者,您不需要允許其最基本主控台許可。

下列政策授與根 AWS 帳戶的所有 Aurora 資源的完整存取權:

AmazonRDSFullAccess

允許使用者對任何 RDS 資源執行任何描述動作

下列許可政策會授予使用者執行開頭為 Describe 之所有動作的許可。這些動作會顯示 RDS 資源 (如資料庫執行個體) 的相關資訊。Resource 元素中的萬用字元 (*) 表示可對帳戶擁有的所有 Amazon Aurora 資源執行動作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRDSDescribe", "Effect": "Allow", "Action": "rds:Describe*", "Resource": "*" } ] }

允許使用者建立可使用指定資料庫參數群組和子網路群組的資料庫執行個體

以下許可政策授予許可,以允許使用者只能建立一個必須使用 mydbpg 資料庫參數群組和 mydbsubnetgroup 資料庫子網路群組的資料庫執行個體。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "rds:CreateDBInstance", "Resource": [ "arn:aws:rds:*:*:pg:mydbpg", "arn:aws:rds:*:*:subgrp:mydbsubnetgroup" ] } ] }

利用具有兩個不同值的特定標籤,對資源上的動作授予許可

您可以在身分類型政策中使用條件,根據標籤來控制存取 Aurora 資源。下列政策允許在 stage 標籤設為 developmenttest 的資料庫執行個體上執行 CreateDBSnapshot API 操作的許可。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowAnySnapshotName", "Effect":"Allow", "Action":[ "rds:CreateDBSnapshot" ], "Resource":"arn:aws:rds:*:123456789012:snapshot:*" }, { "Sid":"AllowDevTestToCreateSnapshot", "Effect":"Allow", "Action":[ "rds:CreateDBSnapshot" ], "Resource":"arn:aws:rds:*:123456789012:db:*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }

下列政策允許在 stage 標籤設為 developmenttest 的資料庫執行個體上執行 ModifyDBInstance API 操作的許可。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowChangingParameterOptionSecurityGroups", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance" ], "Resource": [ "arn:aws:rds:*:123456789012:pg:*", "arn:aws:rds:*:123456789012:secgrp:*", "arn:aws:rds:*:123456789012:og:*" ] }, { "Sid":"AllowDevTestToModifyInstance", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance" ], "Resource":"arn:aws:rds:*:123456789012:db:*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }

防止使用者刪除資料庫執行個體

以下許可政策授予許可,以防止使用者刪除特定的資料庫執行個體。例如,您可能想拒絕給予任何非管理員使用者刪除生產資料庫執行個體的能力。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyDelete1", "Effect": "Deny", "Action": "rds:DeleteDBInstance", "Resource": "arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance" } ] }

拒絕對資源的所有存取

您可以明確拒絕對資源的存取權。拒絕政策優先於允許政策。下列政策明確拒絕使用者管理資源的能力:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "rds:*", "Resource": "arn:aws:rds:us-east-1:123456789012:db:mydb" } ] }

範例政策:使用條件金鑰

以下是如何在 Amazon Aurora IAM 許可政策中使用條件金鑰的範例。

範例 1:授予許可來建立一個使用特定資料庫引擎且不是多個可用區的資料庫執行個體

下列政策會使用 RDS 條件金鑰,並允許使用者只建立使用 MySQL 資料庫引擎,而不使用 MultiAZ 的資料庫執行個體。Condition 元素表示資料庫引擎是 MySQL 的需求。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMySQLCreate", "Effect": "Allow", "Action": "rds:CreateDBInstance", "Resource": "*", "Condition": { "StringEquals": { "rds:DatabaseEngine": "mysql" }, "Bool": { "rds:MultiAz": false } } } ] }

範例 2:明確拒絕許可,不得為特定資料庫執行個體類別建立資料庫執行個體,以及不得建立使用佈建 IOPS 的資料庫執行個體

下列政策明確拒絕許可,不得建立使用資料庫執行個體類別 r3.8xlargem4.10xlarge 的資料庫執行個體,因為它們是最大且最昂貴的資料庫執行個體類別。此政策也會防止使用者建立使用佈建 IOPS 的資料庫執行個體,因為它們會產生額外的成本。

明確拒絕許可會取代任何其他已授予的許可。這確保身分不會意外取得您從未想要授予的許可。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyLargeCreate", "Effect": "Deny", "Action": "rds:CreateDBInstance", "Resource": "*", "Condition": { "StringEquals": { "rds:DatabaseClass": [ "db.r3.8xlarge", "db.m4.10xlarge" ] } } }, { "Sid": "DenyPIOPSCreate", "Effect": "Deny", "Action": "rds:CreateDBInstance", "Resource": "*", "Condition": { "NumericNotEquals": { "rds:Piops": "0" } } } ] }

範例 3:限制可用來標記資源的一組標籤金鑰和值

下列政策使用 RDS 條件索引鍵,並允許將索引鍵為 stage 且值為 testqaproduction 的標籤新增給資源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource": "*", "Condition": { "streq": { "rds:req-tag/stage": [ "test", "qa", "production" ] } } } ] }

指定條件:使用自訂標籤

Amazon Aurora 支援在 IAM 政策中使用自訂標籤來指定條件。

例如,假設您將值為 environmentbetastaging 等等的 production 標籤新增至資料庫執行個體。如果這樣做,您就可以建立政策,根據 environment 標籤值限制某些資料庫執行個體的使用者。

注意

自訂標籤識別符會區分大小寫。

下表列出您可以在 Condition 元素中使用的 RDS 標籤識別符。

RDS 標籤識別符 適用對象
db-tag 資料庫執行個體,包括讀取複本
snapshot-tag 資料庫快照
ri-tag 預留資料庫執行個體
og-tag 資料庫選項群組
pg-tag 資料庫參數群組
subgrp-tag 資料庫子網路群組
es-tag 事件訂閱
cluster-tag 資料庫叢集
cluster-pg-tag 資料庫叢集參數群組
cluster-snapshot-tag 資料庫叢集快照

自訂標籤條件的語法如下:

"Condition":{"StringEquals":{"rds:rds-tag-identifier/tag-name": ["value"]} }

例如,下列 Condition 元素會套用至標籤名稱為 environment 且標籤值為 production 的資料庫執行個體。

"Condition":{"StringEquals":{"rds:db-tag/environment": ["production"]} }

如需建立標籤的相關資訊,請參閱標記 Amazon RDS 資源

重要

如果您使用標記功能來管理 RDS 資源的存取,則我們建議您安全存取 RDS 資源的標籤。您可以建立 AddTagsToResourceRemoveTagsFromResource 動作的政策,來管理標籤的存取。例如,下列政策會拒絕使用者可對所有資源新增或移除標籤的能力。然後,您可以建立政策來允許特定使用者新增或刪除標籤。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyTagUpdates", "Effect":"Deny", "Action":[ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource":"*" } ] }

若要查看 Aurora 動作的清單,請參閱服務授權參考中的 Amazon RDS 定義的動作

範例政策:使用自訂標籤

以下是如何在 Amazon Aurora IAM 許可政策中使用自訂標籤的範例。如需將標籤新增至 Amazon Aurora 資源的詳細資訊,請參閱在 Amazon RDS 中使用 Amazon Resource Name (ARN)

注意

所有範例都使用 us-west-2 區域,且其中的帳戶 ID 皆為虛構。

範例 1:利用具有兩個不同值的特定標籤,對資源上的動作授予許可

下列政策允許在 stage 標籤設為 developmenttest 的資料庫執行個體上執行 CreateDBSnapshot API 操作的許可。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowAnySnapshotName", "Effect":"Allow", "Action":[ "rds:CreateDBSnapshot" ], "Resource":"arn:aws:rds:*:123456789012:snapshot:*" }, { "Sid":"AllowDevTestToCreateSnapshot", "Effect":"Allow", "Action":[ "rds:CreateDBSnapshot" ], "Resource":"arn:aws:rds:*:123456789012:db:*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }

下列政策允許在 stage 標籤設為 developmenttest 的資料庫執行個體上執行 ModifyDBInstance API 操作的許可。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowChangingParameterOptionSecurityGroups", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance" ], "Resource":" [ "arn:aws:rds:*:123456789012:pg:*", "arn:aws:rds:*:123456789012:secgrp:*", "arn:aws:rds:*:123456789012:og:*" ] }, { "Sid":"AllowDevTestToModifyInstance", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance" ], "Resource":"arn:aws:rds:*:123456789012:db:*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }

範例 2:明確拒絕許可,不得建立一個使用所指定之資料庫參數群組的資料庫執行個體

下列政策明確拒絕許可,不得建立一個使用資料庫參數群組與特定標籤值搭配的資料庫執行個體。如果您需要在建立資料庫執行個體時,一律使用特定客戶建立的資料庫參數群組,則可能會套用此政策。使用 Deny 的政策最常用來限制更廣泛政策所授予的存取。

明確拒絕許可會取代任何其他已授予的許可。這確保身分不會意外取得您從未想要授予的許可。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyProductionCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"arn:aws:rds:*:123456789012:pg:*", "Condition":{ "StringEquals":{ "rds:pg-tag/usage":"prod" } } } ] }

範例 3:對資料庫執行個體上的動作授予許可,而此資料庫執行個體的執行個體名稱字首會加上使用者名稱

下列政策允許在資料庫執行個體上呼叫任何 API (但 AddTagsToResourceRemoveTagsFromResource 除外) 的許可,而此資料庫執行個體具有字首會加上使用者名稱的資料庫執行個體名稱,以及具有稱為 stage 等於 devo 的標籤,或沒有稱為 stage 的標籤。

政策中的 Resource 一行會依其 Amazon Resource Name (ARN) 識別資源。如需使用 ARN 與 Amazon Aurora 資源的詳細資訊,請參閱在 Amazon RDS 中使用 Amazon Resource Name (ARN)

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowFullDevAccessNoTags", "Effect":"Allow", "NotAction":[ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource":"arn:aws:rds:*:123456789012:db:${aws:username}*", "Condition":{ "StringEqualsIfExists":{ "rds:db-tag/stage":"devo" } } } ] }