如何使用 AWS CLI 擔任 IAM 角色?
我想要使用 AWS Command Line Interface (AWS CLI) 擔任 AWS Identity and Access Management (IAM) 角色。
解決方法
若要使用 AWS CLI 擔任 IAM 角色並且具有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的唯讀存取權,請執行下列操作:
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確認您執行的是最新版本的 AWS CLI。
重要: 執行下列步驟的命令會以純文字顯示您的憑證,例如密碼。在您擔任 IAM 角色之後,最佳實務是變更密碼。
建立具有擔任角色許可的 IAM 使用者
1. 使用下列命令透過 AWS CLI 建立 IAM 使用者:
**注意:**將 Bob 取代為您的 IAM 使用者名稱。
aws iam create-user --user-name Bob
2. 建立使用 AWS CLI 向 Bob 授予許可的 IAM 政策。使用偏好的文字編輯器建立定義 IAM 政策的 JSON 檔案。例如,您可以使用 vim,這是 Linux 中常用的文字編輯器,如下所示:
**注意:**將 example 取代為您自己的政策名稱、使用者名稱、角色、JSON 檔案名稱、設定檔名稱和金鑰。
vim example-policy.json
3. example-policy.json 檔案的內容與下列內容類似:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Describe*", "iam:ListRoles", "sts:AssumeRole" ], "Resource": "*" } ] }
如需有關建立 IAM 政策的詳細資訊,請參閱建立 IAM 政策、以 IAM 身分為基礎的政策範例和 IAM JSON 政策參考。
建立 IAM 政策
1. 使用下列 aws iam create-policy 命令:
aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
aws iam create-policy 命令會輸出多條資訊,包括 IAM 政策的 ARN (Amazon Resource Name),如下所示:
arn:aws:iam::123456789012:policy/example-policy
**注意:**將 123456789012 取代為您自己的帳戶。
2. 記下輸出中的 IAM 政策 ARN,並使用 attach-user-policy 命令將政策連接至 Bob。然後,使用 list-attached-user-policies 命令檢查以確保連接妥當,如下所示:
aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy" aws iam list-attached-user-policies --user-name Bob
建立定義 IAM 角色信任關係的 JSON 檔案
1. 建立定義信任關係的 JSON 檔案,如下所示:
vim example-role-trust-policy.json
2. example-role-trust-policy.json 檔案的內容與下列內容類似:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "123456789012" }, "Action": "sts:AssumeRole" } }
此信任政策允許帳户 123456789012 的使用者和角色擔任此角色,前提是這些使用者和角色在許可政策中允許 sts:AssumeRole 動作。您還可以限制信任關係,以便 IAM 角色僅由特定 IAM 使用者擔任。您可以指定類似於 arn:aws:iam::123456789012:user/example-username 的主體來執行此操作。如需詳細資訊,請參閱 AWS JSON 政策元素: 主體。
建立 IAM 角色並連接政策
建立可由 Bob 擔任的 IAM 角色,該角色擁有對 Amazon Relational Database Service (Amazon RDS) 執行個體的唯讀存取權。由於 IAM 角色由 IAM 使用者擔任,因此,必須指定一個主體,以允許 IAM 使用者擔任該角色。例如,類似於 arn:aws:iam::123456789012:root 的主體允許帳戶的所有 IAM 身分擔任該角色。如需詳細資訊,請參閱建立角色以將許可委派給 IAM 使用者。
1. 建立具有 Amazon RDS 資料庫執行個體唯讀存取權的 IAM 角色。根據您的安全要求,將 IAM 政策連接至您的 IAM 角色。
aws iam create-role 命令會建立 IAM 角色,並根據您在先前部分中建立的 JSON 檔案定義信任關係。aws iam attach-role-policy 命令會將 AWS 受管政策 AmazonRDSReadOnlyAccess 連接至角色。您可以根據安全要求連接不同的政策 (受管政策和自訂政策)。aws iam list-attached-role-policies 命令會顯示連接至 IAM 角色 example-role 的 IAM 政策。請參閱下列命令範例:
aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess" aws iam list-attached-role-policies --role-name example-role
**注意:**確認 Bob 具有對 EC2 執行個體的唯讀存取權,且可以擔任 example-role。
2. 使用下列命令建立 Bob 的存取金鑰:
aws iam create-access-key --user-name Bob
AWS CLI 命令會輸出存取金鑰 ID 和私密存取金鑰。請務必記下這些金鑰。
設定存取金鑰
1. 若要設定存取金鑰,請使用預設設定檔或特定設定檔。若要設定預設設定檔,請執行 aws configure。若要建立新的特定設定檔,請執行 aws configure --profile example_-_profile-name。在此範例中,設定了預設設定檔,如下所示:
aws configure AWS Access Key ID [None]: ExampleAccessKeyID1 AWS Secret Access Key [None]: ExampleSecretKey1 Default region name [None]: eu-west-1 Default output format [None]: json
注意:對於預設區域名稱,請指定您的 AWS 區域。
確認已調用 AWS CLI 命令,然後驗證 IAM 使用者存取權
1. 執行 aws sts get-caller-identity 命令,如下所示:
aws sts get-caller-identity
aws sts get-caller-identity 命令會輸出三條資訊,包括 ARN。輸出顯示類似於 arn:aws:iam::123456789012:user/Bob 的內容,以確認 AWS CLI 命令以 Bob 的形式調用。
2. 透過執行下列命令,確認 IAM 使用者具有對 EC2 執行個體的唯讀存取權,並且沒有 Amazon RDS 資料庫執行個體的存取權:
aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]" aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"
aws ec2 describe-instances 命令應會向您顯示 eu-west-1 區域中的所有 EC2 執行個體。aws rds describe-db-instances 命令一定會產生存取遭拒錯誤訊息,因為 Bob 無權存取 Amazon RDS。
擔任 IAM 角色
請執行下列其中一個操作:
透過在 ~/.aws/config 檔案中建立設定檔來使用 IAM 角色。如需詳細資訊,請參閱在 AWS CLI 中使用 IAM 角色。
-或-
透過執行下列操作,擔任 IAM 角色:
1. 透過執行下列命令,取得角色的 ARN:
aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"
2. 此命令會列出 IAM 角色,但依角色名稱篩選輸出。若要擔任 IAM 角色,請執行下列命令:
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session
AWS CLI 命令會輸出數條資訊。在憑證區塊中,您需要 AccessKeyId、SecretAccessKey 和 SessionToken。此範例使用環境變數RoleAccessKeyID、RoleSecretKey 和 RoleSessionToken。請注意到期欄位的時間戳記,此欄位位於 UTC 時區。時間戳記指示 IAM 角色的暫時憑證到期時間。如果暫時憑證已到期,您必須再次調用 sts:AssumeRole API 呼叫。
**注意:**您可以使用 DurationSeconds 參數,來增加 IAM 角色暫時憑證的最長工作階段持續時間到期時間。
建立環境變數以擔任 IAM 角色並驗證存取權
1. 建立三個環境變數來擔任 IAM 角色。這些環境變數填寫下列輸出:
export AWS_ACCESS_KEY_ID=RoleAccessKeyID export AWS_SECRET_ACCESS_KEY=RoleSecretKey export AWS_SESSION_TOKEN=RoleSessionToken
**注意:**對於 Windows 系統,請將此命令中的 export 取代為 set。
2. 透過執行下列命令,確認您已擔任 IAM 角色:
aws sts get-caller-identity
AWS CLI 命令應將 ARN 輸出為 arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session,而不是 arn:aws:iam::123456789012:user/Bob,以確認您已擔任 example-role。
3. 使用下列命令確認您已建立一個 IAM 角色,此角色具有對 Amazon RDS 資料庫執行個體的唯讀存取權,但沒有對 EC2 執行個體的存取權:
aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]" aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"
aws ec2 describe-instances 命令應會產生存取遭拒錯誤訊息。aws rds describe-db-instances 命令應會傳回 Amazon RDS 資料庫執行個體。這會確認指派給 IAM 角色的許可正常工作。
4. 若要傳回 IAM 使用者,請移除環境變數,如下所示:
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN aws sts get-caller-identity
unset 命令會移除環境變數,aws sts get-caller-identity 命令則會確認您會作為 IAM 使用者 Bob 傳回。
**注意:**對於 Windows 系統,請將環境變數設定為空字串以清除其內容,如下所示:
SET AWS_ACCESS_KEY_ID= SET AWS_SECRET_ACCESS_KEY= SET AWS_SESSION_TOKEN=
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- 已提問 6 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前