如何使用 AWS CLI 擔任 IAM 角色?

上次更新日期:2023 年 1 月 6 日

我想要使用 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 中常用的文字編輯器,如下所示:

注意:範例取代為您自己的政策名稱、使用者名稱、角色、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 資源名稱),如下所示:

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 政策元素:Principal

建立 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 命令會根據 JSON 檔案的內容建立 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 執行個體的唯讀存取權,並且能夠擔任範例角色

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 命令會輸出多條資訊。在憑證區塊中,需要 AccessKeyIdSecretAccessKeySessionToken。此範例使用環境變數 RoleAccessKeyIDRoleSecretKeyRoleSessionToken。請注意過期欄位的時間戳記,該欄位位於 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=

此文章是否有幫助?


您是否需要帳單或技術支援?