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

上次更新日期:2021 年 5 月 11 日

我想要使用 AWS Command Line Interface (AWS CLI) 擔任 AWS Identity and Access Management (IAM) 角色。該如何進行?

解決方案

遵循這些說明使用 AWS CLI 擔任 IAM 角色。在此範例中,執行這些步驟之後,使用者將擁有對 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的唯讀存取權和擔任 IAM 角色的許可。

注意:如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI

建立具有擔任角色許可的 IAM 使用者

1.    使用 AWS CLI 建立 IAM 使用者

注意:Bob 取代為您的 IAM 使用者名稱。

aws iam create-user --user-name Bob

2.    建立使用 AWS CLI 向 Bob 授予許可的 IAM 政策。必須使用您偏好的文字編輯器,來建立定義 IAM 政策的 JSON 檔案。本範例使用 Linux 常用的 vim:

注意:範例取代為您自己的政策名稱、使用者名稱、角色、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": "arn:aws:iam::123456789012:root" },
        "Action": "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 命令會根據 JSON 檔案的內容建立 IAM 角色,並定義信任關係。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

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,這會驗證您是否承擔範例角色

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 傳回。


此文章是否有幫助?


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