如何在不使用AWS访问密钥和秘密密钥的情况下从aws-secrets-manager读取受保护的密钥

40次阅读
没有评论

问题描述

在本地开发环境中创建了一个微服务,该微服务需要访问AWS S3存储桶。以前,用户要求每个使用该解决方案的开发人员自行获取AWS访问密钥和秘密密钥。但最近,公司实施了Okta SSO解决方案,现在有一个新的动机,即使用一个专用的AWS访问密钥(通过Okta)来访问AWS中所需的资源,该密钥具有只读访问权限。用户希望避免在代码中硬编码此AWS访问密钥,而是希望将访问密钥和秘密密钥存储在AWS Secrets Manager中,然后使用一个角色来从那里读取密钥。但问题是,用户必须以某种方式对公司的AWS帐户进行身份验证,以便能够扮演角色并从AWS SM中读取密钥。用户想知道是否有任何方法可以实现这一点。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

一种方法是创建一个服务,该服务通过SSO对AWS进行授权,并通过AWS STS服务提供临时凭证。这样,您就不必在任何地方存储任何内容,一旦用户失去对SSO的访问权限,他们也将失去对AWS的访问权限。您需要一个具有对开发环境的访问权限的角色,开发人员将扮演该角色。
以下是实现此方法的步骤:
1. 创建一个服务,该服务与SSO进行授权,并通过AWS STS服务提供临时凭证。
2. 在AWS中创建一个角色,该角色具有对开发环境的访问权限。
3. 开发人员使用SSO登录,并扮演角色以获取临时凭证。
4. 在代码中使用临时凭证来访问AWS资源。
请注意,此方法确保了安全性,因为开发人员只能在拥有SSO访问权限的情况下访问AWS资源。一旦他们失去对SSO的访问权限,他们将无法访问AWS资源。

方案2

使用AWS CLI配置和使用临时凭证可能需要一些额外的配置和步骤。
另一种方法是使用AWS CLI配置和使用临时凭证来访问AWS Secrets Manager。这样,您可以避免在代码中硬编码访问密钥和秘密密钥。
以下是实现此方法的步骤:
1. 安装并配置AWS CLI。
2. 使用AWS CLI获取临时凭证。您可以使用以下命令:

aws sts assume-role --role-arn <role_arn> --role-session-name <session_name>

其中,<role_arn>是您要扮演的角色的ARN,<session_name>是会话名称。
3. 获取临时凭证后,您可以使用AWS CLI访问AWS Secrets Manager。您可以使用以下命令:

aws secretsmanager get-secret-value --secret-id <secret_id>

其中,<secret_id>是您要访问的密钥的ID。
请注意,此方法需要一些额外的配置和步骤,但它可以帮助您避免在代码中硬编码访问密钥和秘密密钥。

方案3

使用AWS SDK可能需要一些额外的配置和步骤。
另一种方法是使用AWS SDK来访问AWS Secrets Manager。这样,您可以避免在代码中硬编码访问密钥和秘密密钥。
以下是实现此方法的步骤:
1. 安装并配置适用于您选择的编程语言的AWS SDK。
2. 使用AWS SDK获取临时凭证。您可以使用适当的方法来获取临时凭证。
3. 获取临时凭证后,您可以使用AWS SDK访问AWS Secrets Manager。您可以使用适当的方法来访问密钥。
请注意,此方法需要一些额外的配置和步骤,但它可以帮助您避免在代码中硬编码访问密钥和秘密密钥。

正文完