교차 서비스 혼동된 대리인 방지

교차 서비스 혼동된 대리인 방지 (Cross-service confused deputy prevention)

혼동된 대리인 문제(confused deputy problem)란 무엇인지, 그리고 리소스 정책에서 aws:SourceArn과 aws:SourceAccount 글로벌 조건 컨텍스트 키를 사용해 이를 방지하는 방법을 함께 살펴볼게요.

출처: 문서

본문

혼동된 대리인 문제(confused deputy problem)는 작업을 수행할 권한이 없는 엔티티가 더 많은 권한을 가진 엔티티를 강제로 그 작업을 수행하도록 만드는 보안 문제예요. AWS에서 교차 서비스 가장(impersonation)은 혼동된 대리인 문제를 일으킬 수 있어요. 교차 서비스 가장은 한 서비스(호출 서비스, calling service)가 다른 서비스(피호출 서비스, called service)를 호출할 때 발생할 수 있어요. 호출 서비스는 자신의 권한을 사용해 다른 고객의 리소스에 대해, 그렇지 않으면 접근 권한이 없어야 할 방식으로 동작하도록 조작될 수 있어요. 이를 방지하기 위해 AWS는 서비스 보안 주체(service principals)에 권한을 부여한 모든 서비스에 대해 데이터를 보호할 수 있는 도구를 제공해요.

리소스 정책에서 aws:SourceArn 또는 aws:SourceAccount 글로벌 조건 컨텍스트 키를 사용해, Amazon ECR이 다른 서비스에 리소스에 부여하는 권한을 제한하는 것을 권장해요. 교차 서비스 액세스에 하나의 리소스만 연결되게 하려면 aws:SourceArn 을 사용해요. 해당 계정의 어떤 리소스든 교차 서비스 사용과 연결되게 허용하려면 aws:SourceAccount 를 사용해요.

혼동된 대리인 문제를 방지하는 가장 효과적인 방법은 리소스의 전체 ARN과 함께 aws:SourceArn 글로벌 조건 컨텍스트 키를 사용하는 것이에요. 리소스의 전체 ARN을 모르거나 여러 리소스를 지정하는 경우에는 ARN의 알 수 없는 부분에 와일드카드 문자(*)를 사용해 aws:SourceArn 글로벌 조건 컨텍스트 키를 사용해요. 예를 들어 arn:aws:servicename:region:123456789012:* 와 같이요. Amazon S3 버킷 ARN처럼 aws:SourceArn 값에 계정 ID가 포함되지 않는 경우에는 권한을 제한하기 위해 두 글로벌 조건 컨텍스트 키를 모두 사용해야 해요. aws:SourceArn 의 값은 ResourceDescription 이어야 해요.

다음 예제는 Amazon ECR 리포지토리 정책에서 aws:SourceArn 과 aws:SourceAccount 글로벌 조건 컨텍스트 키를 사용해, AWS CodeBuild가 해당 서비스와의 통합에 필요한 Amazon ECR API 작업에 접근할 수 있게 하면서도 혼동된 대리인 문제를 방지하는 방법을 보여줘요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CodeBuildAccess",
      "Effect": "Allow",
      "Principal": {
        "Service": "codebuild.amazonaws.com"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:codebuild:us-east-1:123456789012:project/project-name"
        },
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        }
      }
    }
  ]
}

더 알아보기 (Learn more)