Amazon QLDB 以身分識別為基礎的政策範例 - Amazon Quantum Ledger Database (Amazon QLDB)

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

Amazon QLDB 以身分識別為基礎的政策範例

根據預設,使用者和角色沒有建立或修改 QLDB 資源的權限。他們也無法使用 AWS Management Console、 AWS Command Line Interface (AWS CLI) 或 AWS API 來執行工作。若要授予使用者對其所需資源執行動作的許可,IAM 管理員可以建立 IAM 政策。然後,管理員可以將 IAM 政策新增至角色,使用者便能擔任這些角色。

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

如需有關 QLDB 定義的動作和資源類型的詳細資訊,包括每種資源類型的 ARN 格式,請參閱服務授權參考中的 Amazon QLDB 的動作、資源和條件金鑰

政策最佳實務

以身分識別為基礎的原則會決定使用者是否可以建立、存取或刪除您帳戶中的 QLDB 資源。這些動作可能會讓您的 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 安全最佳實務

使用 QLDB 主控台

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

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

若要確保使用者和角色具有 QLDB 主控台及其所有功能的完整存取權,請將下列 AWS 受管理的原則附加至實體。如需詳細資訊AWS Amazon QLDB 的受管政策,請參閱 IAM 使用者指南中的和向使用者新增許可。

AmazonQLDBConsoleFullAccess

查詢記錄權限

除了 QLDB 權限之外,某些主控台功能還需要資料庫查詢中繼資料服務 (服務前置詞:dbqms) 的權限。這是一項僅限內部使用的服務,可在 QLDB 和其他主控台查詢編輯器上管理您最近和儲存的查詢。 AWS 服務如需 DBQMS API 動作的完整清單,請參閱服務授權參考中的資料庫查詢中繼資料服

要允許查詢歷史記錄權限,您可以使用 AWS 管理策略 Amazon ConsoleFullAccess QLDB。此原則會使用萬用字元 (dbqms:*) 來允許所有資源的所有 DBQMS 動作。

或者,您可以建立自訂 IAM 政策,並包含下列 DBQMS 動作。QLDB 主控台上的 PartiQL 查詢編輯器需要使用這些動作進行查詢歷程記錄功能的權限。

dbqms:CreateFavoriteQuery dbqms:CreateQueryHistory dbqms:DeleteFavoriteQueries dbqms:DeleteQueryHistory dbqms:DescribeFavoriteQueries dbqms:DescribeQueryHistory dbqms:UpdateFavoriteQuery

無查詢歷史記錄的完整訪問控制台

若要允許在沒有任何查詢歷程記錄許可的情況下完整存取 QLDB 主控台,您可以建立排除所有 DB QMS 動作的自訂 IAM 政策。例如,下列原則文件允許 AWS 受管理原則 AmazonQldb 所授與的相同權限ConsoleFullAccess,但以服務前置詞開頭的動作除外dbqms

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "qldb:CreateLedger", "qldb:UpdateLedger", "qldb:UpdateLedgerPermissionsMode", "qldb:DeleteLedger", "qldb:ListLedgers", "qldb:DescribeLedger", "qldb:ExportJournalToS3", "qldb:ListJournalS3Exports", "qldb:ListJournalS3ExportsForLedger", "qldb:DescribeJournalS3Export", "qldb:CancelJournalKinesisStream", "qldb:DescribeJournalKinesisStream", "qldb:ListJournalKinesisStreamsForLedger", "qldb:StreamJournalToKinesis", "qldb:GetBlock", "qldb:GetDigest", "qldb:GetRevision", "qldb:TagResource", "qldb:UntagResource", "qldb:ListTagsForResource", "qldb:SendCommand", "qldb:ExecuteStatement", "qldb:ShowCatalog", "qldb:InsertSampleData", "qldb:PartiQLCreateIndex", "qldb:PartiQLDropIndex", "qldb:PartiQLCreateTable", "qldb:PartiQLDropTable", "qldb:PartiQLUndropTable", "qldb:PartiQLDelete", "qldb:PartiQLInsert", "qldb:PartiQLUpdate", "qldb:PartiQLSelect", "qldb:PartiQLHistoryFunction" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "kinesis:ListStreams", "kinesis:DescribeStream" ], "Effect": "Allow", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "qldb.amazonaws.com" } } } ] }

允許使用者檢視他們自己的許可

此範例會示範如何建立政策,允許 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": "*" } ] }

執行資料交易

若要透過在分類帳上執行 PartiQL 陳述式與 QLDB 交易資料 API (QLDB 工作階段) 互動,您必須授與 API 動作的權限。SendCommand下列 JSON 文件是政策範例,該政策僅授與分類帳上 SendCommand API 動作的權限myExampleLedger

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBSendCommandPermission", "Effect": "Allow", "Action": "qldb:SendCommand", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" } ] }

如果myExampleLedger使用ALLOW_ALL權限模式,則此原則會授與在分類帳中的任何資料表上執行所有 PartiQL 命令的權限。

您也可以使用 AWS 受管理的政策來授與所有 QLDB 資源的完整存取權。如需詳細資訊,請參閱 AWS Amazon QLDB 的受管政策

PartiQL 動作和資料表資源的標準權限

對於STANDARD許可模式下的分類帳,您可以參考以下 IAM 政策文件,作為授予適當 PartiQL 許可的範例。如需每個 PartiQL 命令所需權限的清單,請參閱. PartiQL 參考

完全存取所有動作

下列 JSON 政策文件授與在myExampleLedger中的所有資料表上使用所有 PartiQL 命令的完整存取權。此原則產生的效果與使用分類帳的ALLOW_ALL權限模式相同。

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBSendCommandPermission", "Effect": "Allow", "Action": "qldb:SendCommand", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" }, { "Sid": "QLDBPartiQLFullPermissions", "Effect": "Allow", "Action": [ "qldb:PartiQLCreateIndex", "qldb:PartiQLDropIndex", "qldb:PartiQLCreateTable", "qldb:PartiQLDropTable", "qldb:PartiQLUndropTable", "qldb:PartiQLDelete", "qldb:PartiQLInsert", "qldb:PartiQLUpdate", "qldb:PartiQLRedact", "qldb:PartiQLSelect", "qldb:PartiQLHistoryFunction" ], "Resource": [ "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/table/*", "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/information_schema/user_tables" ] } ] }

根據表格標籤對所有動作的完整存取權

下列 JSON 政策文件使用以表格資源標籤為基礎的條件,以授與對中myExampleLedger的所有表格使用所有 PartiQL 命令的完整存取權。只有當資料表標籤environment具有值時,才會授與權限development

警告

這是使用萬用字元 (*) 允許所有 PartiQL 動作的範例,包括 QLDB 分類帳中所有資料表的管理和讀取/寫入作業。相反地,最佳做法是明確指定每個要授與的動作,以及只指定該使用者、角色或群組需要的項目。

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBSendCommandPermission", "Effect": "Allow", "Action": "qldb:SendCommand", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" }, { "Sid": "QLDBPartiQLFullPermissionsBasedOnTags", "Effect": "Allow", "Action": [ "qldb:PartiQL*" ], "Resource": [ "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/table/*", "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/information_schema/user_tables" ], "Condition": { "StringEquals": { "aws:ResourceTag/environment": "development" } } } ] }

讀/寫存取

下列 JSON 政策文件授與選取、插入、更新和刪除中所有資料表資料的權限myExampleLedger。此原則不會授與編輯資料或變更結構描述的權限,例如建立和刪除資料表和索引。

注意

UPDATE陳述式需要對正在修改之表格上的qldb:PartiQLUpdateqldb:PartiQLSelect動作的權限。當您執行UPDATE陳述式時,除了更新作業之外,它還會執行讀取作業。需要這兩種動作可確保只有被允許讀取表格內容的使用者才能獲得UPDATE權限。

同樣地,DELETE陳述式需要qldb:PartiQLDeleteqldb:PartiQLSelect動作的權限。

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBSendCommandPermission", "Effect": "Allow", "Action": "qldb:SendCommand", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" }, { "Sid": "QLDBPartiQLReadWritePermissions", "Effect": "Allow", "Action": [ "qldb:PartiQLDelete", "qldb:PartiQLInsert", "qldb:PartiQLUpdate", "qldb:PartiQLSelect", "qldb:PartiQLHistoryFunction" ], "Resource": [ "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/table/*", "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/information_schema/user_tables" ] } ] }

唯讀存取

下列 JSON 政策文件會授與中所有資料表的唯讀權限myExampleLedger。若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBSendCommandPermission", "Effect": "Allow", "Action": "qldb:SendCommand", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" }, { "Sid": "QLDBPartiQLReadOnlyPermissions", "Effect": "Allow", "Action": [ "qldb:PartiQLSelect", "qldb:PartiQLHistoryFunction" ], "Resource": [ "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/table/*", "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/information_schema/user_tables" ] } ] }

特定資料表的唯讀存取權

下列 JSON 政策文件授與中特定資料表的唯讀權限myExampleLedger。在此範例中,資料表 ID 為Au1EiThbt8s0z9wM26REZN

若要使用此原則,請在範例中以您自己的資訊取代 us-east-1123456789012 和 AU EiThbt 1 8 S0Z9W9WM26reZn。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBSendCommandPermission", "Effect": "Allow", "Action": "qldb:SendCommand", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" }, { "Sid": "QLDBPartiQLReadOnlyPermissionsOnTable", "Effect": "Allow", "Action": [ "qldb:PartiQLSelect", "qldb:PartiQLHistoryFunction" ], "Resource": [ "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/table/Au1EiThbt8s0z9wM26REZN" ] } ] }

允許存取建立資料表

下列 JSON 政策文件授與在中建立表格的權限myExampleLedger。此動qldb:PartiQLCreateTable作需要表格資源類型的權限。不過,當您執行CREATE TABLE陳述式時,新資料表的資料表識別碼並不知道。因此,授與qldb:PartiQLCreateTable權限的政策必須在資料表 ARN 中使用萬用字元 (*) 來指定資源。

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBSendCommandPermission", "Effect": "Allow", "Action": "qldb:SendCommand", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" }, { "Sid": "QLDBPartiQLCreateTablePermission", "Effect": "Allow", "Action": [ "qldb:PartiQLCreateTable" ], "Resource": [ "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/table/*" ] } ] }

允許根據要求標記建立資料表的存取權

下列 JSON 政策文件使用根據aws:RequestTag內容索引鍵的條件來授與在中建立表格的權限myExampleLedger。只有在要求標記environment具有值時,才會授與權限development。在建立表格時標記表格需要存取qldb:PartiQLCreateTableqldb:TagResource動作。若要瞭解如何在建立表格時標記表格,請參閱標籤表格

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBSendCommandPermission", "Effect": "Allow", "Action": "qldb:SendCommand", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" }, { "Sid": "QLDBPartiQLCreateTablePermission", "Effect": "Allow", "Action": [ "qldb:PartiQLCreateTable", "qldb:TagResource" ], "Resource": [ "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger/table/*" ], "Condition": { "StringEquals": { "aws:RequestTag/environment": "development" } } } ] }

將日誌匯出到 Amazon S3 儲存貯體

步驟 1:QLDB 日誌匯出權限

在下列範例中,您授與使用者對 QLDB 分類帳資源執行qldb:ExportJournalToS3動作的 AWS 帳戶 權限。您也授與許可,以便iam:PassRole對要傳遞至 QLDB 服務的 IAM 角色資源執行動作。所有分錄匯出請求都需要此功能。

若要使用此原則,請在範例中以您自己的資訊取代 us-east-1123456789012 和匯出匯出。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBJournalExportPermission", "Effect": "Allow", "Action": "qldb:ExportJournalToS3", "Resource": "arn:aws:qldb:us-east-1:123456789012:ledger/myExampleLedger" }, { "Sid": "IAMPassRolePermission", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/qldb-s3-export", "Condition": { "StringEquals": { "iam:PassedToService": "qldb.amazonaws.com" } } } ] }

步驟 2:Amazon S3 存儲桶許可

在下列範例中,您可以使用 IAM 角色授與 QLDB 存取權,以寫入其中一個 Amazon S3 儲存貯體。DOC-EXAMPLE-BUCKET所有 QLDB 分錄匯出也必須執行此動作。

除了授與s3:PutObject權限之外,原則還會s3:PutObjectAcl授與設定物件存取控制清單 (ACL) 權限的權限。

若要使用此政策,請將範例中的文件範例儲存貯體取代為您的 Amazon S3 儲存貯體名稱。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBJournalExportS3Permissions", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

然後,您可以將此許可政策附加到 QLDB 可假設存取 Amazon S3 儲存貯體的 IAM 角色。下列 JSON 文件是允許 QLDB 僅針對帳戶中任何 QLDB 資源採用 IAM 角色的信任政策範例。123456789012

若要使用此政策,請以您自己的資訊取代範例中的 us-east-11234567890 12。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "qldb.amazonaws.com" }, "Action": [ "sts:AssumeRole" ], "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:qldb:us-east-1:123456789012:*" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

將日誌串流至 Kinesis Data Streams

步驟 1:QLDB 日誌串流權限

在下列範例中,您授與使用者對分類帳中所有 QLDB 串流子資源執行qldb:StreamJournalToKinesis動作的 AWS 帳戶 權限。您也授與許可,以便iam:PassRole對要傳遞至 QLDB 服務的 IAM 角色資源執行動作。所有日誌串流請求都需有此許可。

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012 myExampleLedger,並在此範例中。qldb-kinesis-stream

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBJournalStreamPermission", "Effect": "Allow", "Action": "qldb:StreamJournalToKinesis", "Resource": "arn:aws:qldb:us-east-1:123456789012:stream/myExampleLedger/*" }, { "Sid": "IAMPassRolePermission", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/qldb-kinesis-stream", "Condition": { "StringEquals": { "iam:PassedToService": "qldb.amazonaws.com" } } } ] }

步驟 2:Kinesis Data Streams 權限

在下列範例中,您可以使用 IAM 角色授與 QLDB 存取權,將資料記錄寫入 Amazon Kinesis 資料串流。stream-for-qldb所有 QLDB 日誌串流也需要這個動作。

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。stream-for-qldb

{ "Version": "2012-10-17", "Statement": [ { "Sid": "QLDBStreamKinesisPermissions", "Action": [ "kinesis:PutRecord*", "kinesis:DescribeStream", "kinesis:ListShards" ], "Effect": "Allow", "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/stream-for-qldb" } ] }

然後,您可以將此許可政策附加到 QLDB 可假設存取 Kinesis 資料串流的 IAM 角色。下列 JSON 文件是信任政策範例,該政策允許 QLDB 僅針對總帳帳戶123456789012中的任何 QLDB 串流假設 IAM 角色。myExampleLedger

若要使用此原則,請以您自己的資訊取代 us-east-1123456789012,並在此範例中。myExampleLedger

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "qldb.amazonaws.com" }, "Action": [ "sts:AssumeRole" ], "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:qldb:us-east-1:123456789012:stream/myExampleLedger/*" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

根據標籤更新 QLDB 分類帳

您可以使用身分型原則中的條件,根據標籤來控制 QLDB 資源的存取。此範例顯示如何建立允許更新分類帳的策略。不過,只有當分類帳標記Owner具有該使用者的使用者名稱值時,才會授與權限。此政策也會授予在主控台完成此動作的必要許可。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListLedgersInConsole", "Effect": "Allow", "Action": "qldb:ListLedgers", "Resource": "*" }, { "Sid": "UpdateLedgerIfOwner", "Effect": "Allow", "Action": "qldb:UpdateLedger", "Resource": "arn:aws:qldb:*:*:ledger/*", "Condition": { "StringEquals": {"aws:ResourceTag/Owner": "${aws:username}"} } } ] }

您可以將此政策連接到您帳戶中的 使用者。如果名為的使用者richard-roe嘗試更新 QLDB 分類帳,則必須將分類帳加上標記Owner=richard-roe或。owner=richard-roe否則,他便會被拒絕存取。條件標籤金鑰 Owner 符合 Ownerowner,因為條件金鑰名稱不區分大小寫。如需更多資訊,請參閱 IAM 使用者指南中的 IAM JSON 政策元素:條件