SQS policy with public access 이 페이지는 아직 한국어로 제공되지 않습니다. 번역 작업 중입니다.
현재 번역 프로젝트에 대한 질문이나 피드백이 있으신 경우
언제든지 연락주시기 바랍니다. Id: terraform-aws-sqs-policy-with-public-access
Provider: AWS
Platform: Terraform
Severity: Medium
Category: Access Control
Learn More Description This check looks for overly permissive Action statements and wildcards "Principal": "*" in AWS SQS queue policies, which may grant broad permissions to any user. If left unaddressed, this misconfiguration can allow unauthorized parties to perform any action on the queue, including viewing, deleting, or sending messages, which poses risks such as data leakage or denial of service. To reduce the attack surface, always scope the Principal attribute in policy documents to trusted AWS identities instead of using "*" or {"AWS": "*"}.
The following is an example of an insecure configuration:
resource "aws_sqs_queue_policy" "test" {
...
policy = <<EOF
{
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "sqs:*",
"Resource": "arn:aws:sqs:*:111122223333:queue1"
}]
}
EOF
}
A secure configuration uses a more restrictive principal, as shown below:
resource "aws_sqs_queue_policy" "test" {
...
policy = <<EOF
{
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:user/TrustedUser"},
"Action": "sqs:*",
"Resource": "arn:aws:sqs:*:111122223333:queue1"
}]
}
EOF
}
Compliant Code Examples resource "aws_sqs_queue" "q" {
name = "examplequeue"
}
resource "aws_sqs_queue_policy" "test" {
queue_url = aws_sqs_queue . q . id
policy = <<POLICY
{
"Version": "2012-10-17",
"Id": "Queue1_Policy_UUID",
"Statement": [{
"Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
"Effect": "Allow",
"Principal": "SOMETHING",
"Action": "sqs:*",
"Resource": "arn:aws:sqs:*:111122223333:queue1",
"Condition" : {
"IpAddress" : {
"aws:SourceIp":"192.168.143.0/24"
}
}
}]
}
POLICY
}
Non-Compliant Code Examples resource "aws_sqs_queue" "q" {
name = "examplequeue"
}
resource "aws_sqs_queue_policy" "test" {
queue_url = aws_sqs_queue . q . id
policy = <<EOF
{
"Version": "2012-10-17",
"Id": "Queue1_Policy_UUID",
"Statement": [{
"Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
"Effect": "Allow",
"Principal": "*",
"Action": "sqs:*",
"Resource": "arn:aws:sqs:*:111122223333:queue1",
"Condition" : {
"IpAddress" : {
"aws:SourceIp":"192.168.143.0/24"
}
}
}]
}
EOF
}
resource "aws_sqs_queue" "q_aws_array" {
name = "examplequeue_aws_array"
}
resource "aws_sqs_queue" "q_aws" {
name = "examplequeue_aws"
}
resource "aws_sqs_queue_policy" "test_aws" {
queue_url = aws_sqs_queue . q_aws . id
policy = <<EOF
{
"Version": "2012-10-17",
"Id": "Queue1_Policy_UUID",
"Statement": [{
"Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sqs:*",
"Resource": "arn:aws:sqs:*:111122223333:queue1",
"Condition" : {
"IpAddress" : {
"aws:SourceIp":"192.168.143.0/24"
}
}
}]
}
EOF
}
resource "aws_sqs_queue_policy" "test_aws_array" {
queue_url = aws_sqs_queue . q_aws_array . id
policy = <<EOF
{
"Version": "2012-10-17",
"Id": "Queue1_Policy_UUID",
"Statement": [{
"Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": "sqs:*",
"Resource": "arn:aws:sqs:*:111122223333:queue1",
"Condition" : {
"IpAddress" : {
"aws:SourceIp":"192.168.143.0/24"
}
}
}]
}
EOF
}
resource "aws_sqs_queue" "multi" {
name = "multi-statement-queue"
}
resource "aws_sqs_queue_policy" "multi" {
queue_url = aws_sqs_queue . multi . id
policy = <<EOF
{
"Version": "2012-10-17",
"Id": "MultiStatementPolicy",
"Statement": [
{
"Sid": "AllowSpecific",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:root"
},
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:us-east-1:123456789012:multi-statement-queue"
},
{
"Sid": "AllowAnyone",
"Effect": "Allow",
"Principal": "*",
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:us-east-1:123456789012:multi-statement-queue"
}
]
}
EOF
}