AWS Security Token Service (STS) Example
AWS STS 實驗
本文介紹 AWS Security Token Service (STS) 的使用方法和實驗。STS 提供短期憑證來訪問 AWS 資源,增強安全性和管理方便性。我們將逐步探索 STS 的功能,實現身份驗證和授權。
環境描述
最近公司需要評估 AWS ROSA 在客戶端導入的可行性,因此需要研究其行為,根據 ROSA 的文件,建立 ROSA 的方式可以分成 with STS
及 without STS
,由於之前沒有使用過 AWS STS ,此篇文章作為 STS API 的基本測試步驟:
基本介紹
根據 AWS 官方介紹,AWS STS API 提供了 trusted users 取得 Temporary security credentials 的方法。在 AWS ROSA 上可以帶來一些好處:
測試步驟 (請先設定好 ~/.aws/credentials)
- 建立 User Alice
aws iam create-user --user-name Alice
- 建立 Example Policy
編輯 iam policy 檔案: vi example-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:ListStorageLensConfigurations",
"s3:ListAccessPointsForObjectLambda",
"s3:ListBucketMultipartUploads",
"s3:ListAllMyBuckets",
"s3:ListAccessPoints",
"s3:ListJobs",
"s3:ListBucketVersions",
"s3:ListBucket",
"s3:ListMultiRegionAccessPoints",
"s3:ListMultipartUploadParts"
],
"Resource": "*"
}
]
}
新增 iam policy:
aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
- 建立 Example Role
編輯 iam role policy 檔案: vi example-role-trust-policy.json
請替換
關於 Principal 的說明可以參考 https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html
以下內容將允許 Alice 帳號使用
sts:AssumeRole
的功能
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account-id>:user/Alice"
},
"Action": "sts:AssumeRole"
}
}
新增 iam role:
aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json
- Attach Role Policy
請替換
aws iam attach-role-policy --role-name example-role --policy-arn arn:aws:iam::<account-id>:policy/example-policy
可以透過以下指令進行驗證:
aws iam list-attached-role-policies --role-name example-role
- 取得 Alice 的
Access Key ID
以及Access Secret Access Key
:
aws iam create-access-key --user-name Alice
設定 credentials: vi ~/.aws/credentials
請替換掉
xxx
[Alice]
aws_access_key_id = xxx
aws_secret_access_key = xxx
- 透過 Alice 的 Profile 取得 S3 Buckets (會失敗)
aws s3 ls --profile Alice
- 使用 Alice 的 Profile 呼叫 STS API,並且取得臨時的 Token
請替換
aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/example-role --role-session-name Alice-Session --profile Alice
設定 credentials: vi ~/.aws/credentials
設定
請替換掉
xxx
[Alice-STS]
aws_access_key_id = xxx
aws_secret_access_key = xxx
aws_session_token = xxx
- 透過 Alice-STS 的 Profile 取得 S3 Bucket (會成功)
aws s3 ls --profile Alice-STS
- 可以透過
sts get-caller-identity
查看帳戶資訊:
aws sts get-caller-identity --profile Alice-STS
結論
透過以上結論可以了解 STS 的運作原理,而 AWS ROSA 的原理則是透過 rosa
指令新增許多 Role,並且透過 710019948333
帳號使用 STS API 索取權限後,進行 Openshift 的部署:
Reference
- https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html
- https://cloud.redhat.com/learning/learn:red-hat-openshift-service-aws-rosa-explained/resource/resources:what-aws-security-token-service-sts
- https://access.redhat.com/documentation/en-us/red_hat_openshift_service_on_aws/4/html/prepare_your_environment/rosa-sts-ocm-role
- https://repost.aws/knowledge-center/iam-assume-role-cli