Amazon 的基於身份的政策示例 QLDB - Amazon Quantum 賬本數據庫(AmazonQLDB)

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

Amazon 的基於身份的政策示例 QLDB

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

若要瞭解如何使用這些範例原則文件來建立以IAM身分識別為基礎的JSON策略,請參閱使用指南中的IAM建立IAM策略。

有關由定義的動作和資源類型的詳細資訊QLDB,包括每種資源類型的格式,請參閱服務授權參考QLDB適用於 Amazon 的動作、資源和條件金鑰。ARNs

重要

支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL

政策最佳實務

以身分識別為基礎的政策會決定某人是否可以建立、存取或刪除您帳戶中的QLDB資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時,請遵循下列準則及建議事項:

  • 開始使用 AWS 受管原則並邁向最低權限權限 — 若要開始授與使用者和工作負載的權限,請使用可授與許多常見使用案例權限的AWS 受管理原則。它們可用在您的 AWS 帳戶. 建議您透過定義特定於您使用案例的 AWS 客戶管理政策,進一步降低使用權限。如需詳細資訊,請參閱AWS 《IAM使用指南》中針對工作職能的AWS 受管理策略或受管理的策略

  • 套用最低權限權限 — 當您使用原則設定權限時,IAM只授與執行工作所需的權限。為實現此目的,您可以定義在特定條件下可以對特定資源採取的動作,這也稱為最低權限許可。如需有關使用套用權限IAM的詳細資訊,請參閱《使用指南》IAM中的IAM《策略與權限

  • 使用IAM策略中的條件進一步限制存取 — 您可以在策略中新增條件,以限制對動作和資源的存取。例如,您可以撰寫政策條件,以指定必須使用傳送所有要求SSL。您也可以使用條件來授與對服務動作的存取權 (如透過特定) 使用這些動作 AWS 服務,例如 AWS CloudFormation。如需詳細資訊,請參閱《IAM使用指南》中的IAMJSON策略元素:條件

  • 使用 IAM Access Analyzer 驗證您的原IAM則,以確保安全和功能性的權限 — IAM Access Analyzer 會驗證新的和現有的原則,以便原則遵循IAM原則語言 (JSON) 和IAM最佳做法。IAMAccess Analyzer 提供超過 100 項原則檢查和可行的建議,協助您撰寫安全且功能正常的原則。如需詳細資訊,請參閱IAM使IAM用指南中的存取分析器原則驗證

  • 需要多因素驗證 (MFA) — 如果您的案例需要使IAM用者或 root 使用者 AWS 帳戶,請開啟以取得額外MFA的安全性。若要在呼叫API作業MFA時需要,請在原則中新增MFA條件。如需詳細資訊,請參閱《IAM使用指南》中的 < 設定MFA受保護的API存取 >。

如需有關中最佳作法的詳細資訊IAM,請參閱《IAM使用指南》IAM中的「安全性最佳作法」。

使用 QLDB 主控台

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

您不需要為只對 AWS CLI 或撥打電話的使用者允許最低主控台權限 AWS API。相反地,只允許存取符合他們嘗試執行之API作業的動作。

若要確保使用者和角色具有QLDB主控台及其所有功能的完整存取權,請將下列 AWS 受管理的原則附加至實體。若要取得更多資訊AWS Amazon 的受管政策 QLDB,請參閱《使用指南》中的〈將權限新增至IAM使用者〉

AmazonQLDBConsoleFullAccess

查詢歷史記錄權

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

若要允許查詢歷程記錄權限,您可以使用受 AWS 管理的策略 A mazonQLDBConsole FullAccess。此原則使用萬用字元 (dbqms:*) 允許所有資源DBQMS執行所有動作。

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

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

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

若要允許在沒有任何查詢歷程記錄權限的情況下完整存取QLDB主控台,您可以建立排除所有DBQMS動作的自訂IAM政策。例如,下列原則文件允許 AWS 受管理的策略 A 所授與的相同權限 mazonQLDBConsoleFullAccess,但以服務前置詞開頭的動作除外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工作階段) 互動,您必須授與SendCommandAPI動作的權限。下列JSON文件是僅授與分類帳SendCommandAPI作業權限之政策的範例myExampleLedger

若要使用此原則,請取代 us-east-1, 123456789012myExampleLedger 在您自己的信息的例子中。

{ "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-1, 123456789012myExampleLedger 在您自己的信息的例子中。

{ "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-1, 123456789012myExampleLedger 在您自己的信息的例子中。

{ "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-1, 123456789012myExampleLedger 在您自己的信息的例子中。

{ "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-1, 123456789012myExampleLedger 在您自己的信息的例子中。

{ "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-1, 123456789012, myExampleLedgerAu1EiThbt8s0z9wM26REZN 在您自己的信息的例子中。

{ "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-1, 123456789012myExampleLedger 在您自己的信息的例子中。

{ "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-1, 123456789012myExampleLedger 在您自己的信息的例子中。

{ "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-1, 123456789012, myExampleLedgerqldb-s3-export 在您自己的信息的例子中。

{ "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角色授與寫入 Amazon S3 儲QLDB存貯體之一的存取權DOC-EXAMPLE-BUCKET。所有QLDB分錄匯出也必須執行此動作。

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

若要使用此政策,請將範例BUCKET中的 DOC EXAMPLE--取代為您的 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文件是信任策略的範例,該策略123456789012僅QLDB允許對帳號中的任何QLDB資源擔任IAM角色。

若要使用此原則,請取代 us-east-1 以及 123456789012 在您自己的信息的例子中。

{ "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-1, 123456789012, myExampleLedgerqldb-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角色授與將資料記錄寫入 Amazon Kinesis 資料串流的QLDB存取權。stream-for-qldb。 所有QLDB日誌資料流也需要這個動作。

若要使用此原則,請取代 us-east-1, 123456789012stream-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文件是信任政策的範例,該政策myExampleLedger僅QLDB允許針對分類帳帳戶123456789012中的任何QLDB資料流擔任IAM角色。

若要使用此原則,請取代 us-east-1, 123456789012myExampleLedger 在您自己的信息的例子中。

{ "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-roeowner=richard-roe。否則,他便會被拒絕存取。條件標籤金鑰 Owner 符合 Ownerowner,因為條件金鑰名稱不區分大小寫。如需詳細資訊,請參閱《IAM使用指南》中的IAMJSON策略元素:條件