Ravindra BagaleCourses & study guides English

AWS CLI STS Commands: Assume Role आणि Session Tokens

STS short-lived keys देतो. CLI मधून तुम्ही कोण ते तपासा, roles assume करा, MFA वापरा आणि आपोआप role assume करणारे profiles बनवा.

या chapter मध्ये तुम्ही काय शिकाल

  • get-caller-identity
  • assume-role आणि keys export
  • role_arn आणि source_profile profiles
  • MFA session tokens
  • Authorization error decode

1. मोठं चित्र: उसने keys

हे का लागतं?

Hotel checkout ला बंद होणारं room card देतं. STS 15 मिनिटं ते 12 तासांनी बंद होणाऱ्या keys देतो.

हे काय आहे?

Temporary credentials चे तीन भाग: AccessKeyId (ASIA ने सुरू), SecretAccessKey, SessionToken. तिन्ही लागतात.

कसं करायचं (step by step)

CLI मधून AssumeRoleतुमचा user किंवा SSO roleaws sts assume-roleSTS trust policy तपासतोTemporary keys(ASIA..., token)Role म्हणून काम
दोन्ही बाजू हव्यात: तुमची permission आणि role trust.

2. मी कोण?

हे का लागतं?

कोणत्याही बदलाआधी account आणि identity माहीत हवी.

हे काय आहे?

get-caller-identity ला permission लागत नाही, keys valid असतील तर नेहमी चालतो.

कसं करायचं (step by step)

  1. चालवा.
aws sts get-caller-identity

अपेक्षित output:

{ "UserId": "AIDA...", "Account": "111122223333", "Arn": "arn:aws:iam::111122223333:user/ravi" }
  1. फक्त account.
aws sts get-caller-identity --query Account --output text

अपेक्षित output:

111122223333

3. assume-role आणि keys export

हे का लागतं?

Admin rights दहा मिनिटांसाठी हवेत, कायमचे नाही.

हे काय आहे?

assume-role Credentials block देतो. तीन env variables म्हणून export करा.

कसं करायचं (step by step)

  1. Role assume.
aws sts assume-role --role-arn arn:aws:iam::111122223333:role/cli-admin --role-session-name ravi-cli --duration-seconds 900

अपेक्षित output:

{ "Credentials": { "AccessKeyId": "ASIA...", "SecretAccessKey": "...", "SessionToken": "IQoJ...", "Expiration": "2026-10-24T06:15:00Z" },
  "AssumedRoleUser": { "Arn": "arn:aws:sts::111122223333:assumed-role/cli-admin/ravi-cli" } }
  1. एका line मध्ये export.
eval $(aws sts assume-role --role-arn arn:aws:iam::111122223333:role/cli-admin --role-session-name ravi-cli --query "Credentials.['export AWS_ACCESS_KEY_ID='+AccessKeyId,'AWS_SECRET_ACCESS_KEY='+SecretAccessKey,'AWS_SESSION_TOKEN='+SessionToken]" --output text)

अपेक्षित output:

(no output means success)
  1. सोपं: text output आणि read.
read AK SK ST <<< $(aws sts assume-role --role-arn arn:aws:iam::111122223333:role/cli-admin --role-session-name ravi-cli --query "Credentials.[AccessKeyId,SecretAccessKey,SessionToken]" --output text)
export AWS_ACCESS_KEY_ID=$AK AWS_SECRET_ACCESS_KEY=$SK AWS_SESSION_TOKEN=$ST

अपेक्षित output:

(no output means success)
  1. Verify.
aws sts get-caller-identity --query Arn --output text

अपेक्षित output:

arn:aws:sts::111122223333:assumed-role/cli-admin/ravi-cli
  1. परत स्वतः.
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN

अपेक्षित output:

(no output means success)

4. Role profiles: स्वच्छ मार्ग

हे का लागतं?

हाताने keys export करणं slow, आणि expire होतात. Role profile ने CLI स्वतः assume आणि refresh करतो.

हे काय आहे?

~/.aws/config मध्ये role_arn आणि source_profile. MFA साठी mfa_serial. Vendor साठी external_id.

कसं करायचं (step by step)

  1. Profile add करा.
cat >> ~/.aws/config <<'J'
[profile prod-admin]
role_arn = arn:aws:iam::444455556666:role/cli-admin
source_profile = default
mfa_serial = arn:aws:iam::111122223333:mfa/ravi
duration_seconds = 3600
region = ap-south-1
J

अपेक्षित output:

(no output means success)
  1. वापरा.
aws s3 ls --profile prod-admin

अपेक्षित output:

Enter MFA code for arn:aws:iam::111122223333:mfa/ravi: 123456
2026-09-01 10:00:00 prod-logs
  1. Account बदलला verify.
aws sts get-caller-identity --profile prod-admin --query Account --output text

अपेक्षित output:

444455556666

5. MFA session tokens

हे का लागतं?

Policies धोकादायक actions साठी MFA मागतात. साध्या keys fail होतात.

हे काय आहे?

get-session-token --serial-number आणि --token-code सोबत, aws:MultiFactorAuthPresent true असलेल्या keys.

कसं करायचं (step by step)

  1. MFA device ARN.
aws iam list-mfa-devices --user-name ravi --query "MFADevices[0].SerialNumber" --output text

अपेक्षित output:

arn:aws:iam::111122223333:mfa/ravi
  1. Session token.
aws sts get-session-token --serial-number arn:aws:iam::111122223333:mfa/ravi --token-code 123456 --duration-seconds 3600

अपेक्षित output:

{ "Credentials": { "AccessKeyId": "ASIA...", "Expiration": "..." } }

6. Encoded error message decode

हे का लागतं?

काही EC2 errors मोठा encoded string देतात. त्यात deny चं नक्की कारण असतं.

हे काय आहे?

decode-authorization-message वाचता येणारा JSON देतो.

कसं करायचं (step by step)

  1. Decode.
aws sts decode-authorization-message --encoded-message "<long-string>" --query DecodedMessage --output text | python3 -m json.tool | head -8

अपेक्षित output:

{
    "allowed": false,
    "explicitDeny": false,
    "matchedStatements": { "items": [] },
    "context": { "action": "ec2:RunInstances", ...

7. हीच action Python, Node.js, Java, Go, .NET आणि PHP मध्ये

हे का लागतं?

Scripts CLI मध्ये सुरू होतात. Apps तोच API SDK मधून call करतात. दोन्ही माहीत असले की test केलेली command थेट code मध्ये नेता येते.

हे काय आहे?

प्रत्येक CLI command म्हणजे एक API call. उदा. aws sts assume-role म्हणजे AssumeRole API.

कसं करायचं (step by step)

हीच action (AssumeRole) code मधून. प्रत्येक SDK CLI सारखेच profile, region आणि credentials वाचतो.

StackCode
Python (boto3)c = boto3.client("sts").assume_role(RoleArn=arn, RoleSessionName="app")["Credentials"]
Node.js (v3)const {Credentials} = await sts.send(new AssumeRoleCommand({RoleArn: arn, RoleSessionName:"app"}));
Java (v2)sts.assumeRole(r -> r.roleArn(arn).roleSessionName("app")).credentials();
Go (v2)stscreds.NewAssumeRoleProvider(sts.NewFromConfig(cfg), arn)
.NETawait sts.AssumeRoleAsync(new AssumeRoleRequest{RoleArn=arn, RoleSessionName="app"});
PHP$sts->assumeRole(["RoleArn"=>$arn,"RoleSessionName"=>"app"])["Credentials"];

8. काहीही खर्च चालू राहू नये म्हणून cleanup

हे का लागतं?

चालू ठेवलेले lab resources पैसे खातात आणि security risk बनतात.

हे काय आहे?

उलट्या क्रमाने delete करा: आधी children, मग parents.

कसं करायचं (step by step)

  1. Temporary keys unset.
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN

अपेक्षित output:

(no output means success)
  1. Cached role creds clear.
rm -rf ~/.aws/cli/cache

अपेक्षित output:

(no output means success)

Ravindra Bagale's Tip

--role-session-name तुमचं नाव ठेवा. CloudTrail मध्ये दिसतं, कोणी role वापरला ते कळतं.

9. मुलाखत प्रश्न आणि उत्तरं

प्र. STS credentials चे तीन भाग?

AccessKeyId, SecretAccessKey, SessionToken.

प्र. Key temporary आहे कसं ओळखायचं?

ASIA ने सुरू = temporary, AKIA = long-lived.

प्र. source_profile काय करतो?

AssumeRole call साठी कोणत्या profile च्या keys ते सांगतो.

प्र. AssumeRole AccessDenied, कुठे बघायचं?

तुमची sts:AssumeRole permission आणि role trust Principal.

प्र. MFA सोबत get-session-token का?

Policies मधल्या MFA conditions पूर्ण करायला.

घरी करून बघा

  1. ReadOnly role assume करणारा profile बनवून buckets list करा.
  2. 900 seconds साठी role assume करा आणि 15 मिनिटांनी expire बघा.

थोडक्यात सांगायचं तर

  1. आधी get-caller-identity.
  2. assume-role तीन values.
  3. role_arn + source_profile automatic.
  4. MFA: get-session-token किंवा mfa_serial.
  5. decode-authorization-message deny समजावतो.

सराव Tasks

या scenario बद्दल

Dublin Fitness Club हा डब्लिन मधला फिटनेस व्यवसाय आहे. Siobhan Murphy त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे EUR मध्ये मोजले जातात आणि AWS resources eu-west-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 12

सोपं तुम्ही कोण म्हणून login आहात ते पाहा

का: बदल करण्याआधी account व identity नेहमी तपासा.

काय करायचं: तुमचा CLI वापरत असलेल्या identity चा account ID व ARN दाखवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं Sender email verify करा

का: SES फक्त verified addresses/domains वरून पाठवतो.

काय करायचं: noreply@dublinfit.ie sender address verify करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं CloudFormation: versioned bucket

का: IaC मुळे setup पुन्हा करता येतं.

काय करायचं: dublinfit-docs नावाचा, versioning Enabled असलेला एक S3 bucket CloudFormation YAML मध्ये लिहा.

कसं करायचं:
  1. Task मधल्या top-level keys पासून सुरू करा.
  2. Child keys 2 spaces ने indent करा (tabs नकोत).
  3. प्रत्येक property मध्ये task मधली value भरा.
  4. Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.

मध्यम Lambda role साठी trust policy

का: Trust policy role कोण घेऊ शकतो ते सांगते.

काय करायचं: lambda.amazonaws.com ला role assume करू देणारी trust policy लिहा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

मध्यम Role assume करा

का: AssumeRole दुसऱ्या role च्या, बहुदा दुसऱ्या account मधल्या, अल्पकालीन keys देतो.

काय करायचं: Role arn:aws:iam::132788974236:role/Auditor session नाव siobhan-audit ने assume करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Storage खर्च

का: Storage per GB-month.

काय करायचं: S3 Standard मध्ये 500 GB, USD 0.023 per GB-month. Monthly खर्च USD?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

मध्यम Public website साठी bucket policy

का: Static website bucket ने सगळ्यांना files वाचू द्याव्या.

काय करायचं: dublinfit-site मधल्या प्रत्येक object वर कोणालाही (*) s3:GetObject करू देणारी bucket policy लिहा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

मध्यम एका folder मध्ये फक्त upload

का: Field staff files टाकू शकतात पण वाचू/delete करू शकत नाहीत.

काय करायचं: dublinfit-data मध्ये फक्त uploads/ prefix खाली s3:PutObject allow करा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

अवघड दुसऱ्या account ला role assume करू द्या

का: Access keys share करण्यापेक्षा cross-account roles सुरक्षित.

काय करायचं: Account 111122223333 ला हा role assume करू देणारी trust policy लिहा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

अवघड 15 मिनिटांसाठी role assume करा

का: Keys leak झाल्यास छोटे sessions धोका कमी करतात.

काय करायचं: arn:aws:iam::132788974236:role/Deployer ला session नाव deploy-job ने 900 seconds साठी assume करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड MFA सह session token घ्या

का: काही actions ना MFA लागतो. get-session-token MFA proof असलेल्या keys देतो.

काय करायचं: MFA device arn:aws:iam::132788974236:mfa/siobhan व code 123456 वापरून session token घ्या.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Test email पाठवा

का: Code लिहिण्याआधी CLI send ने SES setup तपासतो.

काय करायचं: noreply@dublinfit.ie वरून siobhan@example.com ला subject "Receipt" व text body "Thank you" असा email पाठवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

CLI मधून assume-role. 15 मिनिटांचे admin rights कायमपेक्षा safe. assume-role: AccessKeyId, Secret, SessionToken. तिन्ही export, मग get-caller-identity. परत जायला तिन्ही unset.
उजळणी card: CLI मधून assume-role · PNG download करा · Card page उघडा
Role profiles. हाताने keys export slow, आणि expire. role_arn + source_profile ने CLI स्वतः assume करतो. MFA code साठी mfa_serial. वापर: --profile prod-admin.
उजळणी card: Role profiles · PNG download करा · Card page उघडा
assume-role vs get-session-token. दुसऱ्या role च्या keys. / MFA सोबत स्वतःच्या keys.
तुलना: assume-role vs get-session-token · PNG download करा · Card page उघडा
ASIA vs AKIA key IDs?. ASIA = temporary STS. AKIA = long-lived. Temporary keys ना SessionToken पण लागतो. Token नसेल तर InvalidClientTokenId.
मुलाखत card: ASIA vs AKIA key IDs? · PNG download करा · Card page उघडा

अजून cards: Ravi Sir's Cards.