내용으로 건너뛰기

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

3분 분량
0

API 호출에서 AWS Management Console에 대한 액세스를 제한하는 AWS Identity and Access Management(IAM) 역할을 수행하고자 합니다.

간략한 설명

IAM 정책의 조건 요소에 aws:SourceIp 글로벌 조건 키를 사용하여 특정 IP 주소에서의 API 호출을 제한할 수 있습니다. 하지만 이렇게 하면 사용자를 대신하여 호출을 수행하는 AWS CloudFormation과 같은 AWS 서비스에 대한 액세스가 거부됩니다. 단 aws:ViaAWSService 글로벌 조건을 함께 사용하는 경우는 예외입니다. 자세한 내용은 AWS: 소스 IP를 기반으로 AWS에 대한 액세스 거부를 참조하십시오.

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

해결 방법

IAM 사용자에게 연결된 IAM 정책과 동일한 권한 세트가 연결된 IAM 역할을 생성합니다. 이렇게 하면 요청이 지정된 IP 주소에서 오는 경우에만 IAM 사용자에게 sts:AssumeRole API 역할을 맡을 수 있는 권한이 부여됩니다. 이는 사용자가 역할을 맡으려고 할 때 수행되는 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 호출은 IAM 사용자 아래의 CloudTrail 로그에 기록됩니다. IAM 역할로 수행한 추가 API 호출은 역할 이름 아래의 CloudTrail 로그에 기록됩니다.

관련 정보

AWS 글로벌 조건 컨텍스트 키

AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠