교차 계정간 리소스에 접근하는 방법
aws에선 교차 계정 간 리소스에 접근할 일이 매우 많다. 이 때, assume role을 통해 계정 간 리소스에 접근할 수 있다.
간단하게 A계정에서 B계정에 있는 s3에 접근하는 과정을 통해 어떤 방식으로 교차 계정간 리소스에 접근하는지 알아보자
계정 별 IAM 설
# A계정의 role 권한 & 신뢰 관계
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::{B_Account_ID}:role/s3-put-role"
}
]
}
# 신뢰 관계
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::A_Account_ID:user/hb"
},
"Action": "sts:AssumeRole"
}
]
}
# B계정 role 권한(s3full) & 신뢰 관계
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{A_Account_ID}:role/s3-default-role"
},
"Action": "sts:AssumeRole"
}
]
}
AWS CLI로 B 계정 s3에 접근
먼저 로컬에 IAM User의 자격 증명을 해주고 hb-defalt-role에 assume하여 sts를 얻어야 하니 아래 CLI 실행
aws sts assume-role \
--role-arn arn:aws:iam::{A_Account_ID}:role/s3-default-role \
--role-session-name tempsession
아래와 같이 임시 자격 증명을 얻을 수 있고, Accesskey, SecretAccessKey, SessionToken을 aws configure에 등록해주면 된다.
{
"Credentials": {
"AccessKeyId": "ASIAWMQG4CXAA2SYREVL",
"SecretAccessKey": "0gSQWqAbmCqFm81rBpO+CsoLbqg3Eu/eTQ56qD/E",
"SessionToken": "IQoJb3JpZ2luX2VjEID//////////wEaDmFwLW5vcnRoZWFzdC0yIkcwRQIhAOEe7ypAozLfvsBcl6E+hZLhx0I4fVC0Icqv9EKYCBXYAiA/WTGL5Z18+nckNfav8tjrScgdKBUNfFQaIw8rzAeQuiqYAgh5EAEaDDQzOTE3NDgyOTUwNCIM0+sL7NGET+8PtmkwKvUBCzepdbA+8j71XwTOPUGEnSy21m34wM63RI+RD5tTsphZm4qPBje4fbM3xYbXP/GAM0IpRrmJ4sP8YuO7YuFG5yPkI1QVB+3JrzF734+/VW02foNCVqkQKpe14Y+g6+S6Wlc0ib3KAHSP4019bUIpan8OhNt/HqNnfUQGUMUHgdzsEQLdniRlNRwQnKD2RG3j85TN5rgJDPA54LHeMTN3P7O6W7wOFFa5K9ZbRQ1HFiyyYBnQH+lQ5WhAvdPgDQzURxeOLOYYgbwIcP46KzgeaDq/KJovm9fZcf9znvm3CPSapc7EUm0bc/R7w8Acj4r+m8YC6Rgwp7jjtQY6nQGwZm1KyLLgFlRKzGeSDHQCvYZpVu5HXENGG6oVftn5AOYK3NVr5nlHgw/aHcuTXrNEjTHStfe6pBvnSMwtcAaINE8H2Rp1ZkORetyYHIenHjX8KJEBDbMJg6YlzK4unoSsldWQ7MZ54844+juYDdRBLmrs7obftWt4T8wrqGUWUVyVxKlC0vXBwxJLqseGGRqtSg69gZsDFVi15Mqa",
"Expiration": "2024-08-11T16:43:35+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AROAWMQG4CXADK2IFWTGI:tempsession",
"Arn": "arn:aws:sts::439174829504:assumed-role/s3-default-role/tempsession"
}
}
aws configure set --profile assume aws_access_key_id [AccessKeyId]
aws configure set --profile assume aws_secret_access_key [SecretAccessKey]
aws configure set --profile assume aws_session_token [SessionToken]
얻은 sts 정보로 B계정 role에 assume하여 sts을 획득하여 위와 동일하게 aws configure에 등록해주면 된다.
aws sts assume-role \ ─╯
--role-arn arn:aws:iam::{B_Account_ID}:role/s3-put-role \
--role-session-name tempsession \
--profile assume
{
"Credentials": {
"AccessKeyId": "ASIA5FK22E2DSP542XOY",
"SecretAccessKey": "GN7tr0iiYVD1DQ8i2cOLeVclcjIkoXiI3kWGeUT2",
"SessionToken": "FwoGZXIvYXdzEJH//////////wEaDB1EH9lMysKTTzF9riKvAdjbaNWi1EuXbgjlTxUtqxoByJvQlfNovbADXT8Dvollo+KK7QIRG9i3U01JnDkhhEcbkxScpr5zxU1xHYuChCXjyfmu8uLduJHVsvpEtLka7Fbf3uaC6PgQ3+VW1UWHMKBH+tHIAkCRov+IyK24i1QwfcvxoAeK4jkgsqApIlnm3O5x/i/cMJtgNQbx3eYH6MMgSSSRtyLANTJa/iWQlqD1/eJp7tgRExAaBpz7m4kolbvjtQYyLWzui4OPZ+A3iXGvRZU9YRoCyjZx2lDk5WZNvN2XQRlrcdxUO05g9StujDHURg==",
"Expiration": "2024-08-11T16:49:41+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AROA5FK22E2DSAX2I3AUG:tempsession",
"Arn": "arn:aws:sts::904817944199:assumed-role/s3-put-role/tempsession"
}
}
aws configure set --profile s3 aws_access_key_id [AccessKeyId]
aws configure set --profile s3 aws_secret_access_key [SecretAccessKey]
aws configure set --profile s3 aws_session_token [SessionToken]
이제 B 계정 role에 assume하여 얻은 sts로 B 계정 s3에 접근할 수 있다.

최종적으로 s3에 접근할 수 있는 정책은 최종 역할인 B계정에 있어야 한다. 하지만 A계정에 있는 역할에도 어떤 역할에 접근할 수 있는지, 그리고 그 역할을 Assume했을 때 어떤 작업을 수행할 수 있는지 정의해 두면 운영과 관리에 좀 더 유용하다.
또한 해당 포스팅에선 IAM User에서 동일 계정 role에 assume하여 총 2번 assume을 했지만, IAM User에 role을 부여하면 B계정으로 한번만 assume하면 된다. 본인의 조직 내 보안 요구 사항 등을 고려하여 보안이 중요한 환경에서는 두 번의 Assume Role을 유지하는 것이 좋다.
개인적인 생각으론 명확한 작업을 수행하는 사용자에겐 role을 직접 연결해주되, 권한을 세세하게 부여하는게 좋은거 같다.
이외에 개발자나 인프라 담당자같이 특수한 사용자들은 직접 권한을 부여하지 않고, 보다 높은 수준을 요구하여 보안을 강화하는게 좋지 않을까 싶다.
'AWS' 카테고리의 다른 글
| [AWS] Boto3로 s3에 있는 파일 읽기 (0) | 2024.08.13 |
|---|---|
| [AWS] boto3로 sts 임시 자격 증명 얻기 (0) | 2024.08.12 |
| [AWS] aws sts & assume role - (1) (0) | 2024.07.26 |
| [AWS] AWS API 동작 방식 (1) | 2024.07.21 |
| [AWS] Secrets Manager (0) | 2024.06.27 |