IAM 역할 문제 해결

IAM 역할 문제 해결

이 정보를 사용해 IAM 역할로 작업할 때 겪을 수 있는 흔한 문제를 진단·해결할 수 있어요.

출처: 문서

본문

이 정보를 사용해 IAM 역할로 작업할 때 겪을 수 있는 흔한 문제를 진단·해결할 수 있어요.

역할을 수임할 수 없어요

다음을 확인하세요.

  • 역할 세션 내에서 현재 역할을 다시 수임하도록 허용하려면 역할 신뢰 정책의 주체(principal)로 역할 ARN이나 AWS 계정 ARN을 지정하세요. Amazon EC2, Amazon ECS, Amazon EKS, Lambda 같이 컴퓨팅 리소스를 제공하는 AWS 서비스는 임시 자격 증명을 제공하고 이 자격 증명을 자동으로 갱신합니다. 이로써 항상 유효한 자격 증명 집합을 갖게 됩니다. 이 서비스들의 경우 임시 자격 증명을 얻기 위해 현재 역할을 다시 수임할 필요가 없습니다. 다만 세션 태그나 세션 정책을 전달하려면 현재 역할을 다시 수임해야 합니다. 신뢰 정책에 주체 역할 ARN이나 AWS 계정 ARN을 추가하는 방법은 역할 신뢰 정책 업데이트를 참고하세요.
  • AWS Management Console로 역할을 수임할 때는 역할 이름을 정확히 사용하세요. 역할을 수임할 때 역할 이름은 대소문자를 구분합니다.
  • AWS STS API나 AWS CLI로 역할을 수임할 때는 ARN에서 역할 이름을 정확히 사용하세요. 역할을 수임할 때 역할 이름은 대소문자를 구분합니다.
  • SAML 기반 페더레이션 자격 증명 공급자와 SAML 암호화를 사용해 역할을 수임할 때는 SAML 자격 증명 공급자의 유효한 개인 복호화 키를 업로드했는지 확인하세요. 자세한 내용은 SAML 암호화 키 관리를 참고하세요.
  • IAM 정책이 수임하려는 역할에 대해 sts:AssumeRole을 호출할 권한을 부여하는지 확인하세요. IAM 정책의 Action 요소는 AssumeRole 액션을 호출하도록 허용해야 합니다. 또한 IAM 정책의 Resource 요소는 수임하려는 역할을 지정해야 합니다. 예를 들어 Resource 요소는 역할을 Amazon Resource Name(ARN) 또는 와일드카드(*)로 지정할 수 있습니다. 예를 들어 여러분에게 적용되는 최소한 하나의 정책은 다음과 유사한 권한을 부여해야 합니다.
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume"
  • IAM 자격 증명이 IAM 정책이 요구하는 태그로 태그 지정되어 있는지 확인하세요. 예를 들어 다음 정책 권한에서 Condition 요소는 역할 수임을 요청하는 주체인 여러분이 특정 태그를 가져야 한다고 요구합니다. department = HR 또는 department = CS로 태그 지정되어 있어야 합니다. 그렇지 않으면 역할을 수임할 수 없어요. IAM 사용자·역할 태그 지정에 대해 알아보려면 AWS Identity and Access Management 리소스용 태그를 참고하세요.
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "*",
    "Condition": {"StringEquals": {"aws:PrincipalTag/department": [
            "HR",
            "CS"
        ]}}
  • 역할 신뢰 정책에 지정된 모든 조건을 충족하는지 확인하세요. Condition은 만료 날짜, 외부 ID, 또는 특정 IP 주소에서만 요청이 와야 한다는 조건을 지정할 수 있습니다. 다음 예시를 생각해 보세요. 특정 날짜 이후라면 정책은 결코 일치하지 않아 역할 수임 권한을 부여할 수 없습니다.
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume"
    "Condition": {
        "DateLessThan" : {
            "aws:CurrentTime" : "2016-05-01T12:00:00Z"
        }
    }
  • AssumeRole을 호출하는 AWS 계정이 수임하는 역할의 신뢰된 엔터티인지 확인하세요. 신뢰된 엔터티는 역할 신뢰 정책의 Principal로 정의됩니다. 다음 예시는 수임하려는 역할에 연결된 신뢰 정책입니다. 이 예시에서 로그인한 IAM 사용자가 있는 계정 ID는 123456789012여야 합니다. 역할 신뢰 정책의 Principal 요소에 계정 번호가 나열되어 있지 않으면 역할을 수임할 수 없습니다. 접근 정책에서 부여된 권한은 중요하지 않습니다. 이 예시 정책은 권한을 2017년 7월 1일부터 2017년 12월 31일(UTC) 사이에 발생한 액션으로 제한합니다. 이 날짜 전후로 로그인하면 정책이 일치하지 않아 역할을 수임할 수 없습니다.
    "Effect": "Allow",
    "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
    "Action": "sts:AssumeRole",
    "Condition": {
      "DateGreaterThan": {"aws:CurrentTime": "2017-07-01T00:00:00Z"},
      "DateLessThan": {"aws:CurrentTime": "2017-12-31T23:59:59Z"}
    }
  • 소스 자격 증명(Source Identity) — 관리자는 역할이 AWS에서 작업을 수행하는 사람·애플리케이션을 식별하는 사용자 지정 문자열인 소스 자격 증명을 전달하도록 요구하도록 역할을 구성할 수 있습니다. 수임하는 역할이 소스 자격 증명 설정을 요구하는지 확인하세요. 소스 자격 증명에 대한 자세한 내용은 수임된 역할로 수행한 작업 모니터링·제어를 참고하세요.

AWS 계정에 새 역할이 나타났어요

일부 AWS 서비스는 서비스에 직접 연결된 고유한 유형의 서비스 역할 사용을 요구합니다. 이 서비스 연결 역할은 서비스가 미리 정의하며 서비스가 필요로 하는 모든 권한을 포함합니다. 이렇게 하면 필요한 권한을 수동으로 추가할 필요가 없어 서비스 설정이 더 쉬워집니다. 서비스 연결 역할에 대한 일반 정보는 서비스 연결 역할 생성을 참고하세요.

서비스가 서비스 연결 역할을 지원하기 시작할 때 이미 그 서비스를 사용 중일 수 있습니다. 그렇다면 계정에 새 역할이 생겼다는 이메일을 받을 수 있어요. 이 역할은 서비스가 여러분을 대신해 작업을 수행하는 데 필요한 모든 권한을 포함합니다. 이 역할을 지원하기 위해 조치할 것은 없습니다. 다만 계정에서 역할을 삭제하지 마세요. 삭제하면 서비스가 AWS 리소스에 접근하는 데 필요한 권한이 제거될 수 있습니다. IAM 콘솔의 Roles(역할) 페이지로 가면 계정의 서비스 연결 역할을 볼 수 있습니다. 서비스 연결 역할은 표의 Trusted entities(신뢰된 엔터티) 열에 (Service-linked role) 이라고 표시됩니다.

서비스 연결 역할을 지원하는 서비스에 대한 정보는 IAM과 함께 작동하는 AWS 서비스를 참고하고 Service-Linked Role 열에 Yes가 있는 서비스를 찾으세요. 서비스용 서비스 연결 역할 사용에 대한 정보는 Yes 링크를 선택합니다.

AWS 계정에서 역할을 편집·삭제할 수 없어요

IAM에서 서비스 연결 역할의 권한을 삭제하거나 편집할 수 없습니다. 이 역할에는 서비스가 여러분을 대신해 작업을 수행하기 위해 필요한 미리 정의된 신뢰·권한이 포함됩니다. IAM 콘솔, AWS CLI, API를 사용해 서비스 연결 역할의 설명만 편집할 수 있어요. 콘솔의 Roles(역할) 페이지로 가면 계정의 서비스 연결 역할을 볼 수 있습니다. 서비스 연결 역할은 표의 Trusted entities(신뢰된 엔터티) 열에 (Service-linked role) 이라고 표시됩니다. 역할의 Summary(요약) 페이지 배너도 그 역할이 서비스 연결 역할임을 나타냅니다. 이 역할은 연결된 서비스가 해당 작업을 지원하는 경우에만 그 서비스를 통해 관리·삭제할 수 있습니다. 서비스 연결 역할을 수정·삭제하면 서비스가 AWS 리소스에 접근하는 데 필요한 권한이 제거될 수 있으므로 주의하세요.

서비스 연결 역할을 지원하는 서비스에 대한 정보는 IAM과 함께 작동하는 AWS 서비스를 참고하고 Service-Linked Role 열에 Yes가 있는 서비스를 찾으세요.

iam:PassRole을 수행하도록 인증되지 않았어요

서비스 연결 역할을 만들 때 역할을 서비스에 전달(pass)할 권한이 있어야 합니다. 일부 서비스는 해당 서비스에서 작업을 수행할 때 계정에 서비스 연결 역할을 자동으로 만듭니다. 예를 들어 Amazon EC2 Auto Scaling은 Auto Scaling 그룹을 처음 만들 때 AWSServiceRoleForAutoScaling 서비스 연결 역할을 만들어 줍니다. PassRole 권한 없이 Auto Scaling 그룹을 만들려고 하면 다음 오류를 받습니다.

ClientError: An error occurred (AccessDenied) when calling the PutLifecycleHook operation: User: arn:aws:sts::111122223333:assumed-role/Testrole/Diego is not authorized to perform: iam:PassRole on resource: arn:aws:iam::111122223333:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

이 오류를 해결하려면 관리자에게 iam:PassRole 권한을 추가해 달라고 요청하세요.

서비스 연결 역할을 지원하는 서비스에 대해 알아보려면 IAM과 함께 작동하는 AWS 서비스를 참고하세요. 서비스가 자동으로 서비스 연결 역할을 만드는지 알아보려면 Yes 링크를 선택해 해당 서비스의 서비스 연결 역할 문서를 봅니다.

12시간 세션으로 역할을 수임할 수 없나요? (AWS CLI, AWS API)

AWS STS AssumeRole* API나 assume-role* CLI 작업으로 역할을 수임할 때 DurationSeconds 파라미터 값을 지정할 수 있습니다. 900초(15분)부터 역할의 최대 세션 지속 시간 설정까지 값을 지정할 수 있습니다. 이 설정보다 높은 값을 지정하면 작업이 실패합니다. 이 설정은 최대 12시간이 될 수 있습니다. 예를 들어 세션 지속 시간 12시간을 지정했지만 관리자가 최대 세션 지속 시간을 6시간으로 설정했다면 작업이 실패합니다. 역할의 최대 값 보기 방법은 역할의 최대 세션 지속 시간 업데이트를 참고하세요.

역할 체이닝(역할로 두 번째 역할 수임)을 사용하면 세션이 최대 1시간으로 제한됩니다. 그런 다음 DurationSeconds 파라미터로 1시간보다 큰 값을 제공하면 작업이 실패합니다.

IAM 콘솔에서 역할을 전환하려고 할 때 오류가 발생해요

Switch Role(역할 전환) 페이지에 입력한 정보가 역할의 정보와 일치해야 합니다. 그렇지 않으면 작업이 실패하고 다음 오류를 받습니다.

Invalid information in one or more fields. Check your information or contact your administrator.

이 오류를 받으면 다음 정보가 올바른지 확인하세요.

  • 계정 ID 또는 별칭 — AWS 계정 ID는 12자리 숫자입니다. 계정에는 AWS 계정 ID 대신 회사 이름 같은 친숙한 식별자인 별칭이 있을 수 있어요. 이 필드에 계정 ID 또는 별칭 중 하나를 사용할 수 있습니다.
  • 역할 이름 — 역할 이름은 대소문자를 구분합니다. 계정 ID와 역할 이름은 역할에 구성된 것과 일치해야 합니다.

계속 오류 메시지가 표시되면 관리자에게 연락해 앞선 정보를 확인하세요. 역할 신뢰 정책이나 IAM 사용자 정책이 접근을 제한할 수 있습니다. 관리자는 이 정책들의 권한을 확인할 수 있습니다.

내 역할에 작업을 수행하도록 허용하는 정책이 있는데 "access denied"가 발생해요

역할 세션이 세션 정책으로 제한될 수 있습니다. AWS STS로 임시 보안 자격 증명을 요청할 때 프로그래밍 방식으로 인라인·관리형 세션 정책을 선택적으로 전달할 수 있습니다. 세션 정책은 역할의 임시 자격 증명 세션을 프로그래밍 방식으로 만들 때 파라미터로 전달하는 고급 정책입니다. Policy 파라미터로 단일 JSON 인라인 세션 정책 문서를 전달할 수 있습니다. PolicyArns 파라미터로 최대 10개의 관리형 세션 정책을 지정할 수 있습니다. 결과 세션의 권한은 역할의 자격 증명 기반 정책과 세션 정책의 교집합입니다. 또는 관리자·사용자 지정 프로그램이 임시 자격 증명을 제공할 때 접근을 제한하는 세션 정책을 포함했을 수 있습니다.

서비스가 역할의 기본 정책 버전을 생성하지 않았어요

서비스 역할은 서비스가 계정에서 여러분을 대신해 작업을 수행하기 위해 수임하는 역할입니다. 일부 AWS 서비스 환경을 설정할 때 서비스가 수임할 역할을 정의해야 합니다. 어떤 경우에는 서비스가 서비스 역할과 그 정책을 IAM에 자동 생성합니다. IAM 안에서 서비스 역할과 그 정책을 수정·삭제할 수 있지만, AWS는 이를 권장하지 않습니다. 역할과 정책은 그 서비스만 사용하도록 설계되었습니다. 정책을 편집하고 다른 환경을 설정하면, 서비스가 같은 역할·정책을 사용하려고 할 때 작업이 실패할 수 있습니다.

예를 들어 AWS CodeBuild를 처음 사용하면 서비스는 codebuild-RWBCore-service-role이라는 역할을 만듭니다. 그 서비스 역할은 codebuild-RWBCore-managed-policy라는 정책을 사용합니다. 정책을 편집하면 새 버전이 만들어져 기본 버전으로 저장됩니다. AWS CodeBuild에서 후속 작업을 수행하면 서비스가 정책을 업데이트하려고 시도할 수 있습니다. 그러면 다음 오류를 받습니다.

codebuild.amazon.com did not create the default version (V2) of the codebuild-RWBCore-managed-policy policy that is attached to the codebuild-RWBCore-service-role role. To continue, detach the policy from any other identities and then delete the policy and the role.

이 오류를 받으면 서비스 작업을 계속하기 전에 IAM에서 변경해야 합니다. 먼저 정책의 기본 버전을 V1로 설정하고 작업을 다시 시도하세요. V1이 이전에 삭제되었거나 V1 선택이 작동하지 않으면 기존 정책과 역할을 정리하고 삭제하세요.

관리형 정책 편집에 대한 자세한 내용은 고객 관리형 정책 편집(콘솔)을, 정책 버전에 대한 자세한 내용은 IAM 정책 버전 관리를 참고하세요.

서비스 역할과 그 정책 삭제

  1. AWS Management Console에 로그인하고 IAM 콘솔을 https://console.aws.amazon.com/iam/에서 엽니다.
  2. 탐색 창에서 Policies(정책) 을 선택합니다.
  3. 정책 목록에서 삭제할 정책의 이름을 선택합니다.
  4. Entities attached(연결된 엔터티) 탭을 선택해 이 정책을 사용하는 IAM 사용자·그룹·역할을 봅니다. 이 자격 증명 중 하나라도 정책을 사용한다면 다음 작업을 완료하세요.
    • 필요한 권한이 있는 새 관리형 정책을 만듭니다. 작업 전후에 자격 증명이 같은 권한을 갖도록 기존 정책에서 JSON 정책 문서를 복사합니다. 그런 다음 JSON 편집기로 정책 생성에서 설명한 대로 새 관리형 정책을 만들고 JSON 문서를 붙여넣습니다.
    • 영향받는 각 자격 증명에 대해 새 정책을 연결한 뒤 이전 정책을 분리합니다. 자세한 내용은 IAM 자격 증명 권한 추가·제거를 참고하세요.
  5. 탐색 창에서 Roles(역할) 을 선택합니다.
  6. 역할 목록에서 삭제할 역할의 이름을 선택합니다.
  7. Trust relationships(신뢰 관계) 탭을 선택해 어떤 엔터티가 역할을 수임할 수 있는지 봅니다. 서비스 외 다른 엔터티가 나열되어 있다면 다음 작업을 완료하세요.
    • 그 엔터티를 신뢰하는 새 역할을 만듭니다. 자세한 내용은 사용자용 역할 생성을 참고하세요.
    • 이전 단계에서 만든 정책. 그 단계를 건너뛰었다면 지금 새 관리형 정책을 만드세요.
    • 역할을 수임하던 모든 사람에게 더 이상 그렇게 할 수 없다고 알리고, 새 역할 수임 방법과 같은 권한을 갖는 방법에 대한 정보를 제공합니다.
  8. 정책을 삭제합니다. 자세한 내용은 고객 관리형 정책 삭제(콘솔)를 참고하세요.
  9. 역할을 삭제합니다. 자세한 내용은 IAM 역할 삭제(콘솔)를 참고하세요.
"Principal": { "AWS": "arn:aws:iam::123456789012:root" }

콘솔에 서비스 역할의 사용 사례가 없어요

일부 서비스는 서비스가 여러분을 대신해 작업을 수행할 권한을 부여하기 위해 서비스 역할을 수동으로 만들 것을 요구합니다. IAM 콘솔에 서비스가 나열되어 있지 않으면 신뢰된 주체로 서비스를 수동으로 나열해야 합니다. 사용 중인 서비스·기능의 문서에 서비스를 신뢰된 주체로 나열하는 지침이 없다면 페이지에 피드백을 제공하세요.

서비스 역할을 수동으로 만들려면 역할을 수임할 서비스의 서비스 주체를 알아야 합니다. 서비스 주체는 서비스에 권한을 부여하는 데 사용되는 식별자입니다. 서비스 주체는 서비스가 정의합니다.

일부 서비스의 서비스 주체는 다음을 확인해 찾을 수 있습니다.

  1. IAM과 함께 작동하는 AWS 서비스를 엽니다.
  2. 서비스의 Service-linked roles(서비스 연결 역할) 열에 Yes가 있는지 확인합니다.
  3. Yes 링크를 선택해 그 서비스의 서비스 연결 역할 문서를 봅니다.
  4. 그 서비스의 Service-linked role permissions(서비스 연결 역할 권한) 섹션에서 서비스 주체를 확인합니다.

서비스 역할은 AWS CLI 명령이나 AWS API 작업으로 수동으로 만들 수 있습니다. IAM 콘솔로 서비스 역할을 수동으로 만들려면 다음 작업을 완료하세요.

  • 계정 ID를 사용해 IAM 역할을 만듭니다. 정책을 연결하거나 권한을 부여하지 마세요. 자세한 내용은 IAM 사용자에게 권한을 부여하는 역할 생성을 참고하세요.
  • 역할을 열고 신뢰 관계를 편집합니다. 계정을 신뢰하는 대신 역할이 서비스를 신뢰해야 합니다. 예를 들어 다음 Principal 요소를 업데이트합니다.
"Principal": { "Service": "iam.amazonaws.com" }

주체를 여러분의 서비스 값(예: IAM)으로 변경합니다.

더 알아보기 (Learn more)