내용으로 건너뛰기

AWS CLI를 사용하여 AssumeRole 호출을 수행하고 임시 사용자 자격 증명을 저장하려면 어떻게 해야 합니까?

3분 분량
0

AWS Command Line Interface(AWS CLI)를 사용하여 AssumeRoleWithSAML, AssumeRole 및 AssumeRoleWithWebIdentity에서 자격 증명을 가져오고 싶습니다.

해결 방법

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

AssumeRoleWithSAML, AssumeRoleAssumeRoleWithWebIdentity에서 자격 증명을 가져오려면 API를 호출하고 출력을 텍스트 파일에 저장합니다. 그런 다음, 출력을 사용하여 AWS CLI에서 API 명령을 호출합니다.

참고: AssumeRoleWithSAML, AssumeRoleAssumeRoleWithWebIdentity 명령에는 role-arnrole-session-name 파라미터가 필요합니다.

SAML 인증을 통해 자격 증명 가져오기

요구 사항: ID 제공업체(IdP)에서 유효한 SAML 2.0 응답을 받고 IdP를 신뢰하는 AWS Identity and Access Management(IAM) 역할이 있어야 합니다.

다음 단계를 완료하십시오.

  1. SAML 응답을 가져옵니다.

  2. 로그를 찾은 다음, SAML 로그 파일을 엽니다.

  3. 전체 SAML 응답을 복사합니다.

  4. SAML 응답을 로컬 디렉터리에 있는 samlresponse.log라는 파일에 붙여넣습니다.

  5. 다음 assume-role-with-saml 명령을 실행하여 AWS Security Token Service(AWS STS) 토큰을 호출합니다.

    aws sts assume-role-with-saml --role-arn arn:aws:iam::444455556666:role/IAM_ROLE --principal-arn arn:aws:iam::444455556666:saml-provider/SAML_PROVIDER --saml-assertion file://samlresponse.log
    
    awk -F:  '
                    BEGIN { RS = "[,{}]" ; print "[PROFILENAME]"}
                    /:/{ gsub(/"/, "", $2) }
                    /AccessKeyId/{ print "aws_access_key_id = " $2 }
                    /SecretAccessKey/{ print "aws_secret_access_key = " $2 }
                    /SessionToken/{ print "aws_session_token = " $2 }
    ' >> ~/.aws/credentials
    

    참고: Principal ARN을 SAML 제공업체 Amazon 리소스 이름(ARN)으로 바꾸십시오. 이 예제에서는 Linux 기반 배포판과 호환되는 awk를 사용합니다. assume-role-with-saml 명령을 실행하면 ~/.aws/credentials 파일 내의 프로필에 자격 증명이 저장됩니다.

  6. (선택 사항) 다음 명령을 실행하여 자격 증명을 백업합니다.

    cp -a ~/.aws/credentials ~/.aws/credentials.bak.
  7. 다음 describe-instances 명령을 실행하여 사용자 자격 증명을 호출합니다.

    aws ec2 describe-instances --profile PROFILENAME

    참고: PROFILENAME을 프로필 이름으로 바꾸십시오.
    파일에 저장되지 않은 출력 예시:

    {            
        "SubjectType": "persistent",
        "AssumedRoleUser": {
           "AssumedRoleId": "111122223333:example@corp.example.com",
           "Arn": "arn:aws:sts::44445555666:assumed-role/ROLE_ID/example@corp.example.com"
        },    
        "Audience": "https://signin.aws.amazon.com/saml",
        "NameQualifier": "RANDOM_GENERATED_STRING",
        "Credentials": {
           "SecretAccessKey": "SECRET_ACCESS_KEY",
           "SessionToken": "TOKEN_KEY",
           "Expiration": "2015-05-11T20:00:49Z",
           "AccessKeyId": "ACCESS_KEY_ID"
    },
    "Subject": "CORP\\\\EXAMPLE",
    "Issuer": "http://SERVER_NAME.corp.example.com/adfs/services/trust"
    }
    

    자격 증명 파일에 저장된 출력 예시:

    aws_access_key_id =  ACCESS_KEY_ID
    aws_session_token =  SESSION_TOKEN
    aws_secret_access_key =  SECRET_ACCESS_KEY
    [PROFILENAME]
    

AssumeRole을 통해 자격 증명 가져오기

중요: IAM 자격 증명은 수임한 IAM 역할을 신뢰해야 합니다.

다음 단계를 완료하십시오.

  1. 다음 get-caller-identity 명령을 실행하여 응답을 확인합니다.

    aws sts get-caller-identity

    참고: 응답을 받지 못하면 .aws/credentials 파일에 유효한 IAM 액세스 키 또는 보안 암호 키가 저장되어 있는지 확인하십시오.

  2. 다음 assume-role 명령을 실행합니다.

    aws sts assume-role --role-arn arn:aws:iam::123456789012:role/ExampleRole --role-session-name ExampleSession

    응답 예시:

    {
        "AssumedRoleUser": {
            "AssumedRoleId": "AROAZRG5BQ2L7OB87N3RE:ExampleSession",
            "Arn": "arn:aws:sts::123456789012:assumed-role/RoleA/ExampleSession"
        },
        "Credentials": {
            "SecretAccessKey": "JCNFKY7XCUwHWTKcQhmmFokpjLetCmNLZ7pg9SJe",
            "SessionToken": "FwoGZXIvYXdzEL7//////////wEaDNoBLBJUNYWKaHXZXCKvARBGJ4CqOs+p2JR2a7Euni0d0XuSs31ZA/1QqpX6Spfuz2WAvHCyqwbE3+oxyvyqYlO8dTJwp56YCFCJ6K4Prt9pMeZU9R5NGBJHvRbXXKfxp+jktLc/ItrAfn4GMXWpoyJKZrY7hzv3MASomlIcwSD/RqWIBS1vAoo1UAxwjy29jai0OAPQ51LAnuFKeabgmllyP5Y2gu488P19D7ikfgQtmBtH5I/Q8+5IEn4qMwYo1bq/8wUyLe1b3+mQwhq+zEz4TSyHD8HBXd9W3KYcB53MIotwiJNS+m0P5ZlZnpcJm3JwtA==",
            "Expiration": "2020-03-16T21:11:01Z",
            "AccessKeyId": "ASIAZRG8BQ4K2EBXGR42"
        }
    }
  3. 응답에서 AccessKeyId, SecretAccessKeySessionToken을 내보내 환경 변수를 만듭니다.

    export AWS_ACCESS_KEY_ID=ASIAZRG8BQ4K2EBXGR42
    export AWS_SECRET_ACCESS_KEY=JCNFKY7XCUwHWTKcQhmmFokpjLetCmNLZ7pg9SJe
    export AWS_SESSION_TOKEN=FwoGZXIvYXdzEL7//////////wEaDNoBLBJUNYWKaHXZXCKvARBGJ4CqOs+p2JR2a7Euni0d0XuSs31ZA/1QqpX6Spfuz2WAvHCyqwbE3+oxyvyqYlO8dTJwp56YCFCJ6K4Prt9pMeZU9R5NGBJHvRbXXKfxp+jktLc/ItrAfn4GMXWpoyJKZrY7hzv3MASomlIcwSD/RqWIBS1vAoo1UAxwjy29jai0OAPQ51LAnuFKeabgmllyP5Y2gu488P19D7ikfgQtmBtH5I/Q8+5IEn4qMwYo1bq/8wUyLe1b3+mQwhq+zEz4TSyHD8HBXd9W3KYcB53MIotwiJNS+m0P5ZlZnpcJm3JwtA==
  4. 다음 get-caller-identity를 실행하여 ID를 확인합니다.

    aws sts get-caller-identity

    출력에는 assume-role 호출의 ID 자격 증명이 표시됩니다.

AssumeRoleWithWebIdentity를 통해 자격 증명 가져오기

요구 사항: 유효한 OAuth 2.0 액세스 토큰, OpenID Connect 토큰, IdP를 신뢰하는 IAM 역할이 있어야 합니다.

  1. 다음 assume-role 명령을 실행합니다.

    aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789012:role/FederatedWebIdentityRole --role-session-name ExampleSession --web-identity-token
    Atza%7CIQEBLjAsAhRFiXuWpUXuRvQ9PZL3GMFcYevydwIUFAHZwXZXXXXXXXXJnrulxKDHwy87oGKPznh0D6bEQZTSCzyoCtL_8S07pLpr0zMbn6w1lfVZKNTBdDansFBmtGnIsIapjI6xKR02Yc_2bQ8LZbUXSGm6Ry6_BG7PrtLZtj_dfCTj92xNGed-CrKqjG7nPBjNIL016GGvuS5gSvPRUxWES3VYfm1wl7WTI7jn-Pcb6M-buCgHhFOzTQxod27L9CqnOLio7N3gZAGpsp6n1-AJBOCJckcyXe2c6uD0srOJeZlKUm2eTDVMf8IehDVI0r1QOnTV6KzzAI3OY87Vd_cVMQ
    

    응답 예시:

    {
        "SubjectFromWebIdentityToken": "amzn1.account.AF6RHO7KZU5XRVQJGXK6HB56KR2A"
        "Audience": "client.5498841531868486423.1548@apps.example.com",
        "AssumedRoleUser": {
            "Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/ExampleSession",
            "AssumedRoleId": "AROACLKWSDQRAOEXAMPLE:ExampleSession"
        }
        "Credentials": {
            "AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
            "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY",
            "SessionToken": "AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE",
            "Expiration": "2020-05-19T18:06:10+00:00"
        },
        "Provider": "www.amazon.com"
    
  2. .aws/credentials 파일에 AccessKeyId, SecretAccessKeySessionToken을 저장합니다.

    [ExampleRoleProfile]
    aws_access_key_id=AKIAIOSFODNN7EXAMPLE
    aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
    aws_session_token=AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE
    
  3. get-caller-identity 명령을 실행합니다.

    aws sts get-caller-identity --profile ExampleRoleProfile

    assume-role 호출의 ID 자격 증명 출력 예시:

    {
    "UserId": "AROACLKWSDQRAOEXAMPLE:ExampleSession",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/ExampleSession"
    }
    

관련 정보

AD FS를 사용하여 Active Directory 사용자에게 API 또는 AWS CLI에 대한 액세스 권한을 부여하려면 어떻게 해야 합니까?

AWS Tools for PowerShell을 사용하여 페더레이션형 ID 구성

AWS CLI의 구성 및 자격 증명 파일 설정