View a markdown version of this page

故障診斷 DynamoDB Streams 的常見 ABAC 錯誤 - Amazon DynamoDB

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

故障診斷 DynamoDB Streams 的常見 ABAC 錯誤

如果您在為 DynamoDB Streams 啟用 ABAC 後,收到 AccessDeniedException或標籤型條件的行為不如預期,請使用本主題來診斷和解決最常見的原因。

服務特定條件金鑰不被視為有效的條件金鑰。如果您已在政策中使用這類金鑰,這些金鑰會導致錯誤。您必須以適當的條件金鑰取代服務特定的條件金鑰,才能實作適用於 DynamoDB Streams 的 ABAC。

例如,假設您已在對串流執行GetRecords請求的政策中使用 dynamodb:ResourceTag條件金鑰。請求失敗,並顯示 AccessDeniedException。下列範例顯示具有 dynamodb:ResourceTag條件索引鍵的錯誤政策。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetRecords" ], "Resource": "arn:aws:dynamodb:*:*:table/*/stream/*", "Condition": { "StringEquals": { "dynamodb:ResourceTag/Team": "Analytics" } } } ] }

若要解決此問題,請將 dynamodb:ResourceTag 條件金鑰替換為 aws:ResourceTag,如下例所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetRecords" ], "Resource": "arn:aws:dynamodb:*:*:table/*/stream/*", "Condition": { "StringEquals": { "aws:ResourceTag/Team": "Analytics" } } } ] }

如果您最近啟用了 Streams ABAC,則變更可能尚未傳播。更新 Streams ABAC 的狀態是非同步操作。請等待幾分鐘,然後重試您的請求。

刪除父資料表後,串流會繼續存在 24 小時,然後再移除。在此 24 小時時段,您可以使用 CLI 或 SDK 命令 (tag-resource、 untag-resource和 list-tags-of-resource) 搭配串流 ARN 來管理串流標籤。您無法使用 主控台或 CloudFormation 修改其父資料表已不存在之串流上的標籤。

如果您在嘗試透過主控台標記 時收到錯誤,請改用 CLI:

aws dynamodb tag-resource \ --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/DeletedTable/stream/2024-01-01T00:00:00.000 \ --tags Key=environment,Value=production

若要驗證串流上已刪除父資料表的現有標籤:

aws dynamodb list-tags-of-resource \ --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/DeletedTable/stream/2024-01-01T00:00:00.000

如果您收到 ResourceNotFoundException,則 24 小時保留期已過期,且串流不再存在。

只有在下列情況成立時,您才可以自行選擇退出 Streams ABAC:

  • 您已使用透過 DynamoDB 主控台選擇加入的自助式流程。

  • 您在選擇加入後七天內停用。

如果已透過 Support 為您的帳戶啟用 Streams ABAC,您將無法透過 DynamoDB 主控台選擇退出。若要選擇退出,請聯絡 Support。

如果 IAM 角色缺少必要的許可,則使用串流建立或更新資料表的 CloudFormation 部署可能會失敗。具體而言,該角色必須具有串流資源的 dynamodb:TagResource和 dynamodb:UntagResource許可。這同時適用於 AWS::DynamoDB::Table和 AWS::DynamoDB::GlobalTable 資源類型,並影響明確的串流標籤和繼承的堆疊層級標籤。

若要解決此問題,請更新 CloudFormation 服務角色的 IAM 政策,以包含串流標記許可:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:TagResource", "dynamodb:UntagResource" ], "Resource": [ "arn:aws:dynamodb:*:*:table/*/stream/*" ] } ] }