Amazon SQS API 직접 호출 시 발생하는 “AccessDenied” 또는 “AccessDeniedException” 오류를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Simple Queue Service(Amazon SQS) API 직접 호출을 실행했는데 “AccessDenied” 오류가 발생했습니다.

간략한 설명

Amazon SQS API 직접 호출을 실행할 때 다음과 유사한 "AccessDenied" 또는 "AccessDeniedException" 오류가 발생합니다.

"An error occurred (AccessDenied) when calling the SendMessage operation: Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied."

-또는-

"An error occurred (KMS.AccessDeniedException) when calling the SendMessage operation: User: arn:aws:iam::xxxxx:user/xxxx is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:us-east-1:xxxx:key/xxxx with an explicit deny."

해결 방법

Amazon SQS 액세스 정책 및 IAM 정책

참고: 오류가 AWS Command Line Interface(AWS CLI) 명령을 실행할 때 발생한다면 AWS CLI 오류 해결을 참조하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

  • SQS 액세스 정책 또는 AWS Identity and Access Management(IAM) 정책에는 해당 작업에 대한 액세스를 명시적으로 허용하는 허가가 포함되어야 합니다.

  • 작업을 수행하는 데 필요한 권한에만 최소 권한을 부여하는 것이 가장 좋습니다. 자세한 내용을 알아보려면 최소 권한 적용을 참조하세요.

  • SQS 대기열이 다른 계정에 있는 경우, SQS 액세스 정책과 IAM 정책 모두 액세스를 명시적으로 허용해야 합니다.

    중요: 두 정책에서 명시적 거부는 명시적 허용보다 우선합니다.

  • 정책에서 조건 요소를 사용하는 경우 해당 조건이 액세스를 제한하는지 확인하세요.

  • 사용자 또는 역할이 SCP를 사용하는 AWS Organizations 조직에 속해 있는 경우, SCP가 사용자나 역할을 차단하지 않는지 확인하세요.

API 직접 호출에 사용되는 IAM ID를 확인하려면 get-caller-identity AWS CLI 명령을 실행하세요.

aws sts get-caller-identity

Amazon SQS 액세스 권한에 대해 자세히 알아보려면 Amazon SQS 대기열에 액세스하려면 어떤 권한이 필요한가요?를 참조하세요.

AWS Key Management Service(AWS KMS) 권한

Amazon SQS 대기열에 대해 서버 측 암호화(SSE)가 켜져 있는 경우, 생산자와 소비자 모두에게 권한을 부여해야 합니다. 필수 권한은 AWS 관리형 AWS KMS 키 또는 고객 관리형 키와 함께 제공됩니다. 고객 관리형 키 정책에는 각 대기열 생산자 및 소비자에 대한 액세스 권한이 포함되어야 합니다. 또는 AWS KMS 키에 필요한 AWS KMS 권한을 포함하도록 IAM 정책을 업데이트하세요.

다른 계정에서 SSE Amazon SQS 대기열에 액세스하고자 하는 경우, 해당 대기열에서 고객 관리형 키를 사용해야 합니다. 고객 관리형 키 정책만 수정할 수 있으므로 AWS 관리형 키는 사용할 수 없습니다. AWS KMS 키 정책은 AWS KMS 키의 교차 계정 액세스를 허용해야 합니다. IAM 정책에는 AWS KMS 키에 액세스할 수 있는 권한이 포함되어야 합니다.

자세한 내용을 알아보려면 키 관리를 참조하세요.

VPC 엔드포인트 정책

Amazon Virtual Private Cloud(VPC) 엔드포인트를 통해 SQS에 액세스하는 경우, SQS VPC 엔드포인트 정책에서 액세스를 허용해야 합니다.

이 예제 VPC 엔드포인트 정책은 IAM 사용자 MyUser가 SQS 대기열 MyQueue에 메시지를 보낼 수 있도록 지정합니다. 다른 작업, IAM 사용자 및 SQS 리소스는 VPC 엔드포인트를 통한 액세스가 거부됩니다.

{
  "Statement": [
    {
      "Action": [
        "sqs:SendMessage"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue",
      "Principal": {
        "AWS": "arn:aws:iam:123456789012:user/MyUser"
      }
    }
  ]
}

참고:HTTPS Amazon SQS 엔드포인트가 있는 VPC만 사용할 수 있습니다.

SQS 콘솔 권한

SQS 콘솔에서 SQS 대기열 및 속성을 보려면 사용자에게 ListQueuesGetQueueAttributes 작업에 대한 권한이 있어야 합니다.

{
  "Sid": "Statement1",
  "Effect": "Allow",
  "Action": [
    "sqs:ListQueues",
    "sqs:GetQueueAttributes"
  ],
  "Resource": "*"
}

**참고:**특정 대기열에는 ListQueues API 작업을 사용할 수 없습니다. ListQueues API는 "*" 리소스 또는 "arn:aws:sqs:region:account_id:*"에 적용되어야 합니다.

모든 대기열 정책 거부

다음 예와 유사하게 모두 거부 정책이 추가된 경우 SQS 대기열에 대한 액세스 권한을 잃을 수 있습니다.

{
  "Sid": "deny-sqs-actions",
  "Effect": "Deny",
  "Principal": "*",
  "Action": "SQS:*",
  "Resource": "queueName"
}

SQS 대기열에 액세스할 수 없다면 루트 사용자 보안 인증 정보를 사용하여 대기열에 액세스하고 모두 거부 정책을 제거하세요. 자세한 내용을 알아보려면 Deny 대기열 정책 사용 시 Amazon SQS 대기열 액세스 문제를 해결 및 방지하려면 어떻게 해야 하나요?를 참조하세요.

관련 정보

튜토리얼: Amazon Virtual Private Cloud에서 Amazon SQS 대기열로 메시지 전송

Amazon SQS API 권한: 작업 및 리소스 참조