如何使用 AWS CLI 擔任 IAM 角色?
我想要使用 AWS Command Line Interface (AWS CLI) 擔任 AWS Identity and Access Management (IAM) 角色。
解決方法
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
若要使用 AWS CLI 擔任 IAM 角色並且具有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的唯獨存取權,請完成下列動作。
重要: 當您在下列步驟執行命令時,您的憑證 (例如密碼) 會以純文字顯示。在您擔任 IAM 角色之後,最佳實務是變更密碼。
建立具有擔任角色許可的 IAM 使用者
- 使用下列命令從 AWS CLI 建立 IAM 使用者:
注意: 用您的 IAM 使用者名稱取代 Bob - 建立向使用者 Bob 授予許可的 IAM 政策。若要這麼做,請使用您選擇的文字編輯器來建立定義 IAM 政策的 JSON 檔案。您可以使用下列 JSON 範例 (example-policy.json) 作為範本:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Describe*", "iam:ListRoles", "sts:AssumeRole" ], "Resource": "*" } ] }
如需有關建立 IAM 政策的詳細資訊,請參閱建立 IAM 政策、以 IAM 身分為基礎的政策範例和 IAM JSON 政策參考。
建立 IAM 政策
若要建立您的 IAM 政策,請完成下列步驟:
- 執行下列 aws iam create-policy 命令:
aws iam create-policy 命令會輸出多條資訊,包括 IAM 政策的 ARN (Amazon Resource Name),如下所示:aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
注意: 用您自己的帳戶 ID 取代 123456789012arn:aws:iam::123456789012:policy/example-policy
- 記下輸出中的 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 檔案
使用文字編輯器來建立定義信任關係的 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 的主體允許帳戶 123456789012 的所有 IAM 身分擔任該角色。如需詳細資訊,請參閱建立角色以將許可委派給 IAM 使用者。
-
建立具有 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。
-
使用下列命令建立 Bob 的存取金鑰:
aws iam create-access-key --user-name Bob
重要: 此 AWS CLI 命令會輸出存取金鑰 ID 和私密存取金鑰。請務必記下這些金鑰。
設定存取金鑰
若要設定存取金鑰,請使用預設設定檔或特定設定檔。若要配置預設設定檔,請執行 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 使用者存取權
請完成下列步驟:
-
執行 aws sts get-caller-identity 命令,如下所示:
aws sts get-caller-identity
aws sts get-caller-identity 命令的輸出包括 ARN。若要驗證 AWS CLI 命令以 Bob 的形式調用,請檢查輸出包括類似於 arn:aws:iam::123456789012:user/Bob 的內容。
-
執行下列命令,確認 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 檔案中建立設定檔來使用 AIM 角色。如需詳細資訊,請參閱在 AWS CLI 中使用 IAM 角色。
-or-
執行下列命令以擔任 IAM 角色:
-
使用下列命令取得角色的 ARN:
aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"
-
此命令會列出 IAM 角色,但依角色名稱篩選輸出。若要擔任 IAM 角色,請執行下列命令:
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session
這些命令會輸出數條資訊。在憑證區塊中,您需要 AccessKeyId、SecretAccessKey 和 SessionToken。此範例使用環境變數 RoleAccessKeyID、RoleSecretKey 和 RoleSessionToken。請注意到期欄位的時間戳記,此欄位位於 UTC 時區。時間戳記指示 IAM 角色的暫時憑證到期時間。如果暫時憑證已到期,您必須再次調用 sts:AssumeRole API 呼叫。
注意: 您可以使用 DurationSeconds 參數,來增加 IAM 角色暫時憑證的最長工作階段持續時間的到期時間。
建立環境變數以擔任 IAM 角色並驗證存取權
-
建立三個環境變數來擔任 IAM 角色。這些環境變數包含下列輸出:
export AWS_ACCESS_KEY_ID=RoleAccessKeyID export AWS_SECRET_ACCESS_KEY=RoleSecretKey export AWS_SESSION_TOKEN=RoleSessionToken
注意: 對於 Windows 系統,請將此命令中的 export 取代為 set。
-
執行下列命令,確認您已擔任 IAM 角色:
aws sts get-caller-identity
若您擔任 example-role,AWS CLI 命令應將 ARN 輸出為 arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session,而不是 arn:aws:iam::123456789012:user/Bob。
-
執行下列命令確認您已建立一個 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 角色的許可正常運作。
-
若要傳回 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...
- 已提問 2 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 個月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 10 個月前