我想要與另一個 AWS 帳戶共用我的 AWS Secrets Manager 機密。
簡短描述
在此範例中,Security_Account 使用者管理帳戶 A 中的憑證,帳戶 B 中的開發人員會使用 Dev\ _Account 使用者。AWS Identity and Access Management (IAM) 使用者或應用程式在 Dev_Account 的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體中執行。此使用者或應用程式會擷取 Security_Account 使用者帳戶中的機密。
對機密使用以資源為基礎的政策可讓您將許可政策連接至機密。使用此政策可允許來自您 Dev_Account 中的 IAM 實體存取 Security_Account 中的機密。
使用 AWS Key Management Service (KMS) 金鑰 DevSecretKMS 對 Security_Account (帳戶 A) 中名為 DevSecret 的機密進行加密。然後,機密會與您的 Dev_Account (帳戶 B) 共用。
**注意:**您無法對該帳戶使用 AWS KMS 預設金鑰。AWS KMS 預設金鑰由在 AWS Key Management Service 上執行的 AWS 服務代表您建立、管理及使用。AWS KMS 預設金鑰對您的 AWS 帳戶和 AWS 區域而言是唯一。只有建立 AWS 受管金鑰的服務才能使用它。如需詳細資訊,請參閱 AWS KMS key。
解決方法
設定 Security_Account (帳戶 A)
在您的機密所在區域的 Security_Account (帳戶 A) 中執行下列步驟。
1. 如果您沒有機密,請遵循建立機密的指示進行操作。在機密的 AWS KMS key ID 參數中指定 Amazon Resource Name (ARN)。
2. 如果您具有使用別名的現有機密,請遵循修改密碼的指示進行操作。在機密的 AWS KMS key ID 參數中指定 AWS KMS key ARN。
**注意:**您必須使用完整的 AWS KMS key ARN,才能從另一個 AWS 帳戶存取機密。
3. 在 AWS KMS key 的金鑰政策中授與許可。Secrets Manager 預設會對機密進行加密。擷取這些機密的身分識別需要存取權才能解密。由於 DevSecret 是使用 DevSecretKMS 加密的,因此您必須變更金鑰政策。為此,請新增下列許可
**注意:**將 your-region 取代為您的 AWS 區域。
{ "Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
},
"Action": [
"kms:Decrypt"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ViaService": "secretsmanager.your-region.amazonaws.com"
},
"StringLike": {
"kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
}
}
}
此政策授與 Dev_Account (帳戶 B) 中的 SecretsUser 使用 Security_Account (帳戶 A) 中的 DevSecretKMS 許可。
4. 允許 IAM 實體許可存取機密。從 Security_Account,連接以資源為基礎的政策,該政策授與 SecretsUser 擷取 DevSecret 的許可。
注意: 將主體 ARN 取代為 IAM 使用者或角色的 ARN。
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
},
"Action": "secretsmanager:GetSecretValue",
"Resource": "*"
}
]
設定 Dev_Account (帳戶 B)
在 Dev_Account (帳戶 B) 中完成下列步驟。
1. 將許可連接至您要擷取機密的 IAM 身分。使用類似下列內容的政策:
**注意:**將 your-region 取代為您的 AWS 區域。
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGetSecretValue",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
]
},
{
"Sid": "AllowKMSDecrypt",
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:your-region:Security_Account:key/DevSecretKMS_id"
]
}
]
}
若要讓 IAM 使用者 SecretsUser 在 Dev_Account 中擷取機密,SecretsUser 必須擁有 secretsmanager:GetSecretValue 的許可。SecretsUser 需要 AWS decrypt 許可,因為 DevSecret 使用 DevSecretKey 進行加密。
2. 以 SecretsUser 身分擷取機密,類似以下內容:
$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret --version-stage AWSCURRENT --region your-region
**注意:**將 your-region 取代為機密所在的 AWS 區域。
將這些指示用於所有 IAM 實體。例如,對於 Amazon EC2 執行個體設定檔或角色,請在資源政策中取代或新增 ARN。然後,編輯連接至 IAM 實體的許可。
相關資訊
如何透過連接以資源為基礎的政策跨 AWS 帳戶存取機密
如何解決存取加密的 AWS Secrets Manager 機密的問題?
對於不同帳戶中的使用者獲得 AWS Secrets Manager 機密的許可