AWS Security Token Service (STS) Example

AWS STS 實驗

本文介紹 AWS Security Token Service (STS) 的使用方法和實驗。STS 提供短期憑證來訪問 AWS 資源,增強安全性和管理方便性。我們將逐步探索 STS 的功能,實現身份驗證和授權。

環境描述

最近公司需要評估 AWS ROSA 在客戶端導入的可行性,因此需要研究其行為,根據 ROSA 的文件,建立 ROSA 的方式可以分成 with STSwithout STS,由於之前沒有使用過 AWS STS ,此篇文章作為 STS API 的基本測試步驟:

arch

基本介紹

根據 AWS 官方介紹,AWS STS API 提供了 trusted users 取得 Temporary security credentials 的方法。在 AWS ROSA 上可以帶來一些好處:

benefits

測試步驟 (請先設定好 ~/.aws/credentials)

  1. 建立 User Alice
aws iam create-user --user-name Alice
  1. 建立 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
  1. 建立 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
  1. 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
  1. 取得 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
  1. 透過 Alice 的 Profile 取得 S3 Buckets (會失敗)
aws s3 ls --profile Alice
  1. 使用 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
  1. 透過 Alice-STS 的 Profile 取得 S3 Bucket (會成功)
aws s3 ls --profile Alice-STS
  1. 可以透過 sts get-caller-identity 查看帳戶資訊:
aws sts get-caller-identity --profile Alice-STS

結論

透過以上結論可以了解 STS 的運作原理,而 AWS ROSA 的原理則是透過 rosa 指令新增許多 Role,並且透過 710019948333 帳號使用 STS API 索取權限後,進行 Openshift 的部署:

description

Reference