최소 권한 정책이 있는 암호화된 Amazon SQS 대기열에 대한 액세스 관리 - Amazon Simple Queue Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

최소 권한 정책이 있는 암호화된 Amazon SQS 대기열에 대한 액세스 관리

AmazonSQS을 사용하여 (SSE)와 통합된 서버 측 암호화()를 사용하여 애플리케이션 간에 민감한 데이터를 교환할 수 있습니다. AWS Key Management Service KMS AmazonSQS과 를 통합 AWS KMS하면 Amazon 를 보호하는 키SQS와 다른 AWS 리소스를 보호하는 키를 중앙에서 관리할 수 있습니다.

여러 AWS 서비스가 Amazon 에 이벤트를 보내는 이벤트 소스 역할을 할 수 있습니다SQS. 이벤트 소스가 암호화된 Amazon SQS 대기열에 액세스할 수 있도록 하려면 고객 관리형 AWS KMS 키로 대기열을 구성해야 합니다. 그런 다음 키 정책을 사용하여 서비스가 필요한 AWS KMS API 방법을 사용하도록 허용합니다. 또한 이 서비스에는 대기열이 이벤트를 보낼 수 있도록 액세스를 인증할 수 있는 권한이 필요합니다. Amazon SQS 대기열 및 해당 데이터에 대한 액세스를 제어하는 데 사용할 수 있는 리소스 기반 SQS 정책인 Amazon 정책을 사용하여 이를 달성할 수 있습니다.

다음 섹션에서는 Amazon SQS 정책 및 AWS KMS 키 정책을 통해 암호화된 Amazon SQS 대기열에 대한 액세스를 제어하는 방법에 대한 정보를 제공합니다. 이 가이드의 정책은 최소 권한을 획득하는 데 도움이 됩니다.

또한 이 가이드에서는 리소스 기반 정책이 aws:SourceArn, aws:SourceAccountaws:PrincipalOrgID 전역 IAM 조건 컨텍스트 키를 사용하여 혼동된 대리자 문제를 해결하는 방법을 설명합니다.

개요

이 주제에서는 키 정책 및 Amazon SQS 대기열 정책을 구축하는 방법을 설명하는 일반적인 사용 사례를 안내합니다. 이 사용 사례는 다음 이미지에 나와 있습니다.

Amazon SNS 메시지를 Amazon 에 게시. SQS

이 예제에서 메시지 생성기는 암호화된 Amazon 대기열로 메시지를 팬아웃하도록 구성된 Amazon Simple Notification Service(SNS) 주제입니다. SQS 메시지 소비자는 AWS Lambda 함수, Amazon Elastic Compute Cloud(EC2) 인스턴스 또는 AWS Fargate 컨테이너와 같은 컴퓨팅 서비스입니다. 그런 다음 Amazon SQS 대기열은 실패한 메시지를 Dead-letter Queue(DLQ)로 보내도록 구성됩니다. 이는 애플리케이션 또는 메시징 시스템을 디버깅하는 데 유용합니다. 사용하지 않는 메시지를 DLQs 격리하여 처리가 성공하지 못한 이유를 확인할 수 있기 때문입니다. 이 주제에 정의된 솔루션에서는 Lambda 함수와 같은 컴퓨팅 서비스가 Amazon SQS 대기열에 저장된 메시지를 처리하는 데 사용됩니다. 메시지 소비자가 가상 프라이빗 클라우드(VPC)에 있는 경우 이 안내서에 포함된 DenyReceivingIfNotThroughVPCE 정책 설명에 따라 메시지 수신을 해당 특정 로 제한할 수 있습니다VPC.

참고

이 안내서에는 정책 설명 형식의 필수 IAM 권한만 포함되어 있습니다. 정책을 구성하려면 Amazon 정책 또는 AWS KMS 키 SQS 정책에 문을 추가해야 합니다. 이 가이드에서는 Amazon SQS 대기열 또는 AWS KMS 키를 생성하는 방법에 대한 지침을 제공하지 않습니다. 이러한 리소스를 생성하는 방법에 대한 지침은 Amazon SQS 대기열 생성키 생성을 참조하세요.

이 안내서에 정의된 Amazon SQS 정책은 동일하거나 다른 Amazon SQS 대기열로 직접 메시지 수정을 지원하지 않습니다.

Amazon에 대한 최소 권한 키 정책 SQS

이 섹션에서는 Amazon SQS 대기열을 암호화하는 데 사용하는 고객 관리형 키에 AWS KMS 대한 의 필수 최소 권한 권한을 설명합니다. 이러한 권한을 사용하면 최소 권한을 구현하면서 의도한 엔터티로만 액세스를 제한할 수 있습니다. 키 정책은 다음과 같은 정책 명령문으로 구성되어야 하며, 이에 대해서는 아래에서 자세히 설명합니다.

AWS KMS 키에 대한 관리자 권한 부여

AWS KMS 키를 생성하려면 키를 배포하는 데 사용하는 IAM 역할에 AWS KMS 관리자 권한을 제공해야 합니다 AWS KMS . 이러한 관리자 권한은 다음 AllowKeyAdminPermissions 정책 명령문에 정의되어 있습니다. AWS KMS 키 정책에 이 문을 추가할 때 를 바꿔야 합니다.<admin-role ARN> 키를 배포하거나 AWS KMS 키를 관리 AWS KMS 하거나 둘 다에 사용되는 IAM 역할의 Amazon 리소스 이름(ARN)을 사용합니다. 배포 파이프라인의 IAM 역할 또는 조직의 관리자 역할일 수 있습니다AWS .

{ "Sid": "AllowKeyAdminPermissions", "Effect": "Allow", "Principal": { "AWS": [ "<admin-role ARN>" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }
참고

AWS KMS 키 정책에서 Resource 요소의 값은 여야 합니다. 즉*, '이 AWS KMS 키'입니다. 별표(*)는 AWS KMS 키 정책이 연결된 키를 식별합니다.

키 메타데이터에 대한 읽기 전용 액세스 권한 부여

다른 IAM 역할에 키 메타데이터에 대한 읽기 전용 액세스 권한을 부여하려면 키 정책에 AllowReadAccessToKeyMetaData 문을 추가합니다. 예를 들어 다음 문을 사용하면 감사 목적으로 계정의 모든 AWS KMS 키를 나열할 수 있습니다. 이 문은 AWS 루트 사용자에게 키 메타데이터에 대한 읽기 전용 액세스 권한을 부여합니다. 따라서 계정의 보안 IAM 주체는 자격 증명 기반 정책에 , kms:Get*kms:Describe*라는 명령문에 나열된 권한이 있는 경우 키 메타데이터에 액세스할 수 있습니다kms:List*. 교체해야 합니다.<account-ID> 자신의 정보를 사용합니다.

{ "Sid": "AllowReadAcesssToKeyMetaData", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<accountID>:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource": "*" }

Amazon에 대기열에 메시지를 게시SNS할 수 있는 SNS KMS 권한을 부여합니다.

Amazon SNS 주제가 암호화된 Amazon SQS 대기열에 메시지를 게시할 수 있도록 하려면 AllowSNSToSendToSQS 정책 문을 키 정책에 추가합니다. 이 문은 AWS KMS 키를 사용하여 Amazon SQS 대기열에 게시할 수 있는 SNS 권한을 Amazon에 부여합니다. 교체해야 합니다.<account-ID> 자신의 정보를 사용합니다.

참고

Condition의 는 동일한 AWS 계정의 Amazon SNS 서비스에 대한 액세스만 제한합니다.

{ "Sid": "AllowSNSToSendToSQS", "Effect": "Allow", "Principal": { "Service": [ "sns.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "<account-id>" } } }

소비자가 대기열에 있는 메시지를 해독할 수 있도록 허용

다음 AllowConsumersToReceiveFromTheQueue 문은 Amazon SQS 메시지 소비자에게 암호화된 Amazon SQS 대기열에서 수신한 메시지를 복호화하는 데 필요한 권한을 부여합니다. 정책 문을 연결할 때 를 바꿉니다.<consumer's runtime role ARN> ARN 메시지 소비자의 IAM 런타임 역할을 사용합니다.

{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": [ "<consumer's execution role ARN>" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*" }

최소 권한 Amazon SQS 정책

이 섹션에서는 이 가이드에서 다루는 사용 사례에 대한 최소 권한 Amazon SQS 대기열 정책(예: Amazon~Amazon SQS)SNS을 안내합니다. 정의된 정책은 DenyAllow 명령문을 모두 사용하여 의도하지 않은 액세스를 방지하도록 설계되었습니다. Allow 명령문은 의도한 엔터티 또는 엔터티에 대한 액세스 권한을 부여합니다. Deny 문은 다른 의도하지 않은 엔터티가 정책 조건 내에서 의도한 엔터티를 제외하면서 Amazon SQS 대기열에 액세스하지 못하도록 합니다.

Amazon SQS 정책에는 아래에 자세히 설명된 다음 설명이 포함되어 있습니다.

Amazon SQS 관리 권한 제한

다음 RestrictAdminQueueActions 정책 문은 대기열을 배포하거나 대기열을 SQS 관리하거나 둘 다에 사용하는 IAM 역할 또는 역할로만 Amazon 관리 권한을 제한합니다. 를 교체해야 합니다.<placeholder values> 자신의 정보를 사용합니다. Amazon SQS 대기열을 배포하는 데 사용되는 IAM 역할ARN의 와 Amazon SQS 관리 권한이 있어야 하는 관리자 역할ARNs의 를 지정합니다.

{ "Sid": "RestrictAdminQueueActions", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes" ], "Resource": "<SQS Queue ARN>", "Condition": { "StringNotLike": { "aws:PrincipalARN": [ "arn:aws:iam::<account-id>:role/<deployment-role-name>", "<admin-role ARN>" ] } } }

지정된 조직에서 Amazon SQS 대기열 작업 제한

Amazon SQS 리소스를 외부 액세스( AWS 조직 외부의 엔터티에 의한 액세스)로부터 보호하려면 다음 문을 사용합니다. 이 명령문은 에서 지정한 조직에 대한 Amazon SQS 대기열 액세스를 제한합니다Condition. 교체해야 합니다.<SQS queue ARN> Amazon SQS 대기열을 배포하는 데 사용되는 IAM 역할ARN의 와 <org-id>, 조직 ID 포함.

{ "Sid": "DenyQueueActionsOutsideOrg", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:ChangeMessageVisibility", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotEquals": { "aws:PrincipalOrgID": [ "<org-id>" ] } } }

소비자에게 Amazon SQS 권한 부여

Amazon SQS 대기열에서 메시지를 수신하려면 메시지 소비자에게 필요한 권한을 제공해야 합니다. 다음 정책 문은 사용자가 지정한 소비자에게 Amazon SQS 대기열에서 메시지를 소비하는 데 필요한 권한을 부여합니다. Amazon SQS 정책에 문을 추가할 때 를 교체해야 합니다.<consumer's IAM runtime role ARN> 소비자가 사용하는 IAM 런타임 역할ARN의 를 사용하는 경우 <SQS queue ARN>, Amazon SQS 대기열을 배포하는 데 사용되는 IAM 역할ARN의 .

{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": "<consumer's IAM execution role ARN>" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>" }

다른 엔터티가 Amazon SQS 대기열에서 메시지를 수신하지 못하도록 Amazon SQS 대기열 정책에 DenyOtherConsumersFromReceiving 문을 추가합니다. 이 명령문은 메시지 소비를 지정한 소비자로 제한하여 다른 소비자는 자격 증명 권한에 따라 액세스 권한이 있는 경우에도 액세스하지 못하도록 합니다. 교체해야 합니다.<SQS queue ARN> 그리고 <consumer’s runtime role ARN> 자신의 정보를 사용합니다.

{ "Sid": "DenyOtherConsumersFromReceiving", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotLike": { "aws:PrincipalARN": "<consumer's execution role ARN>" } } }

전송 중 암호화 적용

다음 DenyUnsecureTransport 정책 문은 소비자와 생산자가 보안 채널(TLS 연결)을 사용하여 Amazon SQS 대기열에서 메시지를 보내고 받도록 강제합니다. 교체해야 합니다.<SQS queue ARN> Amazon SQS 대기열을 배포하는 데 사용되는 IAM 역할ARN의 를 사용합니다.

{ "Sid": "DenyUnsecureTransport", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "Bool": { "aws:SecureTransport": "false" } } }

특정 Amazon SNS 주제로 메시지 전송 제한

다음 AllowSNSToSendToTheQueue 정책 문을 사용하면 지정된 Amazon SNS 주제가 Amazon SQS 대기열로 메시지를 보낼 수 있습니다. 교체해야 합니다.<SQS queue ARN> Amazon SQS 대기열을 배포하는 데 사용되는 IAM 역할ARN의 , 및 <SNS topic ARN>, Amazon SNS 주제 . ARN

{ "Sid": "AllowSNSToSendToTheQueue", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "<SQS queue ARN>", "Condition": { "ArnLike": { "aws:SourceArn": "<SNS topic ARN>" } } }

다음 DenyAllProducersExceptSNSFromSending 정책 명령문은 다른 생산자가 대기열에 메시지를 보내는 것을 방지합니다. Replace <SQS queue ARN> 그리고 <SNS topic ARN> 자신의 정보를 사용합니다.

{ "Sid": "DenyAllProducersExceptSNSFromSending", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "<SQS queue ARN>", "Condition": { "ArnNotLike": { "aws:SourceArn": "<SNS topic ARN>" } } }

(선택 사항) 메시지 수신을 특정 VPC 엔드포인트로 제한

메시지 수신을 특정 VPC 엔드포인트 로만 제한하려면 Amazon SQS 대기열 정책에 다음 정책 문을 추가합니다. 이 명령문은 메시지가 원하는 VPC 엔드포인트에서 온 것이 아닌 한 메시지 소비자가 대기열에서 메시지를 수신하지 못하도록 합니다. Replace <SQS queue ARN> Amazon SQS 대기열을 배포하는 데 사용되는 IAM 역할ARN의 , 및 <vpce_id> VPC 엔드포인트의 ID를 사용합니다.

{ "Sid": "DenyReceivingIfNotThroughVPCE", "Effect": "Deny", "Principal": "*", "Action": [ "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotEquals": { "aws:sourceVpce": "<vpce id>" } } }

데드 레터 대기열에 대한 Amazon SQS 정책 문

문 ID로 식별되는 다음 정책 문을 DLQ 액세스 정책에 추가합니다.

  • RestrictAdminQueueActions

  • DenyQueueActionsOutsideOrg

  • AllowConsumersToReceiveFromTheQueue

  • DenyOtherConsumersFromReceiving

  • DenyUnsecureTransport

액세스 정책에 앞의 정책 문을 추가하는 것 외에도 다음 섹션에 설명된 대로 Amazon SQS 대기열로의 메시지 전송을 제한하는 문을 추가DLQ해야 합니다.

Amazon SQS 대기열로의 메시지 전송 제한

동일한 계정의 Amazon SQS 대기열에만 대한 액세스를 제한하려면 DLQ 대기열 DenyAnyProducersExceptSQS 정책에 다음 정책 문을 추가합니다. 이 문은 기본 대기열을 생성하기 DLQ 전에 를 배포해야 하므로 특정 대기열로 메시지 전송을 제한하지 않으므로 를 생성할 SQS ARN 때 Amazon을 알 수 없습니다DLQ. 하나의 Amazon SQS 대기열로만 액세스를 제한해야 하는 경우, Amazon SQS 소스 대기열을 알고 있을 때 ARN 의 Conditionaws:SourceArn에서 를 수정합니다.

{ "Sid": "DenyAnyProducersExceptSQS", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "<SQS DLQ ARN>", "Condition": { "ArnNotLike": { "aws:SourceArn": "arn:aws:sqs:<region>:<account-id>:*" } } }
중요

이 가이드에 정의된 Amazon SQS 대기열 정책은 sqs:PurgeQueue 작업을 특정 IAM 역할 또는 역할로 제한하지 않습니다. sqs:PurgeQueue 작업을 통해 Amazon SQS 대기열의 모든 메시지를 삭제할 수 있습니다. 또한 이 작업을 사용하여 Amazon SQS 대기열을 교체하지 않고 메시지 형식을 변경할 수 있습니다. 애플리케이션을 디버깅할 때 Amazon SQS 대기열을 지워 잠재적으로 잘못된 메시지를 제거할 수 있습니다. 애플리케이션을 테스트할 때 Amazon SQS 대기열을 통해 메시지 볼륨을 높인 다음 프로덕션에 들어가기 전에 새로 시작하도록 대기열을 제거할 수 있습니다. 이 작업을 특정 역할로 제한하지 않는 이유는 Amazon SQS 대기열을 배포할 때 이 역할을 알 수 없기 때문입니다. 대기열을 제거하려면 이 권한을 역할의 ID 기반 정책에 추가해야 합니다.

교차 서비스 혼동된 대리자 문제 방지

혼동된 대리자 문제는 작업을 수행할 권한이 없는 엔터티가 권한이 더 많은 엔터티에 작업을 수행하도록 강요할 수 있는 보안 문제입니다. 이를 방지하기 위해 는 계정의 리소스에 대한 타사(교차 계정) 또는 기타 AWS 서비스(교차 서비스) 액세스 권한을 제공하는 경우 계정을 보호하는 데 도움이 되는 도구를 AWS 제공합니다. 이 섹션의 정책 명령문은 교차 서비스 혼동된 대리자 문제를 방지하는 데 도움이 될 수 있습니다.

교차 서비스 가장은 한 서비스(호출하는 서비스)가 다른 서비스(호출되는 서비스)를 직접적으로 호출할 때 발생할 수 있습니다. 호출하는 서비스는 다른 고객의 리소스에 대해 액세스 권한이 없는 방식으로 작동하게 권한을 사용하도록 조작될 수 있습니다. 이 문제를 방지하기 위해 이 게시물에 정의된 리소스 기반 정책은 aws:SourceArn, aws:SourceAccountaws:PrincipalOrgID 전역 IAM 조건 컨텍스트 키를 사용합니다. 이렇게 하면 서비스가 특정 리소스, 특정 계정 또는 AWS 조직의 특정 조직에 대해 갖는 권한이 제한됩니다.

IAM Access Analyzer를 사용하여 교차 계정 액세스 검토

AWS IAM Access Analyzer를 사용하여 Amazon SQS 대기열 정책 및 AWS KMS 키 정책을 검토하고 Amazon SQS 대기열 또는 AWS KMS 키가 외부 엔터티에 대한 액세스 권한을 부여할 때 알림을 보낼 수 있습니다. IAM Access Analyzer는 조직의 리소스와 신뢰 영역 외부의 엔터티와 공유되는 계정을 식별하는 데 도움이 됩니다. 이 신뢰 영역은 IAM Access Analyzer를 활성화할 때 지정하는 AWS Organizations 내의 AWS 계정 또는 조직일 수 있습니다.

IAM Access Analyzer는 로직 기반 추론을 사용하여 AWS 환경의 리소스 기반 정책을 분석하여 외부 보안 주체와 공유된 리소스를 식별합니다. 신뢰 영역 외부에서 공유되는 리소스의 각 인스턴스에 대해 Access Analyzer는 결과를 생성합니다. 결과에는 액세스에 대한 정보와 액세스 권한이 부여되는 외부 보안 주체에 대한 정보가 포함됩니다. 결과를 검토하여 액세스가 의도한 안전한 액세스인지 또는 액세스가 의도하지 않은 보안 위험인지 확인할 수 있습니다. 의도하지 않은 액세스가 발생한 경우 영향을 받는 정책을 검토하고 수정합니다. Access Analyzer가 AWS 리소스에 대한 의도하지 않은 액세스를 식별하는 방법에 AWS IAM 대한 자세한 내용은 이 블로그 게시물을 참조하세요.

Access Analyzer에 대한 AWS IAM 자세한 내용은 AWS IAM Access Analyzer 설명서 를 참조하세요.