IAM 신뢰 정책 오류 "신뢰 정책을 업데이트하지 못했습니다. 유효하지 않은 보안 주체를 포함하는 정책"을 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 4월 4일

AWS 관리 콘솔을 사용하여 AWS Identity and Access Management(IAM) 역할 신뢰 정책을 편집하려고 할 때 다음과 유사한 오류가 발생했습니다.

"신뢰 정책을 업데이트하지 못했습니다. 유효하지 않은 보안 주체를 포함하는 정책."

간략한 설명

이 오류 메시지는 IAM 신뢰 정책의 보안 주체(Principal) 요소 값이 유효하지 않음을 나타냅니다. 이 오류를 해결하려면 다음을 확인하세요.

  • IAM 역할 신뢰 정책이 보안 주체 요소에 대해 올바른 형식의 지원되는 값을 사용합니다.
  • IAM 역할 신뢰 정책에서 IAM 자격 증명(사용자, 사용자 그룹 및 역할)을 보안 주체로 사용하는 경우 사용자 또는 역할이 삭제되지 않았는지 확인합니다.

해결 방법

보안 주체 요소에 지원되는 값 확인

역할의 IAM 신뢰 정책에 있는 보안 주체 요소에는 다음과 같은 지원되는 값이 포함되어야 합니다.

1.    IAM 정책에 다음과 유사한 올바른 AWS 12자리 AWS 계정 ID가 포함되어 있는지 확인합니다.

"Principal": {
"AWS": "123456789012"
}

참고: 루트 사용자 Amazon 리소스 이름(ARN)을 사용하여 AWS 계정을 지정할 수도 있습니다. 예를 들어, arn:aws:iam::123456789012:root를 사용합니다.

2.    IAM 신뢰 정책 보안 주체가 IAM 사용자, 역할 또는 페더레이션 사용자인 경우 전체 ARN을 다음과 유사하게 지정해야 합니다.

"Principal": {
  "AWS": [
    "arn:aws:iam::123456789012:user/user-name",
    "arn:aws:iam::123456789012:role/role-name",
    "arn:aws:sts::123456789012:assumed-role/role-name/role-session-name",
    "arn:aws:sts::123456789012:federated-user/user-name"
  ]
}

3    IAM 신뢰 정책에 와일드카드가 포함된 경우 다음 가이드라인을 따르세요.

참고: 와일드카드 "*"를 사용하여 보안 주체 이름 또는 ARN의 일부를 일치시킬 수 없습니다.

다음 예시는 IAM 신뢰 정책에서 와일드카드를 잘못 사용한 경우입니다.

"Principal": {
  "AWS": "arn:aws:iam::123456789012:user/user-*"
}

와일드카드를 사용하여 보안 주체 이름의 일부를 일치시키려면 글로벌 조건 키 aws:PrincipalArn과 함께 조건(Condition) 요소를 사용하고 와일드카드가 있는 ARN을 지정합니다.

모든 AWS 계정의 자격 증명을 지정하려면 다음과 유사한 와일드카드를 사용합니다.

"Principal": {
  "AWS": "*"
}

중요: 신뢰 정책에서 허용(Allow) 효과가 있는 보안 주체 요소에 와일드카드를 사용할 수 있습니다. 하지만 이렇게 하면 동일한 파티션(Partition)에 있는 AWS 계정의 IAM 사용자, 수임된 역할 세션 또는 페더레이션 사용자가 역할에 액세스할 수 있습니다. AWS 계정 내의 IAM 사용자 및 역할 보안 주체에게는 다른 권한이 필요하지 않습니다. 다른 AWS 계정의 보안 주체에게는 IAM 역할을 수임할 수 있는 자격 증명 기반(identity-based) 권한이 있어야 합니다.

이 방법은 웹 자격 증명 세션 보안 주체, SAML 세션 보안 주체 또는 서비스 보안 주체가 리소스에 액세스하는 것을 허용하지 않습니다.

다음과 유사한 권한을 제한하려면 조건 요소 및 조건 키(예: aws:PrincipalArn)가 있을 때만 이 방법을 사용하는 것이 가장 좋습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringLike": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:user/user-*"
        }
      }
    }
  ]
}

이 예시 신뢰 정책은 aws:PrincipalArn 조건 키를 사용하여 사용자 이름이 일치하는 사용자만 IAM 역할을 수임할 수 있도록 허용합니다.

4.    IAM 역할이 AWS 서비스 역할(AWS service role)인 경우 전체 서비스 보안 주체를 다음과 유사하게 지정해야 합니다.

"Principal": {
  "Service": "ec2.amazonaws.com"
}

5.    외부 SAML 자격 증명 공급자와 함께 SAML 세션 보안 주체(SAML session principals)를 사용하여 IAM 사용자를 인증할 수 있습니다. IAM 역할의 신뢰 정책에는 다음과 유사한 보안 주체 요소가 있어야 합니다.

"Principal": {
  "Federated": "arn:aws:iam::123456789012:saml-provider/provider-name"
}

6.    웹 자격 증명 세션 보안 주체를 사용하여 IAM 사용자를 인증할 수 있습니다. 액세스를 제공하는 IAM 역할의 신뢰 정책에는 다음과 유사한 보안 주체 요소가 있어야 합니다.

"Principal": { "Federated": "cognito-identity.amazonaws.com" }

7.    단일 문 내에서 서로 다른 보안 주체 유형을 사용하는 경우 다음과 유사한 IAM 신뢰 정책의 형식을 지정합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/user-name",
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

IAM 사용자 또는 역할은 기존 자격 증명이어야 함

IAM 역할 신뢰 정책에서 IAM 사용자 또는 역할을 보안 주체로 사용하는 경우 해당 IAM 자격 증명이 삭제되지 않았는지 확인합니다. IAM 신뢰 정책을 수정하고 보안 주체가 삭제된 경우 "유효하지 않은 주체를 포함하는 정책" 오류가 발생합니다.

참고: 보안 주체가 삭제된 경우 ARN이 아니라 IAM 신뢰 정책에 보안 주체의 고유 ID(unique ID)를 기록해 둡니다.