

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

# 최소 권한 정책이 있는 암호화된 Amazon SQS 대기열의 액세스 관리
<a name="sqs-least-privilege-policy"></a>

Amazon SQS를 사용하여 [AWS Key Management Service (KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)와 통합된 서버 측 암호화(SSE)를 사용하여 애플리케이션 간에 민감한 데이터를 교환할 수 있습니다. Amazon SQS와를 통합 AWS KMS하면 Amazon SQS를 보호하는 키와 다른 AWS 리소스를 보호하는 키를 중앙에서 관리할 수 있습니다.

여러 AWS 서비스가 Amazon SQS로 이벤트를 보내는 이벤트 소스 역할을 할 수 있습니다. 이벤트 소스가 암호화된 Amazon SQS 대기열에 액세스할 수 있도록 하려면 [고객 관리형](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) AWS KMS 키로 대기열을 구성해야 합니다. 그런 다음 키 정책을 사용하여 서비스가 필요한 AWS KMS API 메서드를 사용하도록 허용합니다. 또한 이 서비스에는 대기열이 이벤트를 보낼 수 있도록 액세스를 인증할 수 있는 권한이 필요합니다. Amazon SQS 대기열 및 해당 데이터에 대한 액세스를 제어하는 데 사용할 수 있는 리소스 기반 정책인 Amazon SQS 정책을 사용하여 이를 달성할 수 있습니다.

다음 섹션에서는 Amazon SQS 정책 및 AWS KMS 키 정책을 통해 암호화된 Amazon SQS 대기열에 대한 액세스를 제어하는 방법에 대한 정보를 제공합니다. 이 가이드의 정책은 [최소 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)을 획득하는 데 도움이 됩니다.

또한 이 안내서에서는 리소스 기반 정책이 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn), [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount), [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) 전역 IAM 조건 컨텍스트 키를 사용하여 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 해결하는 방법도 설명합니다.

**Topics**
+ [개요](#sqs-least-privilege-overview)
+ [Amazon SQS에 대한 최소 권한 키 정책](#sqs-least-privilege-use-case)
+ [DLQ(Dead Letter Queue)에 대한 Amazon SQS 정책 명령문](#sqs-policy-dlq)
+ [교차 서비스 혼동된 대리자 문제 방지](#sqs-confused-deputy-prevention)
+ [IAM Access Analyzer를 사용하여 크로스 계정 액세스를 검토할 수 있습니다.](#sqs-cross-account-findings)

## 개요
<a name="sqs-least-privilege-overview"></a>

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

![\[Amazon SQS에 Amazon SNS 메시지 게시\]](http://docs.aws.amazon.com/ko_kr/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-least-privilege.png)


이 예제에서 메시지 생산자는 [Amazon Simple Notification Service(SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 주제로, 메시지를 암호화된 Amazon SQS 대기열로 팬아웃하도록 구성되어 있습니다. 메시지 소비자는 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 함수, [Amazon Elastic Compute Cloud(EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 인스턴스 또는 [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) 컨테이너와 같은 컴퓨팅 서비스입니다. 그런 다음 실패한 메시지를 [DLQ(Dead Letter Queue)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html)로 보내도록 Amazon SQS 대기열을 구성합니다. DLQ는 소비되지 않은 메시지를 구분하여 처리가 실패한 이유를 확인할 수 있으므로 이 방법은 애플리케이션 또는 메시징 시스템을 디버깅하는 데 유용합니다. 이 주제에 정의된 솔루션에서는 Lambda 함수와 같은 컴퓨팅 서비스를 사용하여 Amazon SQS 대기열에 저장된 메시지를 처리합니다. 메시지 소비자가 Virtual Private Cloud(VPC)에 있는 경우 이 안내서에 포함된 [`DenyReceivingIfNotThroughVPCE`](#sqs-restrict-message-to-endpoint) 정책 명령문을 통해 메시지 수신을 특정 VPC로 제한할 수 있습니다.

**참고**  
이 안내서에는 정책 명령문 형식의 필수 IAM 권한만 포함되어 있습니다. 정책을 구성하려면 Amazon SQS 정책 또는 AWS KMS 키 정책에 문을 추가해야 합니다. 이 가이드에서는 Amazon SQS 대기열 또는 AWS KMS 키를 생성하는 방법에 대한 지침을 제공하지 않습니다. 이러한 리소스를 생성하는 방법에 대한 지침은 [Amazon SQS 대기열 생성](creating-sqs-standard-queues.md#step-create-standard-queue) 및 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요.  
이 안내서에 정의된 Amazon SQS 정책은 메시지를 동일하거나 다른 Amazon SQS 대기열로 직접 리드라이브하는 것을 지원하지 않습니다.

## Amazon SQS에 대한 최소 권한 키 정책
<a name="sqs-least-privilege-use-case"></a>

이 섹션에서는 Amazon SQS 대기열을 암호화하는 데 사용하는 고객 관리형 키에 AWS KMS 대한의 필수 최소 권한 권한을 설명합니다. 이러한 권한을 사용하면 최소 권한을 구현하면서 의도한 엔터티로만 액세스를 제한할 수 있습니다. 키 정책은 다음과 같은 정책 명령문으로 구성되어야 하며, 이에 대해서는 아래에서 자세히 설명합니다.
+ [AWS KMS 키에 대한 관리자 권한 부여](#sqs-use-case-kms-admin-permissions)
+ [키 메타데이터에 대한 읽기 전용 액세스 권한 부여](#sqs-use-case-read-only-permissions)
+ [Amazon SNS에 대기열에 메시지를 게시할 수 있는 Amazon SNS KMS 권한 부여](#sqs-use-case-publish-messages-permissions)
+ [소비자가 대기열에 있는 메시지를 해독할 수 있도록 허용](#sqs-use-case-decrypt-messages-permissions)

### AWS KMS 키에 대한 관리자 권한 부여
<a name="sqs-use-case-kms-admin-permissions"></a>

 AWS KMS 키를 생성하려면 AWS KMS 키를 배포하는 데 사용하는 IAM 역할에 AWS KMS 관리자 권한을 제공해야 합니다. 이러한 관리자 권한은 다음 `AllowKeyAdminPermissions` 정책 명령문에 정의되어 있습니다. 이 문을 AWS KMS 키 정책에 추가할 때는 *<admin-role ARN>*을 AWS KMS 키를 배포하거나 AWS KMS 키를 관리하는 데 사용되는 IAM 역할의 Amazon 리소스 이름(ARN)으로 바꿔야 합니다. 이는 배포 파이프라인의 IAM 역할이거나 [AWS 조직](https://aws.amazon.com/organizations/)에서 [조직의 관리자 역할](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html)일 수 있습니다.

```
{
  "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 키 정책이 연결된 키를 식별합니다.

### 키 메타데이터에 대한 읽기 전용 액세스 권한 부여
<a name="sqs-use-case-read-only-permissions"></a>

다른 IAM 역할에 키 메타데이터에 대한 읽기 전용 액세스 권한을 부여하려면 키 정책에 `AllowReadAccessToKeyMetaData` 명령문을 추가합니다. 예를 들어 다음 문을 사용하면 감사 목적으로 계정의 모든 AWS KMS 키를 나열할 수 있습니다. 이 문은 AWS 루트 사용자에게 키 메타데이터에 대한 읽기 전용 액세스 권한을 부여합니다. 따라서 계정 내 모든 IAM 보안 주체는 자격 증명 기반 정책이 다음 명령문 `kms:Describe*`, `kms:Get*` 및 `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에 대기열에 메시지를 게시할 수 있는 Amazon SNS KMS 권한 부여
<a name="sqs-use-case-publish-messages-permissions"></a>

Amazon SNS 주제가 암호화된 Amazon SQS 대기열에 메시지를 게시하도록 허용하려면 키 정책에 `AllowSNSToSendToSQS` 정책 명령문을 추가합니다. 이 문은 AWS KMS 키를 사용하여 Amazon SNS Amazon SQS에 부여합니다. *<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>"
    }
  }
}
```

### 소비자가 대기열에 있는 메시지를 해독할 수 있도록 허용
<a name="sqs-use-case-decrypt-messages-permissions"></a>

다음 `AllowConsumersToReceiveFromTheQueue` 명령문은 암호화된 Amazon SQS 대기열에서 수신한 메시지를 해독하는 데 필요한 권한을 Amazon SQS 메시지 소비자에게 부여합니다. 정책 명령문을 첨부할 때 *<consumer's runtime role ARN>*을 메시지 소비자의 IAM 런타임 역할 ARN으로 대체하세요.

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

### Amazon SQS 정책에 대한 최소 권한
<a name="sqs-use-case-specific-policy"></a>

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

Amazon SQS 정책에는 다음과 같은 명령문이 포함되어 있으며, 이에 대해서는 아래에서 자세히 설명합니다.
+ [Amazon SQS 관리 권한 제한](#sqs-use-case-restrict-permissions)
+ [지정된 조직의 Amazon SQS 대기열 작업을 제한합니다.](#sqs-use-case-restrict-permissions-from-org)
+ [소비자에게 Amazon SQS 권한 부여](#sqs-use-grant-consumer-permissions)
+ [전송 중 암호화 적용](#sqs-encryption-in-transit)
+ [특정 Amazon SNS 주제로의 메시지 전송 제한](#sqs-restrict-transmission-to-topic)
+ [(선택 사항) 메시지 수신을 특정 VPC 엔드포인트로 제한](#sqs-restrict-message-to-endpoint)

### Amazon SQS 관리 권한 제한
<a name="sqs-use-case-restrict-permissions"></a>

다음 `RestrictAdminQueueActions` 정책 명령문에서는 Amazon SQS 관리 권한을 대기열을 배포하거나 대기열을 관리하는 데 사용하는 IAM 역할 또는 두 가지 모두에 사용하는 역할로만 제한합니다. *<placeholder values>*을 자체 정보로 바꾸세요. Amazon SQS 대기열을 배포하는 데 사용되는 IAM 역할의 ARN과 Amazon SQS 관리 권한이 있어야 하는 관리자 역할의 ARN을 지정합니다.

```
{
  "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 대기열 작업을 제한합니다.
<a name="sqs-use-case-restrict-permissions-from-org"></a>

외부 액세스([AWS 조직](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 외부 엔터티의 액세스)로부터 Amazon SQS 리소스를 보호하려면 다음 명령문을 사용하세요. 이 명령문은 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 권한 부여
<a name="sqs-use-grant-consumer-permissions"></a>

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>"
    }
  }
}
```

### 전송 중 암호화 적용
<a name="sqs-encryption-in-transit"></a>

다음 `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 주제로의 메시지 전송 제한
<a name="sqs-restrict-transmission-to-topic"></a>

다음 `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` 정책 명령문은 다른 생산자가 대기열에 메시지를 보내는 것을 방지합니다. *<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 엔드포인트로 제한
<a name="sqs-restrict-message-to-endpoint"></a>

메시지 수신을 특정 [VPC 엔드포인트로](https://aws.amazon.com/about-aws/whats-new/2018/12/amazon-sqs-vpc-endpoints-aws-privatelink/)만 제한하려면 Amazon SQS 대기열 정책에 다음 정책 명령문을 추가하세요. 이 명령문은 메시지가 원하는 VPC 엔드포인트에서 전송되지 않는 한 메시지 소비자가 대기열에서 메시지를 수신하지 못하도록 합니다. *<SQS queue ARN>*을 Amazon SQS 대기열을 배포하는 데 사용되는 IAM 역할의 ARN으로 바꾸고, *<vpce\$1id>*를 VPC 엔드포인트의 ID로 바꿉니다.

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

## DLQ(Dead Letter Queue)에 대한 Amazon SQS 정책 명령문
<a name="sqs-policy-dlq"></a>

명령문 ID로 식별되는 다음 정책 명령문을 DLQ 액세스 정책에 추가합니다.
+ `RestrictAdminQueueActions`
+ `DenyQueueActionsOutsideOrg`
+ `AllowConsumersToReceiveFromTheQueue`
+ `DenyOtherConsumersFromReceiving`
+ `DenyUnsecureTransport`

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

### Amazon SQS 대기열로 메시지 전송 제한
<a name="sqs-dlq-restrict-permissions"></a>

동일한 계정의 Amazon SQS 대기열로만 액세스를 제한하려면 DLQ 대기열 정책에 다음 `DenyAnyProducersExceptSQS` 정책 명령문을 추가합니다. 이 명령문은 기본 대기열을 생성하기 전에 DLQ를 배포해야 하므로 메시지 전송을 특정 대기열로 제한하지 않습니다. 따라서 DLQ를 생성할 때 Amazon SQS ARN을 알 수 없습니다. 하나의 Amazon SQS 대기열로만 액세스를 제한해야 하는 경우, Amazon SQS 소스 대기열의 ARN을 사용하여(아는 경우) `Condition`의 `aws: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 기반 정책에 추가해야 합니다.

## 교차 서비스 혼동된 대리자 문제 방지
<a name="sqs-confused-deputy-prevention"></a>

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

교차 서비스 가장은 한 서비스(직접 호출하는 서비스)가 다른 서비스(직접 호출되는 서비스)를 직접 호출할 때 발생할 수 있습니다. 호출하는 서비스는 다른 고객의 리소스에 대해 액세스 권한이 없는 방식으로 작동하게 권한을 사용하도록 조작될 수 있습니다. 이 문제를 방지하기 위해 이 게시물에 정의된 리소스 기반 정책은 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn), [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount), [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) 전역 IAM 조건 컨텍스트 키를 사용합니다. 이렇게 하면 서비스가 AWS Organizations의 특정 리소스, 특정 계정 또는 특정 조직에 대해 갖는 권한이 제한됩니다.

## IAM Access Analyzer를 사용하여 크로스 계정 액세스를 검토할 수 있습니다.
<a name="sqs-cross-account-findings"></a>

[AWS IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)를 사용하여 Amazon SQS 대기열 정책 및 AWS KMS 키 정책을 검토하고 Amazon SQS 대기열 또는 AWS KMS 키가 외부 엔터티에 액세스 권한을 부여할 때 알림을 받을 수 있습니다. IAM Access Analyzer는 신뢰 영역 외부의 엔터티와 공유되는 조직 및 계정의 [리소스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-resources.html)를 식별하는 데 도움이 됩니다. 이 신뢰 영역은 IAM Access Analyzer를 활성화할 때 지정하는 AWS Organizations 내의 AWS 계정 또는 조직일 수 있습니다.

IAM Access Analyzer는 로직 기반 추론을 사용하여 AWS 환경의 리소스 기반 정책을 분석하여 외부 보안 주체와 공유되는 리소스를 식별합니다. 신뢰 영역 외부에서 공유되는 리소스의 각 인스턴스에 대해 Access Analyzer는 결과를 생성합니다. [결과](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-findings.html)에는 액세스에 대한 정보와 액세스 권한이 부여되는 외부 보안 주체에 대한 정보가 포함됩니다. 결과를 검토하여 액세스가 의도한 안전한 액세스인지 또는 액세스가 의도하지 않은 보안 위험인지 확인할 수 있습니다. 의도하지 않은 액세스가 발생한 경우 영향을 받는 정책을 검토하고 수정합니다. AWS IAM Access Analyzer가 AWS 리소스에 대한 의도하지 않은 액세스를 식별하는 방법에 대한 자세한 내용은이 [블로그 게시물](https://aws.amazon.com/blogs/aws/identify-unintended-resource-access-with-aws-identity-and-access-management-iam-access-analyzer/)을 참조하세요.

 AWS IAM Access Analyzer에 대한 자세한 내용은 [AWS IAM Access Analyzer 설명서를](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) 참조하세요.