[Amazon Web Services] AWS STS(Security Token Service)를 사용해보자 !

AWS STS란?

IAM 역할을 사용해 AWS에 액세스하는 경우, STS Endpoint에서 세션 토큰을 요청한다. Region STS 엔드포인트의 세션 토큰은 모든 리전에서 유효하다. AWS에서는 Region Endpoint를 사용하도록 권장하고있다. 클로벌 STS Endpoint(https://sts.amazonaws.com)의 세션 토큰은 기본적으로 STS가 활성화된 AWS Region에서만 유효하다. AWS STS를 사용하면 AWS Resource에 대한 액세스를 제어할 수 있다.

임시 보안 자격 증명은 다음과 같은 차이점을 제외하고는 IAM 사용자가 사용할 수 있는 장기 액세스키와 거의 동일하다.

  • 임시 보안 자격 증명은 그 이름을 임시하듯 단기적이다. 이 자격 증명은 몇 분에서 길게는 몇 시간 까지 지속되도록 구성할 수 있다. 자격 증명이 만료되면 AWS는 그 자격 증명을 인식 못하거나 모든 API 요청을 허용하지 않는다.
  • 임시 보안 자격 증명은 사용자와 함께 저장되지 않지만 동적으로 생성되어 요청시 사용자에게 제공된다. 임시 보안 자격 증명이 만료 되었을 때(심지어 만료 전이라도) 사용자는 새 자격 증명을 요청할 수 있다.
https://subscription.packtpub.com/book/cloud-and-networking/9781800201538/3/ch03lvl1sec15/introducing-aws-security-token-service-aws-sts

AWS STS Demo

우선 아래와 같은 권한이 있는 IAM User를 생성하고 AWS CLI에 Hello라는 Profile로 미리 로그인 해준다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::123456789012:role/*"
        }
    ]
}

$ aws configure --profile hello

그리고 아래와 같은 Policy를 가진 IAM Role(apdev-app-role)을 하나 생성해주고 해당 Role의 Trust Relationships를 아래와 같이 수정해준다.

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

다음과 같은 CLI 명령어로 임시 보안 자격 증명을 발급 받을 수 있다.

$ aws sts assume-role --role-arn arn:aws:iam::123456789012:role/role-name --role-session-name "RoleSession1" --profile IAM-user-name

그러면 아래와 같이 임시로 apdev-ap-role에 대한 자격증명이 임시로 발급된것을 알 수 있다.

그리고 위 발급된 Token을 가지고 ~/.aws/credentials에 해당 값을 넣거나 aws configure을 통해 해당 Key들을 넣어준다.

아래의 명령어를 통해서 값을 넣어줄 수도 있다.

$ aws configure set --profile S3Read aws_access_key_id ASIA5ZRQWYYXX7YI2BPA
$ aws configure set --profile S3Read aws_secret_access_key K94MM+C44vAwXTQRQzLM3Vo0BqWx86+koLc4qdV8
$ aws configure set --profile S3Read aws_session_token IQoJb3JpZ2luX2VjENP//////////wEaDmJoQoU1q0rimoi+Vgs7pdgAViCRRrxc6x26Tgp28NZFxh13AhppfvLWVrIqi0dnktOFDhZS88AnLQVkpH6Tw==

또는 ~/.aws/credentials에 직접 넣고 싶다면 아래와 같은 형식으로 작성해주면된다.

그러면 아래와 같이 정상 적으로 STS를 통해서 임시로 Key를 발급 받아 조회가 되는 것을 볼 수 있다.

STS 발급 전

STS 발급 후