내 계좌 번호를 빠르게 가져올 수있는 방법을 찾고 있었는데, 원래 사용 aws iam get-account-authorization-details --max-items 1
하려고 생각 했지만 이렇게하는 데 몇 가지 문제가 있습니다. 계정 출처를 교차하지 않는 방법이 있습니까?
답변:
다음을 사용하여 Secure Token Service 하위 명령 에서 계정 번호를 가져올 수 있습니다 get-caller-identity
.
aws sts get-caller-identity --query Account --output text
aws sts get-caller-identity|jq -r ".Account"
aws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
--query 'Account'
부품을 제거하면 작동합니다 .
jq
시스템에 관여하거나 설치하는 것에 의존 할 수는 없습니다 . 일부 서버는 보안상의 이유로 외부 패키지 설치를 금지합니다. 당신은 이와 같은 것을 할 수 aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'
있지만 약간 성 가시고 --query 'Account' --output text
그 시점에서 할 수도 있습니다 .
AWS PowerShell CLI에 대한 저의 관련 답변 에서 귀하의 계정 ID는 귀하가 생성하는 Arn 리소스의 일부이며 자동으로 생성되는 리소스입니다. 일부 리소스는 사용자를 OwnerId로도 나열합니다.
기본 보안 그룹은 예약 된 보안 그룹으로 각 리전의 기본 VPC에 자동으로 생성됩니다. 로부터 문서 :
기본 보안 그룹은 삭제할 수 없습니다. EC2-Classic 기본 보안 그룹을 삭제하려고하면 다음 오류가 표시됩니다. Client.InvalidGroup.Reserved : 보안 그룹 'default'가 예약되어 있습니다. VPC 기본 보안 그룹을 삭제하려고하면 다음 오류가 표시됩니다. Client.CannotDelete : 지정된 그룹 : "sg-51530134"이름 : "default"는 사용자가 삭제할 수 없습니다.
따라서 EC2 classic에 있거나 기본 VPC가있는 한 (* 해당하지 않는 경우 엣지 사례 참조) 계정 ID를 검색 할 수있는 신뢰할 수있는 후보가됩니다.
예:
aws ec2 describe-security-groups \
--group-names 'Default' \
--query 'SecurityGroups[0].OwnerId' \
--output text
이는 --query
이 요청의 첫 번째 결과에 대해 출력을 "소유자 ID"로 필터링하는 데 사용 --output
하고 계정 ID를 일반 텍스트로 출력하는 데 사용 합니다.
123456781234
에지 케이스 :
(@kenchew에게 감사드립니다) 지정된 리전에서 기본 VPC를 삭제 한 경우이 보안 그룹이 더 이상 존재하지 않으므로 다음 대체 솔루션 중 하나를 사용해야합니다.
추가 읽기 :
위임 된 역할로 실행되는 서버에서 실행중인 경우을 호출 할 수 없습니다 aws sts get-caller-identity
. 또한 describe-security-groups
항상 --group-names
필터를 사용할 수는 없으므로 (기본 VPC가없는 경우 작동하지 않음) 첫 번째 보안 그룹을 선택하기 만하면됩니다. 어떤 종류의 인증을 사용하는지 또는 어떤 종류의 VPC를 가지고 있는지에 관계없이 이것이 가장 신뢰할 수있는 것으로 나타났습니다.
aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
aws iam get-user [--profile <profile>]
이것이 작동하려면 IAM 셀프 서비스 역할 만 필요 하기 때문에 제가 가장 좋아하는 방법은 사용 하는 것입니다.