IAM 역할을 사용하여 특정 IP 주소에서 AWS Management Console로의 API 호출을 제한하려면 어떻게 해야 하나요?

3분 분량
0

AWS API 호출에 대한 액세스를 특정 IP 주소로 제한하고 싶습니다. AWS Identity and Access Management(IAM) 역할을 사용하여 AWS 관리 콘솔에 대한 API 호출의 액세스를 제한하려면 어떻게 해야 하나요?

간략한 설명

IAM 정책의 조건 요소에 aws:SourceIp 전역 조건 키를 사용하여 특정 IP 주소의 API 호출을 제한할 수 있습니다. 하지만 이렇게 하면 aws:ViaAWSService 전역 조건도 사용하지 않는 한, 사용자를 대신하여 호출을 수행하는 AWS CloudFormation과 같은 AWS 서비스에 대한 액세스가 거부됩니다. 자세한 내용은 AWS: 소스 IP를 기반으로 AWS에 대한 액세스 거부를 참조하세요.

예를 들어, AWS CloudFormation이 Amazon Elastic Compute Cloud(Amazon EC2)를 호출하여 인스턴스를 중지하도록 허용하는 AWS 서비스 역할이 있다고 가정합니다. 하지만 이 요청은 거부됩니다. 대상 서비스(Amazon EC2)가 원래 사용자가 아니라 호출 서비스(AWS CloudFormation)의 IP 주소를 인식하기 때문입니다. IAM 정책에서 평가하기 위해 호출 서비스를 통해 원본 IP 주소를 대상 서비스로 전달할 수 없습니다.

해결 방법

IAM 사용자에 연결된 IAM 정책과 동일한 권한 세트가 연결된 IAM 역할을 생성합니다. 이렇게 하면 요청이 지정된 IP 주소에서 오는 경우에만 sts:AssumeRole API 역할을 수임할 수 있는 권한이 IAM 사용자에게 부여됩니다. 이는 사용자가 역할을 수임하려고 할 때 수행되는 aws: SourceIp 제한 검사 때문입니다. 사용자가 IAM 역할을 맡으면 해당 역할에 연결된 IAM 정책의 권한을 획득합니다. 역할에 연결된 IAM 정책은 aws: SourceIp 조건 키를 사용하지 않으므로 AWS 서비스에 대한 액세스가 허용됩니다.

다음 IAM 정책을 생성한 후 이 정책을 프로그래밍 방식의 액세스 권한을 가진 IAM 사용자에 연결합니다. 이 IAM 정책을 사용하면 IAM 사용자가 Bob이라는 이름을 가진 역할을 수임(AssumeRole)할 수 있습니다. Bob에게는 추가 권한이 필요하지 않습니다. 다른 모든 필수 권한은 IAM 사용자가 Bob이라는 역할을 성공적으로 수임할 때 부여됩니다.

참고:

예제 IAM 사용자 정책

이 예제 정책은 계정의 리소스에 대해 API 호출을 실행할 수 있는 권한을 포함합니다.

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::EXAMPLEIAMACCOUNTID:role/Bob"
  }
}

IAM 역할 Bob을 생성하여 IAM 사용자에게 권한을 위임합니다. IAM 역할 만들기(콘솔 사용)의 지침을 따릅니다. AWS CLI 또는 API를 사용해도 됩니다.

참고:

  • 콘솔을 사용하여 역할을 생성하는 경우, Bob 신뢰 정책에 대한 이 예제와 유사하게 역할의 신뢰 정책을 수정하세요. AWS CLI create-role 또는 API CreateRole을 사용하여 신뢰 관계 정책 문서를 update-assume-role-policy 문서 파라미터의 값으로 전달할 수 있습니다.
  • 요청은 지정된 IP 주소 범위 103.15.250.0/24 또는 12.148.72.0/23에서 와야 합니다. 그렇지 않으면 IAM 사용자가 역할을 수임하고 API를 호출할 수 없습니다.

예제 IAM 역할 신뢰 정책

이 예제 신뢰 정책은 요청이 IP 주소 범위 "103.15.250.0/24" 또는 "12.148.72.0/23"에서 전송되는 경우 사용자가 역할을 맡도록 허용합니다.

참고: YOURIAMUSERNAME을 원하는 IAM 사용자 이름으로 바꿉니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "103.15.250.0/24",
            "12.148.72.0/23"
          ]
        }
      }
    }
  ]
}

참고: 이 해결 방법에서는 작업이 IAM 사용자가 아니라, 사용자가 수임하는 IAM 역할에 의해 수행되기 때문에 AWS CloudTrail 로그에 영향을 줍니다. IAM 사용자가 수행한 assumeRole API 호출은 CloudTrail 로그에서 IAM 사용자 아래에 로깅됩니다. IAM 역할이 수행하는 모든 추가적인 API 호출은 CloudTrail 로그에서 역할 이름 아래에 로깅됩니다.


관련 정보

AWS 전역 조건 컨텍스트 키

댓글 없음

관련 콘텐츠