zoukankan      html  css  js  c++  java
  • [AWS] Using EC2 Roles and Instance Profiles in AWS

    Instance Profile contains 

    • Temporary credentials
    • Role

    IP will help to rotate the temporary credentials on your behalf. 

    in short, IP works as "Who am I", Role works as "What can I do".

    From bastion instance

    Trust policy

    This is a policy that's going to allow the EC2 service to assume the role.

    trust_policy_ec2.json

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {"Service": "ec2.amazonaws.com"},
          "Action": "sts:AssumeRole"
        }
      ]
    }

    Create a Role

    aws iam create-role --role-name DEV_ROLE --assume-role-policy-document file://trust_policy_ec2.json

    output:

    {
        "Role": {
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17", 
                "Statement": [
                    {
                        "Action": "sts:AssumeRole", 
                        "Effect": "Allow", 
                        "Principal": {
                            "Service": "ec2.amazonaws.com"
                        }
                    }
                ]
            }, 
            "RoleId": "AROA47D3RVJAWO66RBUQO", 
            "CreateDate": "2021-12-03T06:29:28Z", 
            "RoleName": "DEV_ROLE", 
            "Path": "/", 
            "Arn": "arn:aws:iam::891464821313:role/DEV_ROLE"
        }
    }

    Assign the read premission for S3 bucket

    Create a IAM policy

    dev_s3_read_access.json

    {
        "Version": "2012-10-17",
        "Statement": [
            {
              "Sid": "AllowUserToSeeBucketListInTheConsole",
              "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
              "Effect": "Allow",
              "Resource": ["arn:aws:s3:::*"]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:Get*",
                    "s3:List*"
                ],
                "Resource": [
                    "arn:aws:s3:::<DEV_S3_BUCKET_NAME>/*",
                    "arn:aws:s3:::<DEV_S3_BUCKET_NAME>"
                ]
            }
        ]
    }
    aws iam create-policy --policy-name DevS3ReadAccess --policy-document file://dev_s3_read_access.json

    Output:

    {
        "Policy": {
            "PolicyName": "DevS3ReadAccess", 
            "PermissionsBoundaryUsageCount": 0, 
            "CreateDate": "2021-12-03T06:46:34Z", 
            "AttachmentCount": 0, 
            "IsAttachable": true, 
            "PolicyId": "ANPA47D3RVJAVY25G7FJD", 
            "DefaultVersionId": "v1", 
            "Path": "/", 
            "Arn": "arn:aws:iam::xxxxxxxxxxxxx:policy/DevS3ReadAccess", 
            "UpdateDate": "2021-12-03T06:46:34Z"
        }
    }

    Attach the policy just create to the Role:

    aws iam attach-role-policy --role-name DEV_ROLE --policy-arn "arn:aws:iam::xxxxxxxxxx:policy/DevS3ReadAccess"

    We can check the attached policy:

    aws iam list-attached-role-policies --role-name DEV_ROLE

    Output:

    {
        "AttachedPolicies": [
            {
                "PolicyName": "DevS3ReadAccess", 
                "PolicyArn": "arn:aws:iam::xxxxxxxxxx:policy/DevS3ReadAccess"
            }
        ]
    }

    Create Instnace Profile

    aws iam create-instance-profile --instance-profile-name DEV_PROFILE

    Add role to the Instance profile:

    aws iam add-role-to-instance-profile --instance-profile-name DEV_PROFILE --role-name DEV_ROLE

    Verify the configuration:

    aws iam get-instance-profile --instance-profile-name DEV_PROFILE

    Output:

    {
        "InstanceProfile": {
            "InstanceProfileId": "AIPA47D3RVJAXRQTVYALZ", 
            "Roles": [
                {
                    "AssumeRolePolicyDocument": {
                        "Version": "2012-10-17", 
                        "Statement": [
                            {
                                "Action": "sts:AssumeRole", 
                                "Effect": "Allow", 
                                "Principal": {
                                    "Service": "ec2.amazonaws.com"
                                }
                            }
                        ]
                    }, 
                    "RoleId": "AROA47D3RVJAWO66RBUQO", 
                    "CreateDate": "2021-12-03T06:29:28Z", 
                    "RoleName": "DEV_ROLE", 
                    "Path": "/", 
                    "Arn": "arn:aws:iam::xxxxxxxxx:role/DEV_ROLE"
                }
            ], 
            "CreateDate": "2021-12-03T06:53:01Z", 
            "InstanceProfileName": "DEV_PROFILE", 
            "Path": "/", 
            "Arn": "arn:aws:iam::xxxxxxxxxxx:instance-profile/DEV_PROFILE"
        }
    }

    Associate the IAM Instance profile with EC2 instance ID:

    aws ec2 associate-iam-instance-profile --instance-id <LAB_WEB_SERVER_INSTANCE_ID> --iam-instance-profile Name="DEV_PROFILE"

    Verify the configuration:

    aws ec2 describe-instances --instance-ids <LAB_WEB_SERVER_INSTANCE_ID>

    Then we can ssh into web server EC2 instance.

    Determine the identity currently being used:

    aws sts get-caller-identity

    Output:

    {
        "Account": "891464821313", 
        "UserId": "AROA47D3RVJAWO66RBUQO:i-03b3df010e7557b9c", 
        "Arn": "arn:aws:sts::xxxxxxxx:assumed-role/DEV_ROLE/i-03b3df010e7557b9c"
    }

    List the bucket

    aws s3 ls
    aws s3 ls s3://<s3bucketprod-123>

    Summary:

    • We created a Role, so that EC2 instance can assume this role
    • Created a policy allowing that role to access an S3 bucket
    • Assoicated the policy with the role
    • Created a development instance profile and associated that instance
    • Attached the instance profile to EC2 instance
    • Verified that Web server EC2 instnace can read from S3

    Create a Policy for PROD from Console

    1. create a policy called it "ProdS3ReadAccess"

    2. create a role for EC2:

    In this step, it will automaticlly create a Trust policy allowing EC2 to assume the role we are creating.

    You can notice it has Trusted entities: 

     

     

    Assign PROD_ROLE to web server instance

    Now, if we do:

    aws sts get-caller-identity

    Output:

    {
        "Account": "891464821313", 
        "UserId": "AROA47D3RVJAVLWZUY6X7:i-03b3df010e7557b9c", 
        "Arn": "arn:aws:sts::xxxxxxxxx:assumed-role/PROD_ROLE/i-03b3df010e7557b9c"
    }

    Now you can veiw the PROD bucket but not other bucket.

     

  • 相关阅读:
    二、魔法函数
    Metaclasses
    一、python中的一切皆对象
    三、鸭子类型
    SQL进行排序、分组、统计的10个新技巧
    输入地址栏可以编辑页面的js
    项目开发中常用JS表单取值方法
    [导入]通用的分页存储过程
    107个常用Javascript语句
    [导入]事务处理
  • 原文地址:https://www.cnblogs.com/Answer1215/p/15638125.html
Copyright © 2011-2022 走看看