써드파티가 소유한 AWS 계정에 대한 접근
써드파티가 소유한 AWS 계정에 대한 접근
써드파티가 조직의 AWS 리소스에 접근해야 할 때 역할을 사용해 그들에게 접근을 위임할 수 있어요. 예를 들어 써드파티가 AWS 리소스를 관리하는 서비스를 제공할 수 있어요. IAM 역할을 사용하면 AWS 보안 자격 증명을 공유하지 않고도 이 써드파티에게 AWS 리소스 접근 권한을 부여할 수 있어요. 대신 써드파티는 당신의 AWS 계정에 만든 역할을 수임해 AWS 리소스에 접근할 수 있습니다.
출처: 문서
본문
신뢰 구역(신뢰하는 조직 또는 계정) 밖의 계정에 있는 주체가 당신의 역할을 수임할 수 있는지 알아보려면 IAM Access Analyzer란 무엇인가요? 문서를 참고하세요.
써드파티가 수임할 수 있는 역할을 만들려면 써드파티가 다음 정보를 제공해야 해요.
- 써드파티의 AWS 계정 ID. 역할에 대한 신뢰 정책을 정의할 때 그 AWS 계정 ID를 주체(principal)로 지정합니다.
- 역할과 고유하게 연결할 외부 ID(external ID). 외부 ID는 당신과 써드파티만 아는 모든 식별자가 될 수 있어요. 예를 들어 당신과 써드파티 사이의 인보이스 ID를 사용할 수 있지만, 써드파티의 이름이나 전화번호처럼 추측할 수 있는 것은 사용하지 마세요. 역할에 대한 신뢰 정책을 정의할 때 이 ID를 지정해야 해요. 써드파티는 역할을 수임할 때 이 ID를 제공해야 합니다.
- 써드파티가 AWS 리소스로 작업하는 데 필요한 권한. 역할의 권한 정책을 정의할 때 이 권한을 지정해야 해요. 이 정책은 그들이 수행할 수 있는 작업과 접근할 수 있는 리소스를 정의합니다.
역할을 만든 후에는 역할의 Amazon Resource Name(ARN)을 써드파티에 제공해야 해요. 그들은 역할을 수임하려면 당신 역할의 ARN이 필요합니다.
중요 써드파티에게 AWS 리소스에 대한 접근을 부여하면 그들은 정책에 지정한 모든 리소스에 접근할 수 있어요. 그들의 리소스 사용 비용은 당신에게 청구됩니다. 그들의 리소스 사용을 적절히 제한해야 합니다.
써드파티 접근용 외부 ID
외부 ID는 역할을 수임하는 사용자가 운영되는 상황을 주장할 수 있게 해줍니다. 또한 계정 소유자가 특정 상황에서만 역할이 수임되도록 허용하는 방법을 제공합니다. 외부 ID의 주요 기능은 혼란스러운 대리인(confused deputy) 문제를 해결하고 방지하는 것입니다.
중요 AWS는 외부 ID를 비밀로 취급하지 않아요. 액세스 키 쌍이나 비밀번호 같은 비밀을 AWS에서 만든 후에는 다시 볼 수 없습니다. 역할의 외부 ID는 역할을 볼 권한이 있는 모든 사람이 볼 수 있어요.
언제 외부 ID를 사용해야 하나요?
다음 상황에서 외부 ID를 사용하세요.
- 당신이 AWS 계정 소유자이고, 당신의 계정 외에 다른 AWS 계정에도 접근하는 써드파티용 역할을 구성했습니다. 써드파티에게 당신의 역할을 수임할 때 포함하는 외부 ID를 요청해야 합니다. 그런 다음 역할의 신뢰 정책에서 그 외부 ID를 확인하세요. 이렇게 하면 외부 당사자가 당신을 대신해 행동할 때만 당신의 역할을 수임할 수 있습니다.
- 이전 시나리오의 Example Corp처럼 여러 다른 고객을 대신해 역할을 수임하는 입장이라면, 각 고객에게 고유한 외부 ID를 할당하고 그 외부 ID를 고객의 역할 신뢰 정책에 추가하도록 지시해야 합니다. 그런 다음 역할 수임 요청에 항상 올바른 외부 ID를 포함하도록 해야 합니다. 이미 각 고객에 대한 고유 식별자가 있을 것이며, 이 고유 ID는 외부 ID로 사용하기에 충분합니다. 외부 ID는 이 목적을 위해 명시적으로 만들거나 별도로 추적해야 하는 특별한 값이 아닙니다.
AssumeRoleAPI 호출에는 항상 외부 ID를 지정해야 합니다. 또한 고객이 역할 ARN을 제공하면 올바른 외부 ID 유무에 따라 역할을 수임할 수 있는지 테스트하세요. 올바른 외부 ID 없이 역할을 수임할 수 있다면 고객의 역할 ARN을 시스템에 저장하지 마세요. 고객이 올바른 외부 ID를 요구하도록 역할 신뢰 정책을 업데이트할 때까지 기다리세요. 이렇게 하면 고객이 올바른 행동을 하도록 도와, 둘 다 혼란스러운 대리인 문제로부터 보호받도록 하는 것입니다.
외부 ID를 사용하는 예제 시나리오
예를 들어 소비를 최적화하고 AWS 계정을 모니터링하기 위해 Example Corp라는 써드파티 회사를 고용하기로 했다고 가정해 보겠습니다. 일일 지출을 추적하려면 Example Corp가 AWS 리소스에 접근해야 해요. Example Corp는 다른 고객을 위해 다른 많은 AWS 계정도 모니터링합니다.
Example Corp에게 AWS 계정의 IAM 사용자와 그 장기 자격 증명에 대한 접근 권한을 주지 마세요. 대신 IAM 역할과 그 임시 보안 자격 증명을 사용하세요. IAM 역할은 장기 자격 증명(IAM 사용자 액세스 키 등)을 공유할 필요 없이 써드파티가 AWS 리소스에 접근할 수 있게 해주는 메커니즘을 제공합니다.
IAM 역할을 사용해 AWS 계정과 Example Corp 계정 사이에 신뢰 관계를 설정할 수 있어요. 이 관계가 설정된 후 Example Corp 계정의 멤버는 AWS Security Token Service AssumeRole API를 호출해 임시 보안 자격 증명을 얻을 수 있어요. 그러면 Example Corp 멤버는 그 자격 증명을 사용해 당신의 계정의 AWS 리소스에 접근할 수 있습니다.
참고 임시 보안 자격 증명을 얻기 위해 호출할 수 있는 AssumeRole 및 기타 AWS API 작업에 대한 자세한 내용은 AWS STS 자격 증명 비교 문서를 참고하세요.
이 시나리오의 더 자세한 설명은 다음과 같습니다.
- Example Corp를 고용했으므로 그들이 당신을 위한 고유한 고객 식별자를 만듭니다. 그들은 이 고유 고객 ID와 자신의 AWS 계정 번호를 제공합니다. 다음 단계에서 IAM 역할을 만들려면 이 정보가 필요합니다.
참고 Example Corp는 각 고객에 대해 고유한 한 외부 ID(ExternalId)에 어떤 문자열 값이든 사용할 수 있어요. 고객 계정 번호나 임의의 문자열일 수 있습니다. 두 고객이 같은 값을 가지지 않는 한 말이죠. '비밀'로 의도된 것이 아닙니다. Example Corp는 ExternalId 값을 각 고객에게 제공해야 합니다. 중요한 것은 그것이 각 외부 ID가 고유하도록 Example Corp가 생성해야 하며 고객이 생성해서는 안 된다는 점입니다.
- AWS에 로그인하고 Example Corp가 당신의 리소스에 접근할 수 있게 해주는 IAM 역할을 만듭니다. 다른 IAM 역할과 마찬가지로 이 역할에는 권한 정책과 신뢰 정책이라는 두 개의 정책이 있습니다. 역할의 신뢰 정책은 누가 역할을 수임할 수 있는지 지정합니다. 이 예제 시나리오에서 정책은 Example Corp의 AWS 계정 번호를
Principal로 지정합니다. 이렇게 하면 그 계정의 자격 증명이 역할을 수임할 수 있습니다. 또한 신뢰 정책에[Condition](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Condition)요소를 추가합니다. 이Condition은ExternalId컨텍스트 키를 테스트해 Example Corp의 고유 고객 ID와 일치하는지 확인합니다. 예를 들어:
"Principal": {"AWS": "Example Corp's AWS account ID"},
"Condition": {"StringEquals": {"sts:ExternalId": "Unique ID Assigned by Example Corp"}}
- 역할의 권한 정책은 역할이 누군가에게 무엇을 하도록 허용하는지 지정합니다. 예를 들어 역할이 Amazon EC2와 Amazon RDS 리소스만 관리하고 IAM 사용자나 그룹은 관리하지 못하게 지정할 수 있어요. 이 예제 시나리오에서 권한 정책을 사용해 Example Corp에게 계정의 모든 리소스에 대한 읽기 전용 접근을 부여합니다.
- 역할을 만든 후 역할의 Amazon Resource Name(ARN)을 Example Corp에 제공합니다.
- Example Corp가 AWS 리소스에 접근해야 할 때 회사 누군가가 AWS
sts:AssumeRoleAPI를 호출합니다. 호출에는 수임할 역할의 ARN과 고객 ID에 해당하는 ExternalId 파라미터가 포함됩니다.
요청이 Example Corp의 AWS 계정을 사용하는 누군가에게서 오고, 역할 ARN과 외부 ID가 올바르면 요청이 성공합니다. 그러면 Example Corp가 역할이 허용하는 AWS 리소스에 접근하는 데 사용할 수 있는 임시 보안 자격 증명이 제공됩니다.
즉, 역할 정책에 외부 ID가 포함되면 역할을 수임하려는 모든 사람은 역할의 주체여야 하고 올바른 외부 ID를 포함해야 합니다.
외부 ID의 핵심 사항
- 서로 다른 AWS 계정을 가진 여러 고객을 지원하는 다중 테넌트 환경에서는 AWS 계정당 하나의 외부 ID를 사용하는 것을 권장합니다. 이 ID는 써드파티가 생성한 임의 문자열이어야 합니다.
- 써드파티가 역할을 수임할 때 외부 ID를 제공하도록 요구하려면 선택한 외부 ID로 역할의 신뢰 정책을 업데이트하세요.
- 역할을 수임할 때 외부 ID를 제공하려면 AWS CLI 또는 AWS API로 그 역할을 수임하세요. 자세한 내용은 STS AssumeRole API 작업 또는 STS assume-role CLI 작업을 참고하세요.
ExternalId값은 최소 2자, 최대 1,224자여야 합니다. 값은 공백 없는 영숫자여야 합니다. 또한 다음 기호를 포함할 수 있어요: 플러스(+), 등호(=), 쉼표(,), 마침표(.), 골뱅이(@), 콜론(:), 슬래시(/), 하이픈(-).
추가 리소스
다음 리소스가 써드파티가 소유한 AWS 계정에 접근을 제공하는 데 도움이 될 수 있어요.
- AWS 계정에서 다른 사람이 작업을 수행하도록 허용하는 방법은 사용자 지정 신뢰 정책을 사용한 역할 생성 문서를 참고하세요.
- 역할로 전환할 권한을 부여하는 방법은 사용자에게 역할 전환 권한 부여 문서를 참고하세요.
- 신뢰할 수 있는 사용자에게 임시 보안 자격 증명을 만들고 제공하는 방법은 임시 보안 자격 증명에 대한 권한 문서를 참고하세요.