スキップしてコンテンツを表示

AWS CLI を使用して AssumeRole を呼び出し、一時的ユーザー認証情報を保存する方法を教えてください。

所要時間3分
0

AWS コマンドラインインターフェイス (AWS CLI) を使用して AssumeRoleWithSAML、AssumeRole、AssumeRoleWithWebIdentity から認証情報を取得したいと考えています。

解決策

注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

AssumeRoleWithSAMLAssumeRoleAssumeRoleWithWebIdentity から認証情報を取得するには、API を呼び出して出力をテキストファイルに保存します。次に、その出力を使用して AWS CLI で API コマンドを呼び出します。

注: AssumeRoleWithSAMLAssumeRoleAssumeRoleWithWebIdentity の各コマンドには、パラメータ role-arn および role-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. 応答から AccessKeyIdSecretAccessKey、および SessionToken をエクスポートし、環境変数を作成します。

    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. AccessKeyIdSecretAccessKey、および SessionToken.aws/credentials ファイルに保存します。

    [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"
    }
    

関連情報

Active Directory ユーザーに対し、AD FS を使用して API や AWS CLI へのアクセス権を付与する方法を教えてください

AWS Tools for PowerShell を使用してフェデレーション ID を設定する

AWS CLI での構成および認証情報ファイルの設定

コメントはありません

関連するコンテンツ