투케이2K

170. (Aws/Amazon) [AWS IAM] AWS IAM 정책 시뮬레이터 기능 조회 SimulatePrincipalPolicy API 설명 정리 본문

Aws (Amazon)

170. (Aws/Amazon) [AWS IAM] AWS IAM 정책 시뮬레이터 기능 조회 SimulatePrincipalPolicy API 설명 정리

투케이2K 2026. 1. 11. 18:20
728x90

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

 

[설명 정리]

 

// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------

- 인프라 : Aws / Amazon Web Services


- 기술 구분 : Aws / IAM / SimulatePrincipalPolicy


- 사전) AWS IAM 자격 증명 설명 정리 : 

  >> AWS IAM 아이엠 계정 은 일부 AWS 서비스 및 리소스에 대한 액세스 권한을 가지고 있는 자격 증명입니다

  >> IAM 아이엠 계정 은 ROOT 계정 혹은 다른 IAM 계정으로부터 권한을 부여 받을 수 있으며, 주어진 권한 내의 작업만 할 수 있습니다

  >> IAM 아이엠 계정에서 할당 된 권한 외의 작업이 필요한 경우 ROOT 계정으로부터 추가 액세스 접근 권한을 부여 받아야 사용할 수 있습니다

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------

1. AWS SimulatePrincipalPolicy 는 AWS IAM 정책 시뮬레이터 기능을 프로그래밍 방식으로 호출하는 API입니다.


2. AWS SimulatePrincipalPolicy API 는 실제 권한을 수행하지는 않고, 지정된 IAM 주체(User/Role/Group)에 대해 주어진 AWS API 작업(Action)과 리소스를 평가하여 allowed, implicitDeny, explicitDeny 등으로 권한 결과를 알려줍니다.


3. AWS SimulatePrincipalPolicy API 호출 Request , Response 전문 예시 : 

  // ✅ Request 전문 예시
  https://iam.amazonaws.com/Action=SimulatePrincipalPolicy
  &ActionNames.member.1=s3:PutObject // ✅ ActionNames 평가할 API 작업 리스트. 최소 1개 이상 필요. 각 작업은 서비스 식별자를 포함
  &ActionNames.member.2=s3:GetObject
  &ActionNames.member.3=s3:DeleteObject
  &ResourceArns.member.1="arn:aws:s3:::my-test-bucket"
  &PolicySourceArn=arn:aws:iam:::user/twok // ✅ 권한을 평가할 IAM 주체(사용자/역할/그룹) ARN. 필수
  &PolicyInputList.member.1='{
    "Version":"2012-10-17",		 	 	 
    "Statement":{
      "Effect":"Allow",
      "Action":"s3:PutObject",
      "Resource":"arn:aws:s3:::my-test-bucket"
    }
  }'
  &Version=2010-05-08
  &AUTHPARAMS


  // ✅ Response 전문 예시
  <SimulatePrincipalPolicyResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
    <SimulatePrincipalPolicyResult>
      <IsTruncated>false</IsTruncated>
      <EvaluationResults>
        <member>
          <MatchedStatements>
            <member>
              <SourcePolicyId>PolicyInputList.1</SourcePolicyId>
              <EndPosition>
                <Column>4</Column>
                <Line>7</Line>
              </EndPosition>
              <StartPosition>
                <Column>16</Column>
                <Line>3</Line>
              </StartPosition>
            </member>
          </MatchedStatements>
          <MissingContextValues/>
          <EvalResourceName>arn:aws:s3:::my-test-bucket</EvalResourceName>
          <EvalDecision>allowed</EvalDecision>
          <EvalActionName>s3:PutObject</EvalActionName>
        </member>
        <member>
          <MatchedStatements>
            <member>
              <SourcePolicyId>AmazonS3ReadOnlyAccess</SourcePolicyId>
              <EndPosition>
                <Column>6</Column>
                <Line>11</Line>
              </EndPosition>
              <StartPosition>
                <Column>17</Column>
                <Line>3</Line>
              </StartPosition>
            </member>
          </MatchedStatements>
          <MissingContextValues/>
          <EvalResourceName>arn:aws:s3:::my-test-bucket</EvalResourceName>
          <EvalDecision>allowed</EvalDecision>
          <EvalActionName>s3:GetObject</EvalActionName>
        </member>
        <member>
          <MatchedStatements/>
          <MissingContextValues/>
          <EvalResourceName>arn:aws:s3:::my-test-bucket</EvalResourceName>
          <EvalDecision>implicitDeny</EvalDecision>
          <EvalActionName>s3:DeleteObject</EvalActionName>
        </member>
      </EvaluationResults>
    </SimulatePrincipalPolicyResult>
    <ResponseMetadata>
      <RequestId>004d7059-4c14-11e5-b121-bd8c7EXAMPLE</RequestId>
    </ResponseMetadata>
  </SimulatePrincipalPolicyResponse>


4. AWS SimulatePrincipalPolicy 호출 주요 에러 코드 정리 : 

  >> InvalidInput : Http Code 400 : 파라미터가 잘못되었거나 범위를 벗어남
  
  >> NoSuchEntity : Http Code 404 : 지정된 PolicySourceArn 등에 해당 주체가 없음
  
  >> PolicyEvaluation : Http Code 500 : 정책 평가 중 내부 오류 발생


5. AWS SimulatePrincipalPolicy 호출 자바스크립트 예시 코드 : 

  <!-- [CDN 주소 설정] -->

  <script src="https://sdk.amazonaws.com/js/aws-sdk-2.1416.0.min.js"></script>


  // [전역 변수 선언]
  const accessKey = 'AK..A6'; 
  const secretKey = 'mP..5J';

  const policySourceArn = "arn:aws:iam::123456789012:user/2k@twok.com-CLI"


  // -----------------------------------------
  // [AWS.config 지정]
  // -----------------------------------------       
  AWS.config.update({              
    accessKeyId: accessKey, 
    secretAccessKey: secretKey
  });


  // -----------------------------------------
  // [AWS 객체 생성]
  // -----------------------------------------
  const aws = new AWS.IAM();


  // -----------------------------------------
  // [요청 파라미터 생성]
  // -----------------------------------------
  var params = {
    PolicySourceArn: policySourceArn,
    
    // [심플 조회]
    /*
    ActionNames: [
      "s3:PutObject",
      "iot:Connect",
      "iot:Publish"
    ],
    ResourceArns: ["*"]
    // */


    // [* 조회]
    //*
    ActionNames: [

      // === IAM / Security ===
      "iam:*",
      "sts:*",
      "organizations:*",
      "kms:*",
      "cloudtrail:*",
      "config:*",
      "access-analyzer:*",
      "auditmanager:*",
      "securityhub:*",
      "guardduty:*",
      "detective:*",
      "macie2:*",
      "shield:*",
      "waf:*",
      "wafv2:*",
      "secretsmanager:*",
      "ssm:*",
      "backup:*",

      // === Storage ===
      "s3:*",
      "efs:*",
      "fsx:*",
      "storagegateway:*",
      "backup-storage:*",

      // === Compute ===
      "ec2:*",
      "lambda:*",
      "autoscaling:*",
      "elasticloadbalancing:*",
      "batch:*",
      "lightsail:*",
      "outposts:*",

      // === Containers ===
      "ecs:*",
      "eks:*",
      "ecr:*",
      "appmesh:*",

      // === Networking ===
      "route53:*",
      "route53resolver:*",
      "directconnect:*",
      "globalaccelerator:*",
      "apigateway:*",
      "appsync:*",
      "vpc-lattice:*",

      // === Databases ===

      "dynamodb:*",
      "rds:*",
      "redshift:*",
      "elasticache:*",
      "neptune:*",
      "timestream:*",
      "qldb:*",
      "keyspaces:*",

      // === Analytics / Streaming ===
      "athena:*",
      "glue:*",
      "emr:*",
      "lakeformation:*",
      "kinesis:*",
      "kinesisanalytics:*",

      // === Kinesis Video Streams ===
      "kinesisvideo:*",
      "kinesisvideoarchivedmedia:*",
      "kinesisvideomedia:*",

      // === Messaging / Integration ===
      "sns:*",
      "sqs:*",
      "events:*",
      "eventbridge:*",
      "mq:*",
      "stepfunctions:*",

      // === Monitoring / Ops ===
      "cloudwatch:*",
      "logs:*",
      "xray:*",
      "application-autoscaling:*",
      "health:*",

      // === DevOps / CI-CD ===
      "cloudformation:*",
      "codecommit:*",
      "codedeploy:*",
      "codebuild:*",
      "codepipeline:*",
      "codestar:*",
      "codestar-connections:*",
      "codestar-notifications:*",

      // === AI / ML ===
      "sagemaker:*",
      "rekognition:*",
      "comprehend:*",
      "textract:*",
      "polly:*",
      "transcribe:*",
      "translate:*",
      "bedrock:*",

      // === Business / End User ===
      "quicksight:*",
      "workspaces:*",
      "workdocs:*",
      "connect:*",
      "chime:*",

      // === IoT ===
      "iot:*",
      "iotanalytics:*",
      "iotwireless:*",
      "greengrass:*",
      "freertos:*",

      // === Migration / Transfer ===
      "datasync:*",
      "migrationhub:*",
      "application-discovery:*",
      "transfer:*"

    ],
    ResourceArns: ["*"]
    // */
  };


  // -----------------------------------------
  // [SimulatePrincipalPolicy] : AWS IAM 정책 시뮬레이터 기능 조회 수행
  // -----------------------------------------
  // AWS 참고 사이트 : https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html
  // -----------------------------------------
  // 권한 요구사항: iam:SimulatePrincipalPolicy 권한이 필요.
  // -----------------------------------------
  // 리전 무관: 모든 리전에서 동일하게 동작.
  // -----------------------------------------
  aws.simulatePrincipalPolicy( params , function(err, data) { 
    if (err) {
      console.error("[simulatePrincipalPolicy] : [Error] : ", err);

      // ---------------------------------------------
      // ✅ [주요 에러 정리]
      // ---------------------------------------------
      // InvalidInput : 400 : 파라미터가 잘못되었거나 범위를 벗어남
      // NoSuchEntity : 404 : 지정된 PolicySourceArn 등에 해당 주체가 없음
      // PolicyEvaluation : 500 : 정책 평가 중 내부 오류 발생
      // ---------------------------------------------

    } else {
      console.log("[simulatePrincipalPolicy] : [Success] : ", JSON.stringify(data));

      // ---------------------------------------------
      // ✅ [로그 출력 예시 첨부]
      // ---------------------------------------------
      /*
      {
        "ResponseMetadata": {
          "RequestId": "1b078029-d297-4755-afa2-7a7ce4fd0089"
        },
        "EvaluationResults": [
          {
            "EvalActionName": "iam:*",
            "EvalResourceName": "*",
            "EvalDecision": "implicitDeny",
            "MatchedStatements": [],
            "MissingContextValues": [
              "ec2:ResourceTag/eks:eni:owner",
              "iam:AWSServiceName",
              "aws:username",
              "events:ManagedBy",
              "aws:ResourceTag/red-hat",
              "aws:CalledViaLast",
              "codestar-notifications:NotificationsForResource",
              "iam:PassedToService"
            ],
            "OrganizationsDecisionDetail": {
              "AllowedByOrganizations": true
            },
            "ResourceSpecificResults": []
          },
          {
            "EvalActionName": "waf:*",
            "EvalResourceName": "*",
            "EvalDecision": "implicitDeny",
            "MatchedStatements": [],
            "MissingContextValues": [
              "ec2:ResourceTag/eks:eni:owner",
              "iam:AWSServiceName",
              "aws:username",
              "events:ManagedBy",
              "aws:ResourceTag/red-hat",
              "aws:CalledViaLast",
              "codestar-notifications:NotificationsForResource",
              "iam:PassedToService"
            ],
            "OrganizationsDecisionDetail": {
              "AllowedByOrganizations": true
            },
            "ResourceSpecificResults": []
          },
          {
            "EvalActionName": "secretsmanager:*",
            "EvalResourceName": "*",
            "EvalDecision": "allowed",
            "MatchedStatements": [
              {
                "SourcePolicyId": "group_B2C_Platform_Development_Team_1-2_Custom_Add_Allow_Policy",
                "SourcePolicyType": "IAM Policy",
                "StartPosition": {
                  "Line": 3,
                  "Column": 16
                },
                "EndPosition": {
                  "Line": 40,
                  "Column": 4
                }
              }
            ],
            "MissingContextValues": [],
            "OrganizationsDecisionDetail": {
              "AllowedByOrganizations": true
            },
            "ResourceSpecificResults": []
          }
        ],
        "IsTruncated": true,
        "Marker": "PS:58"
      }
      */
      // ---------------------------------------------

    }

  });

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[로그인 계정] ROOT 루트 계정 로그인과 IAM 아이엠 계정 로그인 차이 설명 정리

https://kkh0977.tistory.com/7618

https://blog.naver.com/kkh0977/223731955897?trackingCode=blog_bloghome_searchlist


[Aws 사이트 : SimulatePrincipalPolicy 설명 정리]

https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html


[AWS] [Lambda] 런타임 Python 3.13 - boto3 모듈 사용해 AWS STS 임시 정보 호출 람다 생성

https://blog.naver.com/kkh0977/223962739399?trackingCode=blog_bloghome_searchlist


[자바스크립트 AWS STS 임시 자격 증명 사용해 S3 Get PreSignedUrl 프리 사인 URL 주소 생성]

https://kkh0977.tistory.com/8151

https://blog.naver.com/kkh0977/223938740405

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments