您的位置:首页 > 其它

AWS IAM的简介与使用

2019-05-03 23:07 435 查看

AWS IAM的简介

AWS Identity and Access Management (IAM) 是一种 Web 服务,可以帮助您安全地控制对 AWS 资源的访问。您可以使用 IAM 控制对哪个用户进行身份验证 (登录) 和授权 (具有权限) 以使用资源。

角色

可在账户中创建的具有特定权限的 IAM 身份。IAM 角色类似于 IAM 用户,因为它是一个 AWS 身份,该身份具有确定其在 AWS 中可执行和不可执行的操作的权限策略。

AWS 服务角色

服务代表您在您的账户中执行操作而担任的角色。在设置一些 AWS 服务环境时,您必须为服务定义要代入的角色。这个服务角色必须包含该服务访问所需的 AWS 资源会用到的所有必要权限。比如可以创建为lambda执行的角色。

代码中调用AWS SDK的create role

IAMRepository.createRole(CreateRoleParam, function (err, data) {

if (err) {

callback(err, { error: true });

}

else {

callback(null, data);

}

}, event.CrossAccount, event.subscription);

然后再create和attach role的policy(lambda相关权限的policy)

IAMRepository.createPolicy(results.getPolicyParam, function (error2, data2) {

if (error2) {

console.log(`createPolicy:${results.getPolicyParam.PolicyName} , Err:${JSON.stringify(error2)}`);

callback(error2, { error: true });

} else {

console.log(`createPolicy:${results.getPolicyParam.PolicyName} , Success:${JSON.stringify(data2)}`);

callback(null, data2)

}

}, event.CrossAccount, event.subscription);

IAMRepository.attachRolePolicy(AttachPolicyParam, function (err, data) {

if (err) {

callback(err, { error: true });

} else {

callback(null, data)

}

}, event.CrossAccount, event.subscription)

关于基于 SAML 2.0 的联合身份验证

AWS 使用 SAML 2.0(安全断言标记语言 2.0)支持联合身份验证,SAML 2.0 是许多身份验证提供商 (IdP) 使用的一种开放标准。此功能可实现联合单一登录 (SSO),因此用户可以登录 AWS 管理控制台或调用 AWS API 操作,而不必为组织中的每个人都创建一个 IAM 用户。由于可以使用 IdP 的服务而不必编写自定义身份代理代码,因此您可以通过使用 SAML 来简化为 AWS 配置联合身份验证的过程。

1)创建身份提供商

2)创建SAML 2.0 身份联合的role

代码实现

通过https://signin.aws.amazon.com/saml 可以使用相应的role进行AWS控制台的登入

使用临时安全凭证以请求对 AWS 资源的访问权限

https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html#id_roles_common-scenarios_aws-accounts-example

业务场景:在dev account中的role 1 要访问sandbox account上的role 2

1)添加dev account role 1中对于sandbox role2的assume role policy

2) 编辑 sandbox role 2的trust relationships,添加对于dev account role1的信任节点

3)代码实现,先通过sts 取得目标account 的assume role临时权限,

var RoleArn = env.AssumeRoleParams.RoleArn;

var RoleSessionName = env.AssumeRoleParams.RoleSessionName;

RoleArn = RoleArn.replace(/<AccountId>/g, data.AccountId);

RoleSessionName = RoleSessionName.replace(/<CurrentEnvironment>/g, env.Environment);

RoleSessionName = RoleSessionName.replace(/<TargetEnvironment>/g, data.Environment);

var assumeRoleParams = {

RoleArn: RoleArn,

RoleSessionName: RoleSessionName

}

sts.assumeRole(assumeRoleParams, function (err, data) {

if (err) {

console.log(err, err.stack);

account.isUpdate = false;

return reject(err);

}

else {

account.isUpdate = true;

console.log(data);

account.Credentials = data.Credentials;

return resolve(data);

}

})

}

然后通过临时权限的ak,sk,和session token就可以在dev上访问 sandbox上的各种资源了

if (crossAccount) {

StsService.getAssumeRoleCredential(subscription).then(role => {

const accessparams = {

accessKeyId: role.Credentials.AccessKeyId,

secretAccessKey: role.Credentials.SecretAccessKey,

sessionToken: role.Credentials.SessionToken,

};

const crossIAM = new AWS.IAM(accessparams);

crossIAM.getUser(params, callback);

}).catch(err=>callback(err, null))

} else {

iam.getUser(params, callback);

}

使用 IAM角色向在 Amazon EC2 实例上运行的应用程序授予权限

https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html

在 EC2 实例上运行的应用程序必须将 AWS 凭证包含在其 AWS API 请求中。您可以让开发人员将 AWS 凭证直接存储在 EC2 实例中,并允许该实例中的应用程序使用这些凭证。但开发人员随后必须管理凭证,确保他们能安全地将凭证传递给每个实例,并在需要轮换凭证时更新每个 EC2 实例。这需要进行大量的额外工作。

相反,您可以且应使用 IAM 角色管理在 EC2 实例上运行的应用程序的临时 凭证。在使用角色时,您不需要将长期凭证 (如用户名和密码或访问密钥) 分配给 EC2 实例。角色可提供临时权限供应用程序在调用其他 AWS 资源时使用。当您启动 EC2 实例时,可指定要与实例关联的 IAM 角色。然后,实例上运行的应用程序可使用角色提供的临时凭证对 API 请求进行签名。

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: