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

4 分的閱讀內容
0

我想要使用 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 命令會輸出數條資訊。在憑證區塊中,您需要 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=

相關資訊

角色術語和概念

create-role

建立角色以將許可委派給 AWS 服務