IAM 역할 문제 해결 - AWS Identity and Access Management

IAM 역할 문제 해결

여기 정보를 사용하여 IAM 역할 작업 시 공통적으로 발생할 수 있는 문제를 진단 및 수정하십시오.

역할을 수임할 수 없음

다음을 확인하십시오.

  • 역할 이름은 대소문자를 구분하므로 역할 이름을 정확하게 사용하십시오.

  • 해당 IAM 정책에서 사용자가 위임하려는 역할에 대해 sts:AssumeRole을 호출할 수 있는 권한을 부여하는지 확인하십시오. IAM 정책의 Action 요소는 AssumeRole 액션을 호출할 수 있어야 합니다. 또한 IAM 정책의 Resource 요소는 위임하려는 역할을 지정해야 합니다. 예를 들어 Resource 요소는 ARN(Amazon Resource Name) 또는 와일드카드(*)를 통해 역할을 지정할 수 있습니다. 예를 들어 사용자에게 적용되는 하나 이상의 정책은 다음과 유사한 권한을 부여해야 합니다.

    "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 사용자 및 역할 태그 지정에 대한 자세한 내용은 IAM 사용자 및 역할 태그 지정 단원을 참조하십시오.

    "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"} }

내 AWS 계정에 표시되는 새 역할

일부 AWS 서비스에서는 해당 서비스에 직접 연결된 고유한 유형의 서비스 역할을 사용해야 합니다. 이 서비스 연결 역할은 해당 서비스에서 사전 정의하며 해당 서비스에 필요한 모든 권한을 포함합니다. 필요한 권한을 수동으로 추가할 필요가 없으므로 서비스를 더 쉽게 설정할 수 있습니다. 서비스 연결 역할에 대한 일반적인 내용은 서비스 연결 역할 사용 단원을 참조하십시오.

서비스 연결 역할을 지원하려 할 때 이미 서비스를 사용 중일 수 있습니다. 그런 경우 계정의 새 역할에 대해 알리는 이메일을 받을 수 있습니다. 이 역할에는 서비스에서 사용자를 대신하여 작업을 수행하는 데 필요한 모든 권한이 포함되어 있습니다. 따라서 이 역할을 지원하기 위해 별도의 조치를 취할 필요가 없습니다. 그러나 계정에서 역할을 삭제하면 안 됩니다. 그렇게 하면 서비스가 AWS 리소스에 액세스하는 데 필요한 권한을 제거할 수 있습니다. IAM 콘솔의 IAM 역할 페이지에서 계정의 서비스 연결 역할을 볼 수 있습니다. 서비스 연결 역할은 테이블의 Trusted entities(신뢰할 수 있는 개체) 열에 (Service-linked role)((서비스 연결 역할))로 표시됩니다.

서비스 연결 역할을 지원하는 서비스에 대한 자세한 내용은 IAM으로 작업하는 AWS 서비스를 참조하고 서비스 연결 역할 열에 가 있는 서비스를 찾습니다. 서비스의 서비스 연결 역할 사용에 대한 정보를 보려면 ]링크를 선택합니다.

AWS 계정에서 역할을 편집하거나 삭제할 수 없음

IAM에서 서비스 연결 역할에 대한 권한을 삭제하거나 편집할 수 없습니다. 이러한 역할에는 사용자 대산 작업을 수행하기 위해 서비스에 필요한 신뢰 및 권한이 미리 지정되어 포함됩니다. IAM 콘솔, AWS CLI, API 등을 사용하여 서비스 연결 역할의 설명만 편집할 수 있습니다. 콘솔의 IAM 역할 페이지에서 계정의 서비스 연결 역할을 볼 수 있습니다. 서비스 연결 역할은 테이블의 신뢰할 수 있는 개체(Trusted entities) 열에 (서비스 연결 역할)((Service-linked role))로 표시됩니다. 역할의 요약 페이지 배너에도 해당 역할이 서비스 역할임이 표시됩니다. 이러한 역할은 해당 서비스가 관리 및 삭제 작업을 지원할 경우 연결 서비스를 통해서만 관리하고 삭제할 수 있습니다. 서비스 연결 역할을 수정하거나 삭제하면 서비스에서 AWS 리소스에 액세스하는 데 필요한 권한이 제거될 수 있으므로 주의하십시오.

서비스 연결 역할을 지원하는 서비스에 대한 자세한 내용은 IAM으로 작업하는 AWS 서비스를 참조하고 서비스 연결 역할 열에 가 있는 서비스를 찾습니다.

iam:PassRole를 수행하도록 인증되지 않음

서비스 연결 역할을 생성하는 경우 해당 역할을 서비스에 전달할 권한이 있어야 합니다. 일부 서비스는 서비스에서 작업을 수행할 때 계정에 서비스 연결 역할을 자동으로 생성합니다. 예를 들어 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 서비스 단원을 참조하십시오. 서비스가 자동으로 서비스 연결 역할을 생성하는지 여부를 알아보려면 링크를 선택하여 해당 서비스의 서비스 연결 역할 설명서 단원을 참조하십시오.

12시간 길이 세션을 선택한 경우 역할을 수임할 수 없는 이유(AWS CLI, AWS API)

AWS STS AssumeRole* API 또는 assume-role* CLI 작업을 사용하여 역할을 위임하는 경우 DurationSeconds 파라미터에 대한 값을 지정할 수 있습니다. 값을 900초(15분)에서 해당 역할에 대한 최대 세션 지속 시간 설정까지 지정할 수 있습니다. 이 설정보다 높게 값을 지정하면 작업에 실패합니다. 이 설정의 최댓값은 12시간입니다. 예를 들어 세션 기간으로 12시간을 지정했는데 관리자가 최대 세션 기간으로 6시간을 설정하면 작업에 실패합니다. 역할에 대한 최댓값을 확인하는 방법을 알아보려면 역할에 대한 최대 세션 기간 설정 보기 단원을 참조하십시오.

역할 함께 묶기(역할을 사용하여 두 번째 역할 위임)를 사용하는 경우 세션은 최대 1시간으로 제한됩니다. 그런 다음 DurationSeconds 파라미터를 사용하여 1시간보다 큰 값을 입력하면 이 작업에 실패합니다.

IAM 콘솔에서 역할을 전환하려고 하는데 오류가 발생합니다.

역할 전환 페이지에 입력하는 정보는 해당 역할에 대한 정보와 일치해야 합니다. 그렇지 않으면 작업이 실패하고 다음과 같은 오류가 나타납니다.

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

이 오류가 나타나면 다음 정보가 올바른지 확인하십시오.

  • 계정 ID 또는 별칭 – AWS 계정 ID는 12자리 숫자입니다. 계정에는 AWS 계정 ID 대신 사용할 수 있는 회사 이름과 같이 친숙한 식별자인 별칭이 있을 수 있습니다. 이 필드에는 계정 ID 또는 별칭을 사용할 수 있습니다.

  • 역할 이름 – 역할 이름은 대/소문자를 구분합니다. 계정 ID 및 역할 이름은 해당 역할에 대해 구성된 이름과 일치해야 합니다.

오류 메시지가 계속 나타나면 관리자에게 연락하여 이전 정보를 확인하십시오. 역할 신뢰 정책 또는 IAM 사용자 정책에 따라 액세스가 제한될 수 있습니다. 관리자는 이러한 정책에 대한 권한을 확인할 수 있습니다.

역할에 작업 수행을 허용하는 정책이 있지만 “액세스 거부”가 표시됩니다.

역할 세션이 세션 정책에 의해 제한되었을 수 있습니다. 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 콘솔에 로그인한 다음 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책을 선택합니다.

  3. 정책 목록에서 삭제하려는 정책의 이름을 선택합니다.

  4. Policy usage(정책 사용) 탭을 선택하여 이 정책을 사용하는 IAM 사용자, 그룹 또는 역할을 확인합니다. 이러한 ID 중 하나라도 정책을 사용하는 경우 다음 작업을 완료합니다.

    1. 필요한 권한을 가진 관리형 정책을 새로 생성합니다. 작업 전후에 자격 증명에 동일한 권한이 있는지 확인하려면 기존 정책에서 JSON 정책 문서를 복사합니다. 그런 다음 관리형 정책을 새로 생성하고 JSON 탭에서 정책 생성에 설명된 대로 JSON 문서를 붙여 넣습니다.

    2. 영향을 받는 각 ID에 대해 새 정책을 연결한 다음, 이전 정책을 분리합니다. 자세한 내용은 IAM 자격 증명 권한 추가 및 제거 단원을 참조하십시오.

  5. 탐색 창에서 Roles(역할)를 선택합니다.

  6. 역할 목록에서 삭제하려는 역할의 이름을 선택합니다.

  7. 신뢰 관계 탭을 선택하여 역할을 수임할 수 있는 엔터티를 확인합니다. 서비스 이외의 엔터티가 나열되면 다음 작업을 완료합니다.

    1. 이러한 엔터티를 신뢰하는새 역할을 생성합니다 .

    2. 이전 단계에서 생성한 정책입니다. 이 단계를 건너뛴 경우에는 지금 관리형 정책을 새로 생성합니다.

    3. 역할을 수임 중이었던 사람에게 더 이상 그렇게 할 수 없음을 알립니다. 그리고 새 역할을 수임하고 동일한 권한을 갖는 방법에 대한 정보를 제공합니다.

  8. 정책을 삭제합니다.

  9. 역할을 삭제합니다.