DynamoDB AccessDeniedException — "not authorized to perform dynamodb:..." (dynamodb를 수행할 권한이 없습니다)
TL;DR — 귀하의 IAM 사용자/역할에는 해당 리소스에 대한 DynamoDB 작업에 대한 권한이 없습니다. 메시지에는 정확한 dynamodb: 작업과 ARN의 이름이 지정됩니다. 해당 리소스 ARN에 대한 해당 작업을 자격 증명의 IAM 정책에 추가합니다(그리고 거부 또는 이를 차단하는 조건을 확인합니다).
무엇을 의미하는가
AccessDeniedException: User: arn:aws:iam::123456789012:user/app is not authorized to
perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:123456789012:table/Orders
because no identity-based policy allows the dynamodb:Query actionIAM이 호출을 거부했습니다. 메시지는 체크리스트입니다. 주체, 작업, 리소스의 이름을 지정합니다. 세 가지 모두 명시적인 거부 없이 허용되어야 합니다. 후행 절에는 액세스를 거부한 정책 유형의 이름이 지정됩니다(ID 기반 정책, SCP, 권한 경계, 세션 정책 등). DynamoDB는 이를 HTTP 상태 400으로 반환하고 재시도할 수 없습니다. 정책(또는 자격 증명)이 변경될 때까지 동일한 요청이 실패합니다.
왜 발생하는가
- 작업이 허용되지 않습니다 — 정책은
dynamodb:GetItem을 허용하지만Query을 호출했거나 완전히 누락되었습니다. - 리소스 ARN이 일치하지 않습니다 — 정책은
table/Orders를 허용하지만 인덱스(table/Orders/index/*필요) 또는 다른 테이블을 쿼리하고 있습니다. - 어딘가에 명시적인
Deny(권한 경계, SCP 또는 정책 자체)가 허용보다 우선합니다. - 정책 조건이 충족되지 않습니다(세분화된 액세스, 소스 IP, MFA).
- 잘못된 자격 증명 — 귀하가 맡은 역할은 액세스 권한이 있는 역할이 아닙니다.
어떻게 해결하는가
- 정확한 리소스 ARN에 대한 메시지 이름에 정확한 작업을 부여합니다. GSI/LSI를 쿼리할 때 인덱스 ARN(
.../index/*)을 포함합니다. - 우선 거부 확인 — 권한 경계 및 SCP 비트가 허용됩니다.
- 세밀한 조건(
dynamodb:LeadingKeys등)이 실제로 요청과 일치하는지 확인하세요. aws sts get-caller-identity로 신원 확인 — 귀하가 생각하는 주체가 맞는지 확인하세요.
정책 예시
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["dynamodb:Query", "dynamodb:GetItem", "dynamodb:PutItem"],
"Resource": [
"arn:aws:dynamodb:us-east-1:123456789012:table/Orders",
"arn:aws:dynamodb:us-east-1:123456789012:table/Orders/index/*"
]
}
]
}DynoTable에서 열기
DynoTable은 CLI가 모든 연결에서 사용하는 것과 동일한 0 프로필을 확인합니다. (Connect an AWS account)이므로 IAM을 수정하거나 전환할 때 프로필을 다시 시작하지 않고도 앱이 이를 선택합니다. ⌘P를 눌러 프로필 전환기 및 활성 상태인 ID 확인 — 자격 증명 상태 점 토큰이 세션 중간에 만료되면 인라인 재연결 작업으로 빨간색으로 변합니다.
정책이 dynamodb:ListTables을 거부하지만 명명된 테이블에 대한 읽기를 허용하는 경우,
DynoTable은 여전히 해당 테이블을 직접 열 수 있습니다: ⌘K → Open table by
name은 목록 호출을 건너뛰고 테이블의 GetItem/Query로 바로 이동합니다.
당신은 입력합니다. 액세스가 작동하면 시각적 query builder
필터 칩에서 Query-vs-Scan을 파생하므로 정책이 허용한다는 것을 증명할 수 있습니다.
당신에게 필요한 수술. 오류 이름이 GSI/LSI ARN인 경우 dynamodb:Query를 부여합니다.
table/YourTable/index/* — 인덱스 권한은 테이블 수준에서 흔히 발생하는 실수입니다.
올바르게 보일 수 있습니다.
관련 오류
- The security token is invalid — 잘못된/만료된 자격 증명(허가 없는 유효한 자격 증명과 비교).
- 설정에 리전이 없음
- 학습: Running DynamoDB Local — IAM 정책이 적용되지 않는 곳에서 로컬로 개발합니다.