AWS Identity and Access Management(IAM) ID 사용자 또는 역할에 대한 신뢰 정책을 편집하려고 했더니 다음 오류가 발생했습니다. "Failed to update trust policy. Invalid principal in policy."
간략한 설명
이 오류 메시지는 IAM 신뢰 정책의 주요 요소 값이 유효하지 않음을 나타냅니다. 이 오류를 해결하려면 다음을 확인하십시오.
- IAM 역할 신뢰 정책이 주요 요소에 올바른 형식의 지원되는 값을 사용합니다.
- IAM 역할 신뢰 정책에서 IAM 사용자 또는 역할을 위탁자로 사용하는 경우 해당 사용자 또는 역할이 삭제되지 않았는지 확인합니다.
참고: 표준 AWS 계정에서 AWS GovCloud(US) 계정 번호를 추가하려고 하면 AWS GovCloud(US) 계정에서도 이 오류가 발생할 수 있습니다. AWS GovCloud(미국) 계정과 표준 AWS 계정 간에 액세스를 위임하는 역할을 만들 수 없습니다. 자세한 내용은 AWS GovCloud(미국)의 IAM 차이점을 참조하십시오.
해결 방법
주요 요소에 대해 지원되는 값을 확인합니다.
역할의 IAM 신뢰 정책의 주요 요소에는 다음과 같은 지원되는 값이 포함되어야 합니다.
-
IAM 정책에 다음과 유사한 올바른 12자리 AWS 계정 ID가 포함되어 있는지 확인합니다.
"Principal":
{"AWS": "123456789012"
}
참고: 루트 사용자 Amazon 리소스 이름(ARN)을 사용하여 AWS 계정을 지정할 수도 있습니다. 예: arn:aws:iam::123456789012:root.
-
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"
]
}
-
IAM 신뢰 정책에 와일드카드가 포함된 경우 다음 지침을 따르십시오.
참고: 와일드카드 "*"을 사용하여 위탁자 이름 또는 ARN의 일부와 일치시킬 수 없습니다. 다음 예제에는 IAM 신뢰 정책에서 와일드카드가 잘못 사용되었습니다.
"Principal":
{ "AWS": "arn:aws:iam::123456789012:user/user-*"
}
와일드카드를 사용하여 위탁자 이름의 일부를 일치시키려면 Condition 요소와 전역 조건 키 aws:PrincipalArn을 사용합니다. 그런 다음 와일드카드로 ARN을 지정합니다. 모든 AWS 계정의 ID를 지정하려면 다음과 유사한 와일드카드를 사용합니다.
"Principal": {
"AWS": "*"
}
중요: 신뢰 정책에서 허용 효과가 있는 주요 요소에 와일드카드를 사용할 수 있습니다. 그러나 이렇게 하면 동일한 파티션에 있는 AWS 계정의 모든 IAM 사용자, 위임된 역할 세션 또는 페더레이션 사용자가 내 역할에 액세스할 수 있습니다. AWS 계정 내의 IAM 사용자 및 역할 주체는 다른 권한이 필요하지 않습니다. 다른 AWS 계정의 주체는 ID 기반 권한이 있어야 IAM 역할을 맡을 수 있습니다. 이 방법을 사용하면 웹 ID 세션 주체, SAML 세션 주체 또는 서비스 주체가 리소스에 액세스하는 것을 허용하지 않습니다. 이 방법은 Condition 요소와 aws:PrincipalArn과 같은 조건 키만 사용하여 사용 권한을 제한하는 것이 가장 좋습니다. 다음 예제 신뢰 정책은 aws:PrincipalArn 조건 키를 사용하여 사용자 이름이 일치하는 사용자만 IAM 역할을 맡도록 허용합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"aws:PrincipalArn": "arn:aws:iam::123456789012:user/user-*"
}
}
}
]
}
-
IAM 역할이 AWS 서비스 역할인 경우, 전체 서비스 주체는 다음과 유사하게 지정해야 합니다:
"Principal": {
"Service": "ec2.amazonaws.com"
}
-
외부 SAML ID 공급자와 함께 SAML 세션 위탁자를 사용하여 IAM 사용자를 인증할 수 있습니다. IAM 역할의 신뢰 정책에는 다음과 유사한 주요 요소가 있어야 합니다:
"Principal": {
"Federated": "arn:aws:iam::123456789012:saml-provider/provider-name"
}
-
웹 ID 세션 위탁자를 사용하여 IAM 사용자를 인증할 수 있습니다. 액세스를 제공하는 IAM 역할의 신뢰 정책에는 다음과 유사한 주요 요소가 있어야 합니다.
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
}
-
단일 문 내에서 서로 다른 계정 유형을 사용하는 경우 다음과 유사하게 IAM 신뢰 정책의 형식을 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/user-name",
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
신뢰 정책에 AIDA 또는 AROA 접두사가 포함되어 있지 않은지 확인
신뢰 정책에 IAM 엔터티에 대한 ARN과 함께 Principal 요소가 포함되어 있는 경우 ARN은 저장 시 고유한 위탁자 ID로 변경됩니다. 이 고유한 보안 위탁자 ID에는 IAM 사용자의 경우 AIDA 접두사가 붙고 IAM 역할의 경우 다음과 유사한 AROA라는 접두사가 붙습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"AIDAW4GTDFISYQEXAMPLE",
"AROAW4GTDFISYQEXAMPLE"
]
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
신뢰 정책의 고유한 위탁자 ID는 IAM 사용자 또는 역할이 삭제되었음을 나타냅니다. 보안 주체 ID는 AWS가 이를 유효한 ARN에 다시 매핑할 수 없기 때문에 나타납니다. 신뢰 정책을 편집할 경우 위탁자 ID를 제거하거나 유효한 위탁자 ARN으로 바꿔야 합니다. 정책을 저장하면 ARN이 사용자 또는 역할의 새 고유 ID로 변경됩니다.
자세한 내용은 IAM 리소스 기반 정책에 알 수 없는 주요 형식이 있는 이유는 무엇입니까?를 참조하십시오.
관련 정보
IAM을 사용하여 리소스에 대한 사용자 액세스를 허용하려면 어떻게 해야 하나요?
AWS IAM을 사용하여 다른 AWS 계정의 리소스에 액세스하려면 어떻게 해야 합니까?