AWS Identity and Access Management (IAM)

用户可使用 AWS 管理控制台AWS CLI 或通过 软件开发工具包和 API 从多个受支持的平台访问 AWS 服务和资源。IAM 可以帮助您安全地控制对 AWS 服务和资源的访问。

注意:如果您是账户所有者,则可以使用 Root 账户直接登录控制台。不过,我们建议您为每位用户创建个人 IAM 用户并使用个人凭证登录。

管理员必备操作

  • 创建分组,附加相应权限;
  • 创建用户,将用户加入分组以获得权限,禁止直接向用户附加权限;
  • 设置密码策略,路径:IAM -> 账户设置。

主要概念

  • 策略
  • IAM 组
  • IAM 用户(用于标识非 AWS 成员,如人类操作员、本地计算机等)
  • IAM 角色(用于标识 AWS 成员,如各种 AWS services)

用户或系统经过身份验证后还必须经过授权才能访问 AWS 服务。要将权限分配给用户、组、角色或资源,你需要创建一个策略,即一份明确列出各项权限的文档。

策略

策略是描述权限的JSON格式文档,将被分配给用户、组或角色。

策略元素 http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html

IAM 组、用户

  • DevOps组
    • 用户 A
    • 用户 B
  • 测试开发组
    • 用户 C
    • 用户 D

安全设置:

相关文档:

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html

IAM 角色

您可以使用角色,向那些通常无法访问您 AWS 资源的用户、应用程序或服务委托访问权限。

  • 一个 IAM 角色使用一个策略
  • IAM 角色没有相关联的凭证
  • IAM 用户、应用程序和服务可以扮演 IAM 角色

IAM 角色与用户类似,因为它是一种带有权限策略的 AWS 身份,其权限策略确定了改身份在 AWS 中能做什么、不能做什么。但是,角色可用于对其有需要的任何人,而不是只与某个人相关联。此外,角色也不与任何凭证(密码或访问密钥)相关联。相反,如果为用户分配了角色,那么系统会动态创建访问密钥并将其提供给该用户。

授权示例:应用程序对 AWS 资源的访问

托管在 EC2 实例上的应用程序需要与 S3 存储桶中存储的对象进行交互操作。

方案一:将访问密钥和秘密访问密钥嵌入到应用程序代码中,或嵌入应用程序支持的配置文件中。

  1. AWS console -> IAM -> Users -> Choose one user

  2. Choose Security credentials -> Create access key

  3. 编写应用程序代码

     // 使用该方案,每次更改用户的凭证都要求更新代码。在很多情况下,这种方式不安全而且不可行。
    
     $key = 'FAKE00JNM1WBTEHBUA';
     $secret = 'fake00lRROGXZ1rkIoqO9dPqHb24Gk5JcI3bPgiv';
    
     $s3 = new S3Client([
         'credentials' => array(
             'key'    => $key,
             'secret' => $secret),
         'version' => 'latest',
         'region' => 'us-east-1'
     ]);
    
     try {
         // Upload the second object.
         $bucket = 'test-20191209';
         $keyname = 'welcome.jpg';
         $result = $s3->putObject([
             'Bucket' => $bucket,
             'Key'    => $keyname,
             'SourceFile'   => 'images/welcome-bg.jpg',
             'ContentType' => 'image/jpeg',
         ]);
         echo $result['ObjectURL'] . PHP_EOL;
    
     } catch (S3Exception $e) {
         echo $e->getMessage() . PHP_EOL;
     }
    

方案二:将访问密钥和秘密访问密钥存放在 EC2 的指定路径。

  1. 在文本编辑器中,创建一个新文件。在此文件中,粘贴以下代码:

    [default]
    aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
    aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
    
  2. 将 YOUR_AWS_ACCESS_KEY 替换为您的唯一 AWS 访问密钥 ID,并将 YOUR_AWS_SECRET_ACCESS_KEY 替换为您的唯一 AWS 秘密访问密钥。

  3. 如果您使用的是 Windows,将文件另存为 C:\Users\.aws\credentials 如果您使用的是 Linux, macOS, or Unix,将文件另存为~/.aws/credentials

  4. 编写应用程序代码

     // 使用该方案,每次更改用户的凭证都要求服务器管理员登录到 EC2 上修改 credentials 文件内容。在服务器很多时会非常不便,也不安全。
    
     $s3 = new S3Client([
         'profile' => 'default',
         'version' => 'latest',
         'region' => 'us-east-1'
     ]);
    

方案三:创建一个 IAM 角色将临时安全凭证作为实例配置文件的一部分进行传递。

  1. 创建 Policy,命名为 AppInEC2AccessS3

    {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "VisualEditor0",
             "Effect": "Allow",
             "Action": "s3:*",
             "Resource": "*"
         }
     ]
    }
    
  2. 创建 Role,命名为 AppInEC2

  3. Select type of trusted entity: AWS service

  4. Choose the service that will use this role: EC2
  5. Choose one or more policies to attach to your new role: AppInEC2AccessS3

  6. 将 Role 附加到 EC2 上

  7. Select the instance, choose Actions, Instance Settings, Attach/Replace IAM role

  8. Attach AppInEC2 to this EC2

  9. 编写应用程序代码

     // Best practice
    
     $s3 = new S3Client([
         'version' => 'latest',
         'region' => 'us-east-1'
     ]);
    

参考:

results matching ""

    No results matching ""