使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

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

4 分的閱讀內容
0

我想要使用 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 使用者

  1. 使用下列命令從 AWS CLI 建立 IAM 使用者
    注意: 用您的 IAM 使用者名稱取代 Bob
  2. 建立向使用者 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 政策,請完成下列步驟:

  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
    注意: 用您自己的帳戶 ID 取代 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 檔案

使用文字編輯器來建立定義信任關係的 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 使用者

  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 和私密存取金鑰。請務必記下這些金鑰。

設定存取金鑰

若要設定存取金鑰,請使用預設設定檔或特定設定檔。若要配置預設設定檔,請執行 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。若要驗證 AWS CLI 命令以 Bob 的形式調用,請檢查輸出包括類似於 arn:aws:iam::123456789012:user/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 檔案中建立設定檔來使用 AIM 角色。如需詳細資訊,請參閱在 AWS CLI 中使用 IAM 角色

-or-

執行下列命令以擔任 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

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

    若您擔任 example-role,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 傳回。

    **注意:**對於 Windows 系統,請將環境變數設定為空字串以清除其內容,如下所示:

    SET AWS_ACCESS_KEY_ID=
    SET AWS_SECRET_ACCESS_KEY=
    SET AWS_SESSION_TOKEN=

相關資訊

角色術語和概念

create-role

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